ext/ffmpeg/gstffmpegdec.c (struct _GstFFMpegDec)
authorLuca Ognibene <luogni@tin.it>
Mon, 11 Jul 2005 13:51:45 +0000 (13:51 +0000)
committerLuca Ognibene <luogni@tin.it>
Mon, 11 Jul 2005 13:51:45 +0000 (13:51 +0000)
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
ext/ffmpeg/gstffmpegdec.c

index 24e1832..aba3e7a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-07-11  Luca Ognibene  <luogni@tin.it>
+
+       * 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  <dan@f3c.com>
 
        Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
index 82f0b1b..4cd16b5 100644 (file)
@@ -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 ==