/* Probing functions */ gboolean gst_v4l2_is_transform (GstCaps * sink_caps, GstCaps * src_caps) { gboolean ret = FALSE; if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ()) && gst_caps_is_subset (src_caps, gst_v4l2_object_get_raw_caps ())) ret = TRUE; return ret; }
static gboolean gst_v4l2_transform_open (GstV4l2Transform * self) { GST_DEBUG_OBJECT (self, "Opening"); if (!gst_v4l2_object_open (self->v4l2output)) goto failure; if (!gst_v4l2_object_open_shared (self->v4l2capture, self->v4l2output)) goto failure; self->probed_sinkcaps = gst_v4l2_object_get_caps (self->v4l2output, gst_v4l2_object_get_raw_caps ()); if (gst_caps_is_empty (self->probed_sinkcaps)) goto no_input_format; self->probed_srccaps = gst_v4l2_object_get_caps (self->v4l2capture, gst_v4l2_object_get_raw_caps ()); if (gst_caps_is_empty (self->probed_srccaps)) goto no_output_format; return TRUE; no_input_format: GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS, (_("Converter on device %s has no supported input format"), self->v4l2output->videodev), (NULL)); goto failure; no_output_format: GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS, (_("Converter on device %s has no supported output format"), self->v4l2output->videodev), (NULL)); goto failure; failure: if (GST_V4L2_IS_OPEN (self->v4l2output)) gst_v4l2_object_close (self->v4l2output); if (GST_V4L2_IS_OPEN (self->v4l2capture)) gst_v4l2_object_close (self->v4l2capture); gst_caps_replace (&self->probed_srccaps, NULL); gst_caps_replace (&self->probed_sinkcaps, NULL); return FALSE; }
/* Probing functions */ gboolean gst_v4l2_is_h264_enc (GstCaps * sink_caps, GstCaps * src_caps) { gboolean ret = FALSE; GstCaps *codec_caps; codec_caps = gst_static_caps_get (&src_template_caps); if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ()) && gst_caps_can_intersect (src_caps, codec_caps)) ret = TRUE; gst_caps_unref (codec_caps); return ret; }