diff options
author | Raimo Järvi <raimo.jarvi@gmail.com> | 2010-03-18 14:08:51 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-03-18 14:08:51 +0100 |
commit | 9637ff5ab1a44c150617c13f5108f2a0b61c0d4e (patch) | |
tree | 6915935d31601a67d3f3af48a05dd0b38ede6f8f | |
parent | 798e0f962922cc43b8e5eec25e146ac3bd12de08 (diff) |
ffdec: Update caps if the aspect ratio changes
Fixes bug #613231.
-rw-r--r-- | ext/ffmpeg/gstffmpegdec.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index 73a4007..025a3b1 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -102,6 +102,7 @@ struct _GstFFMpegDec { gint width, height; gint clip_width, clip_height; + gint par_n, par_d; gint fps_n, fps_d; gint old_fps_n, old_fps_d; gboolean interlaced; @@ -437,6 +438,7 @@ gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec) gst_ts_handler_init (ffmpegdec); + ffmpegdec->format.video.par_n = -1; ffmpegdec->format.video.fps_n = -1; ffmpegdec->format.video.old_fps_n = -1; gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME); @@ -600,6 +602,7 @@ gst_ffmpegdec_close (GstFFMpegDec * ffmpegdec) ffmpegdec->pctx = NULL; } + ffmpegdec->format.video.par_n = -1; ffmpegdec->format.video.fps_n = -1; ffmpegdec->format.video.old_fps_n = -1; ffmpegdec->format.video.interlaced = FALSE; @@ -1189,19 +1192,30 @@ gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec, gboolean force) && ffmpegdec->format.video.height == ffmpegdec->context->height && ffmpegdec->format.video.fps_n == ffmpegdec->format.video.old_fps_n && ffmpegdec->format.video.fps_d == ffmpegdec->format.video.old_fps_d - && ffmpegdec->format.video.pix_fmt == ffmpegdec->context->pix_fmt) + && ffmpegdec->format.video.pix_fmt == ffmpegdec->context->pix_fmt + && ffmpegdec->format.video.par_n == + ffmpegdec->context->sample_aspect_ratio.num + && ffmpegdec->format.video.par_d == + ffmpegdec->context->sample_aspect_ratio.den) return TRUE; GST_DEBUG_OBJECT (ffmpegdec, - "Renegotiating video from %dx%d@ %d/%d fps to %dx%d@ %d/%d fps", + "Renegotiating video from %dx%d@ %d:%d PAR %d/%d fps to %dx%d@ %d:%d PAR %d/%d fps", ffmpegdec->format.video.width, ffmpegdec->format.video.height, + ffmpegdec->format.video.par_n, ffmpegdec->format.video.par_d, ffmpegdec->format.video.old_fps_n, ffmpegdec->format.video.old_fps_n, ffmpegdec->context->width, ffmpegdec->context->height, + ffmpegdec->context->sample_aspect_ratio.num, + ffmpegdec->context->sample_aspect_ratio.den, ffmpegdec->format.video.fps_n, ffmpegdec->format.video.fps_d); ffmpegdec->format.video.width = ffmpegdec->context->width; ffmpegdec->format.video.height = ffmpegdec->context->height; ffmpegdec->format.video.old_fps_n = ffmpegdec->format.video.fps_n; ffmpegdec->format.video.old_fps_d = ffmpegdec->format.video.fps_d; ffmpegdec->format.video.pix_fmt = ffmpegdec->context->pix_fmt; + ffmpegdec->format.video.par_n = + ffmpegdec->context->sample_aspect_ratio.num; + ffmpegdec->format.video.par_d = + ffmpegdec->context->sample_aspect_ratio.den; break; case CODEC_TYPE_AUDIO: { |