ffmpegdec: don't drop buffers when caps change.
authorArnout Vandecappelle <arnout@mind.be>
Tue, 9 Jun 2009 14:34:04 +0000 (16:34 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 25 Jun 2009 14:05:56 +0000 (16:05 +0200)
Fixes #585257

ext/ffmpeg/gstffmpegdec.c

index 04684be..9742d3e 100644 (file)
@@ -224,6 +224,8 @@ static int gst_ffmpegdec_get_buffer (AVCodecContext * context,
 static void gst_ffmpegdec_release_buffer (AVCodecContext * context,
     AVFrame * picture);
 
+static void gst_ffmpegdec_drain (GstFFMpegDec * ffmpegdec);
+
 static void gst_ts_handler_init (GstFFMpegDec * ffmpegdec);
 static void gst_ts_handler_append (GstFFMpegDec * ffmpegdec,
     GstBuffer * buffer);
@@ -685,6 +687,11 @@ gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps)
     oclass->in_plugin->id = gst_ffmpeg_caps_to_codecid (caps, NULL);
 
   /* close old session */
+  if (ffmpegdec->opened) {
+    GST_OBJECT_UNLOCK (ffmpegdec);
+    gst_ffmpegdec_drain (ffmpegdec);
+    GST_OBJECT_LOCK (ffmpegdec);
+  }
   gst_ffmpegdec_close (ffmpegdec);
 
   /* set defaults */