diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-04-25 18:16:20 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-04-25 18:16:20 +0000 |
commit | b58fe00616d9bbc14888605eebf335704c03a9b9 (patch) | |
tree | 15e33361754248420b7ab1e1b0ca46df95791f93 | |
parent | 3d55f87758d4c163046dbfd7d55c6f4180665d40 (diff) | |
download | gst-libav-b58fe00616d9bbc14888605eebf335704c03a9b9.tar.gz |
ext/ffmpeg/gstffmpegdec.c: Use CODEC_CAP_DELAY and remove max-10-delayed-frames hack.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_handle_event):
Use CODEC_CAP_DELAY and remove max-10-delayed-frames hack.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegdec.c | 24 |
2 files changed, 18 insertions, 11 deletions
@@ -1,3 +1,8 @@ +2005-04-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + + * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_handle_event): + Use CODEC_CAP_DELAY and remove max-10-delayed-frames hack. + 2005-04-23 Luca Ognibene <luogni@tin.it> Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net> diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index ae86f21..ab59fe1 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -778,22 +778,24 @@ gst_ffmpegdec_frame (GstFFMpegDec * ffmpegdec, static void gst_ffmpegdec_handle_event (GstFFMpegDec * ffmpegdec, GstEvent * event) { + GstFFMpegDecClass *oclass = + (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec)); + GST_DEBUG_OBJECT (ffmpegdec, "Handling event of type %d", GST_EVENT_TYPE (event)); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_EOS: { - gint have_data, len, try = 0; - - /* max. 10 times, for safety (see e.g. #300200) */ - do { - len = gst_ffmpegdec_frame (ffmpegdec, NULL, 0, &have_data, - &ffmpegdec->next_ts); - if (len < 0 || have_data == 0) - break; - } while (try++ < 10); + case GST_EVENT_EOS: + if (oclass->in_plugin->capabilities & CODEC_CAP_DELAY) { + gint have_data, len, try = 0; + do { + len = gst_ffmpegdec_frame (ffmpegdec, NULL, 0, &have_data, + &ffmpegdec->next_ts); + if (len < 0 || have_data == 0) + break; + } while (try++ < 10); + } goto forward; - } case GST_EVENT_FLUSH: if (ffmpegdec->opened) { avcodec_flush_buffers (ffmpegdec->context); |