/* * cheese_camera_device_add_format: * @device: a #CheeseCameraDevice * @format: the #CheeseVideoFormatFull to add * * Add the supplied @format to the list of formats supported by the @device. */ static void cheese_camera_device_add_format (CheeseCameraDevice *device, CheeseVideoFormatFull *format, const GValue *framerate) { CheeseCameraDevicePrivate *priv = device->priv; CheeseVideoFormatFull *existing; existing = cheese_camera_device_find_full_format (device, (CheeseVideoFormat *)format); if (existing) { g_slice_free (CheeseVideoFormatFull, format); cheese_camera_device_format_update_framerate (existing, framerate); return; } cheese_camera_device_get_highest_framerate (framerate, &format->fr_numerator, &format->fr_denominator); GST_INFO ("%dx%d framerate %d/%d", format->width, format->height, format->fr_numerator, format->fr_denominator); priv->formats = g_list_insert_sorted (priv->formats, format, compare_formats); }
/** * cheese_camera_device_get_caps_for_format: * @device: a #CheeseCameraDevice * @format: a #CheeseVideoFormat * * Get the #GstCaps for the given @format on the @device. * * Returns: (transfer full): the #GstCaps for the given @format */ GstCaps * cheese_camera_device_get_caps_for_format (CheeseCameraDevice *device, CheeseVideoFormat *format) { CheeseCameraDevicePrivate *priv; CheeseVideoFormatFull *full_format; GstCaps *desired_caps; GstCaps *subset_caps; gsize i; g_return_val_if_fail (CHEESE_IS_CAMERA_DEVICE (device), NULL); full_format = cheese_camera_device_find_full_format (device, format); if (!full_format) { GST_INFO ("Getting caps for %dx%d: no such format!", format->width, format->height); return gst_caps_new_empty (); } GST_INFO ("Getting caps for %dx%d @ %d/%d fps", full_format->width, full_format->height, full_format->fr_numerator, full_format->fr_denominator); desired_caps = gst_caps_new_empty (); for (i = 0; supported_formats[i] != NULL; i++) { gst_caps_append (desired_caps, cheese_camera_device_format_to_caps (supported_formats[i], full_format)); } priv = cheese_camera_device_get_instance_private (device); subset_caps = gst_caps_intersect (desired_caps, priv->caps); subset_caps = gst_caps_simplify (subset_caps); gst_caps_unref (desired_caps); GST_INFO ("Got %" GST_PTR_FORMAT, subset_caps); return subset_caps; }