v4l2videoenc: Delay capture pool activation
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 22 Dec 2017 03:29:06 +0000 (22:29 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 8 Jan 2018 22:20:52 +0000 (17:20 -0500)
This is support CODA driver which prevents setting the output format if
the capture is streaming.

https://bugzilla.gnome.org/show_bug.cgi?id=791338

sys/v4l2/gstv4l2videoenc.c

index 8e914f6..6be1bed 100644 (file)
@@ -343,6 +343,14 @@ gst_v4l2_video_enc_set_format (GstVideoEncoder * encoder,
     return FALSE;
   }
 
+  /* activating a capture pool will also call STREAMON. CODA driver will
+   * refuse to configure the output if the capture is stremaing. */
+  if (!gst_buffer_pool_set_active (GST_BUFFER_POOL (self->v4l2capture->pool),
+          TRUE)) {
+    GST_WARNING_OBJECT (self, "Could not activate capture buffer pool.");
+    return FALSE;
+  }
+
   self->input_state = gst_video_codec_state_ref (state);
 
   GST_DEBUG_OBJECT (self, "output caps: %" GST_PTR_FORMAT, state->caps);
@@ -581,12 +589,6 @@ gst_v4l2_video_enc_negotiate (GstVideoEncoder * encoder)
   if (!GST_VIDEO_ENCODER_CLASS (parent_class)->negotiate (encoder))
     return FALSE;
 
-  if (!gst_buffer_pool_set_active (GST_BUFFER_POOL (self->v4l2capture->pool),
-          TRUE)) {
-    GST_WARNING_OBJECT (self, "Could not activate capture buffer pool.");
-    return FALSE;
-  }
-
   return TRUE;
 
 g_ctrl_failed: