summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorYeongjin Jeong <yeongjin.jeong@navercorp.com>2019-04-29 15:02:06 +0900
committerYeongjin Jeong <yeongjin.jeong@navercorp.com>2019-04-29 15:38:42 +0900
commit93e2466115172a858ec1a70a3dac2c3d13bec87f (patch)
tree8bc17b9bad9396f5dc9611949b42e7dd6be65cc2 /ext
parent2b6e9d303d1598421406c04a9e74d2858b02f89c (diff)
downloadgst-libav-93e2466115172a858ec1a70a3dac2c3d13bec87f.tar.gz
avviddec: 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.
Diffstat (limited to 'ext')
-rw-r--r--ext/libav/gstavviddec.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index 374bd9e..e600b21 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -1729,28 +1729,19 @@ static GstFlowReturn
gst_ffmpegviddec_drain (GstVideoDecoder * decoder)
{
GstFFMpegVidDec *ffmpegdec = (GstFFMpegVidDec *) decoder;
- GstFFMpegVidDecClass *oclass;
+ GstFlowReturn ret;
+ gboolean got_frame = FALSE;
if (!ffmpegdec->opened)
return GST_FLOW_OK;
- oclass = (GstFFMpegVidDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
-
- if (oclass->in_plugin->capabilities & AV_CODEC_CAP_DELAY) {
- GstFlowReturn ret;
- gboolean got_frame = FALSE;
-
- GST_LOG_OBJECT (ffmpegdec,
- "codec has delay capabilities, calling until ffmpeg 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 {
- got_frame = gst_ffmpegviddec_frame (ffmpegdec, NULL, &ret);
- } while (got_frame && ret == GST_FLOW_OK);
- avcodec_flush_buffers (ffmpegdec->context);
- }
+ do {
+ got_frame = gst_ffmpegviddec_frame (ffmpegdec, NULL, &ret);
+ } while (got_frame && ret == GST_FLOW_OK);
+ avcodec_flush_buffers (ffmpegdec->context);
done:
return GST_FLOW_OK;