summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnout Vandecappelle <arnout@mind.be>2009-06-09 16:34:04 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-06-25 16:05:56 +0200
commit0192717045efda4443473ab6b6973b8c1e7339b3 (patch)
treec0d6569df31d57835988cd15b48cb41c4ae9ba0b
parent77866555126148d878a6a1a7b6ad2433b393b2d6 (diff)
ffmpegdec: don't drop buffers when caps change.
Fixes #585257
-rw-r--r--ext/ffmpeg/gstffmpegdec.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c
index 04684be..9742d3e 100644
--- a/ext/ffmpeg/gstffmpegdec.c
+++ b/ext/ffmpeg/gstffmpegdec.c
@@ -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 */