ffmpegviddec: Properly return if negotiation fails
authorEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 15 Jun 2012 10:19:58 +0000 (12:19 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 15 Jun 2012 10:19:58 +0000 (12:19 +0200)
Instead of crashing ....

ext/ffmpeg/gstffmpegviddec.c

index 8e8b03d..988c5ea 100644 (file)
@@ -1089,7 +1089,8 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
     else
       GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-    gst_ffmpegviddec_negotiate (ffmpegdec, TRUE);
+    if (!gst_ffmpegviddec_negotiate (ffmpegdec, TRUE))
+      goto negotiation_error;
   }
 
   if (G_UNLIKELY (out_frame->output_buffer == NULL))
@@ -1110,7 +1111,8 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
     else
       GST_VIDEO_INFO_INTERLACE_MODE (&ffmpegdec->input_state->info) =
           GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-    gst_ffmpegviddec_negotiate (ffmpegdec, TRUE);
+    if (!gst_ffmpegviddec_negotiate (ffmpegdec, TRUE))
+      goto negotiation_error;
   }
 
   /* check if we are dealing with a keyframe here, this will also check if we
@@ -1163,6 +1165,13 @@ no_output:
     len = -1;
     goto beach;
   }
+
+negotiation_error:
+  {
+    GST_WARNING_OBJECT (ffmpegdec, "Error negotiating format");
+    *ret = GST_FLOW_NOT_NEGOTIATED;
+    goto beach;
+  }
 }