static GstCaps * gst_aspect_ratio_crop_get_caps (GstPad * pad) { GstPad *peer; GstAspectRatioCrop *aspect_ratio_crop; GstCaps *return_caps; aspect_ratio_crop = GST_ASPECT_RATIO_CROP (gst_pad_get_parent (pad)); g_mutex_lock (aspect_ratio_crop->crop_lock); peer = gst_pad_get_peer (aspect_ratio_crop->sink); if (peer == NULL) { return_caps = gst_static_pad_template_get_caps (&src_template); gst_caps_ref (return_caps); } else { GstCaps *peer_caps; peer_caps = gst_pad_get_caps (peer); return_caps = gst_aspect_ratio_crop_transform_caps (aspect_ratio_crop, peer_caps); gst_caps_unref (peer_caps); gst_object_unref (peer); } g_mutex_unlock (aspect_ratio_crop->crop_lock); gst_object_unref (aspect_ratio_crop); return return_caps; }
static GstCaps * gst_aspect_ratio_crop_get_caps (GstPad * pad, GstCaps * filter) { GstPad *peer; GstAspectRatioCrop *aspect_ratio_crop; GstCaps *return_caps; aspect_ratio_crop = GST_ASPECT_RATIO_CROP (gst_pad_get_parent (pad)); g_mutex_lock (&aspect_ratio_crop->crop_lock); peer = gst_pad_get_peer (aspect_ratio_crop->sink); if (peer == NULL) { return_caps = gst_static_pad_template_get_caps (&src_template); } else { GstCaps *peer_caps; peer_caps = gst_pad_query_caps (peer, filter); return_caps = gst_aspect_ratio_crop_transform_caps (aspect_ratio_crop, peer_caps); gst_caps_unref (peer_caps); gst_object_unref (peer); } g_mutex_unlock (&aspect_ratio_crop->crop_lock); gst_object_unref (aspect_ratio_crop); if (return_caps && filter) { GstCaps *tmp = gst_caps_intersect_full (filter, return_caps, GST_CAPS_INTERSECT_FIRST); gst_caps_replace (&return_caps, tmp); gst_caps_unref (tmp); } return return_caps; }