diff --git a/ChangeLog b/ChangeLog index f588aaa485..7c734736a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-04-25 Ronald S. Bultje + + * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_handle_event): + Use CODEC_CAP_DELAY and remove max-10-delayed-frames hack. + 2005-04-23 Luca Ognibene Reviewed by: Ronald S. Bultje diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index ae86f21026..ab59fe1d37 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);