v4l2videodec: Handle gst_pad_start_task() failure
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 23 May 2014 21:28:13 +0000 (17:28 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Sat, 24 May 2014 19:38:53 +0000 (15:38 -0400)
sys/v4l2/gstv4l2videodec.c

index edf10c3..3d793e9 100644 (file)
@@ -516,8 +516,9 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
     /* Start the processing task, when it quits, the task will disable input
      * processing to unlock input if draining, or prevent potential block */
     g_atomic_int_set (&self->processing, TRUE);
-    gst_pad_start_task (decoder->srcpad,
-        (GstTaskFunction) gst_v4l2_video_dec_loop, self, NULL);
+    if (!gst_pad_start_task (decoder->srcpad,
+            (GstTaskFunction) gst_v4l2_video_dec_loop, self, NULL))
+      goto start_task_failed;
   }
 
   if (frame->input_buffer) {
@@ -562,6 +563,15 @@ flushing:
     ret = GST_FLOW_FLUSHING;
     goto drop;
   }
+
+start_task_failed:
+  {
+    GST_ELEMENT_ERROR (self, RESOURCE, FAILED,
+        (_("Failed to start decoding thread.")), (NULL));
+    g_atomic_int_set (&self->processing, FALSE);
+    ret = GST_FLOW_ERROR;
+    goto drop;
+  }
 process_failed:
   {
     GST_ELEMENT_ERROR (self, RESOURCE, FAILED,