From 53f3d5be338203c02f07297e909fe252ac1e7e0c Mon Sep 17 00:00:00 2001 From: Luca Ognibene Date: Mon, 11 Jul 2005 13:51:45 +0000 Subject: [PATCH] ext/ffmpeg/gstffmpegdec.c (struct _GstFFMpegDec) Original commit message from CVS: * ext/ffmpeg/gstffmpegdec.c (struct _GstFFMpegDec) (gst_ffmpegdec_open, gst_ffmpegdec_negotiate): Cache the pixel format value and renegotiate the pipeline if this value changes. Fixes segfault when decoding a stream with different colorspaces like a sequence of jpeg. --- ChangeLog | 8 ++++++++ ext/ffmpeg/gstffmpegdec.c | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 24e1832455..aba3e7aaf5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-07-11 Luca Ognibene + + * ext/ffmpeg/gstffmpegdec.c (struct _GstFFMpegDec) + (gst_ffmpegdec_open, gst_ffmpegdec_negotiate): + Cache the pixel format value and renegotiate the pipeline + if this value changes. Fixes segfault when decoding a + stream with different colorspaces like a sequence of jpeg. + 2005-07-11 daniel fischer Reviewed by: Ronald S. Bultje diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index 82f0b1b6a3..4cd16b57d1 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -54,6 +54,7 @@ struct _GstFFMpegDec union { struct { gint width, height, fps, fps_base; + enum PixelFormat pix_fmt; } video; struct { gint channels, samplerate; @@ -414,6 +415,7 @@ gst_ffmpegdec_open (GstFFMpegDec *ffmpegdec) ffmpegdec->format.video.height = 0; ffmpegdec->format.video.fps = 0; ffmpegdec->format.video.fps_base = 0; + ffmpegdec->format.video.pix_fmt = PIX_FMT_NB; break; case CODEC_TYPE_AUDIO: ffmpegdec->format.audio.samplerate = 0; @@ -583,7 +585,8 @@ gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec) ffmpegdec->format.video.height == ffmpegdec->context->height && ffmpegdec->format.video.fps == ffmpegdec->context->frame_rate && ffmpegdec->format.video.fps_base == - ffmpegdec->context->frame_rate_base) + ffmpegdec->context->frame_rate_base && + ffmpegdec->format.video.pix_fmt == ffmpegdec->context->pix_fmt) return TRUE; GST_DEBUG ("Renegotiating video from %dx%d@%d/%dfps to %dx%d@%d/%dfps", ffmpegdec->format.video.width, ffmpegdec->format.video.height, @@ -594,6 +597,7 @@ gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec) ffmpegdec->format.video.height = ffmpegdec->context->height; ffmpegdec->format.video.fps = ffmpegdec->context->frame_rate; ffmpegdec->format.video.fps_base = ffmpegdec->context->frame_rate_base; + ffmpegdec->format.video.pix_fmt = ffmpegdec->context->pix_fmt; break; case CODEC_TYPE_AUDIO: if (ffmpegdec->format.audio.samplerate ==