static void gst_aspect_ratio_crop_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstAspectRatioCrop *aspect_ratio_crop; gboolean recheck = FALSE; aspect_ratio_crop = GST_ASPECT_RATIO_CROP (object); GST_OBJECT_LOCK (aspect_ratio_crop); switch (prop_id) { case ARG_ASPECT_RATIO_CROP: if (GST_VALUE_HOLDS_FRACTION (value)) { aspect_ratio_crop->ar_num = gst_value_get_fraction_numerator (value); aspect_ratio_crop->ar_denom = gst_value_get_fraction_denominator (value); recheck = (GST_PAD_CAPS (aspect_ratio_crop->sink) != NULL); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } GST_OBJECT_UNLOCK (aspect_ratio_crop); if (recheck) { gst_aspect_ratio_crop_set_caps (aspect_ratio_crop->sink, GST_PAD_CAPS (aspect_ratio_crop->sink)); } }
static gboolean gst_aspect_ratio_crop_sink_event (GstPad * pad, GstObject * parent, GstEvent * evt) { gboolean ret; GstAspectRatioCrop *aspect_ratio_crop = GST_ASPECT_RATIO_CROP (parent); ret = aspect_ratio_crop->sinkpad_old_eventfunc (pad, parent, gst_event_ref (evt)); switch (GST_EVENT_TYPE (evt)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (evt, &caps); ret = gst_aspect_ratio_crop_set_caps (aspect_ratio_crop, caps); break; } default: break; } gst_event_unref (evt); return ret; }