ffmpegviddec: Properly update the interlacing
authorEdward Hervey <edward.hervey@collabora.co.uk>
Thu, 14 Jun 2012 13:13:31 +0000 (15:13 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Thu, 14 Jun 2012 13:13:31 +0000 (15:13 +0200)
Fixes #678080

ext/ffmpeg/gstffmpegviddec.c

index a4afe08a1be81ae7c8fdf59f8cf580159fbbaa6b..8e8b03d10a9caade39f840988873359d50a23729 100644 (file)
@@ -1073,20 +1073,21 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
       (guint64) ffmpegdec->picture->reordered_opaque);
   GST_DEBUG_OBJECT (ffmpegdec, "repeat_pict:%d",
       ffmpegdec->picture->repeat_pict);
-  GST_DEBUG_OBJECT (ffmpegdec, "interlaced_frame:%d",
-      ffmpegdec->picture->interlaced_frame);
+  GST_DEBUG_OBJECT (ffmpegdec, "interlaced_frame:%d (current:%d)",
+      ffmpegdec->picture->interlaced_frame,
+      GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->input_state->info));
 
-  if (G_UNLIKELY (ffmpegdec->output_state
+  if (G_UNLIKELY (ffmpegdec->input_state
           && ffmpegdec->picture->interlaced_frame !=
-          GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->output_state->info))) {
+          GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->input_state->info))) {
     GST_WARNING ("Change in interlacing ! picture:%d, recorded:%d",
         ffmpegdec->picture->interlaced_frame,
-        GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->output_state->info));
+        GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->input_state->info));
     if (ffmpegdec->picture->interlaced_frame)
-      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->output_state->info) =
+      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
     else
-      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->output_state->info) =
+      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
     gst_ffmpegviddec_negotiate (ffmpegdec, TRUE);
   }
@@ -1097,17 +1098,17 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
   if (G_UNLIKELY (*ret != GST_FLOW_OK))
     goto no_output;
 
-  if (G_UNLIKELY (ffmpegdec->output_state
+  if (G_UNLIKELY (ffmpegdec->input_state
           && ffmpegdec->picture->interlaced_frame !=
-          GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->output_state->info))) {
+          GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->input_state->info))) {
     GST_WARNING ("Change in interlacing ! picture:%d, recorded:%d",
         ffmpegdec->picture->interlaced_frame,
-        GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->output_state->info));
+        GST_VIDEO_INFO_IS_INTERLACED (&ffmpegdec->input_state->info));
     if (ffmpegdec->picture->interlaced_frame)
-      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->output_state->info) =
+      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
     else
-      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->output_state->info) =
+      GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
     gst_ffmpegviddec_negotiate (ffmpegdec, TRUE);
   }