summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-04-25 18:16:20 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-04-25 18:16:20 +0000
commitb58fe00616d9bbc14888605eebf335704c03a9b9 (patch)
tree15e33361754248420b7ab1e1b0ca46df95791f93
parent3d55f87758d4c163046dbfd7d55c6f4180665d40 (diff)
downloadgst-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--ChangeLog5
-rw-r--r--ext/ffmpeg/gstffmpegdec.c24
2 files changed, 18 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index f588aaa..7c73473 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);