aspectratiocrop: Handle resolution changes properly

When an caps-event is received, we must immediately change the crop
to videocrop correctly changed caps-event dimension, otherwise the
videocrop will first use the previous value of the crop that when
resizing video to a smaller resolution may cause an error.

https://bugzilla.gnome.org/show_bug.cgi?id=740671
This commit is contained in:
Andrei Sarakeev 2014-11-26 10:33:09 +03:00 committed by Sebastian Dröge
parent f2f1663677
commit 6348de195d
2 changed files with 2 additions and 11 deletions

View file

@ -152,28 +152,22 @@ static gboolean
gst_aspect_ratio_crop_sink_event (GstPad * pad, GstObject * parent, gst_aspect_ratio_crop_sink_event (GstPad * pad, GstObject * parent,
GstEvent * evt) GstEvent * evt)
{ {
gboolean ret;
GstAspectRatioCrop *aspect_ratio_crop = GST_ASPECT_RATIO_CROP (parent); 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)) { switch (GST_EVENT_TYPE (evt)) {
case GST_EVENT_CAPS: case GST_EVENT_CAPS:
{ {
GstCaps *caps; GstCaps *caps;
gst_event_parse_caps (evt, &caps); gst_event_parse_caps (evt, &caps);
ret = gst_aspect_ratio_crop_set_caps (aspect_ratio_crop, caps); gst_aspect_ratio_crop_set_caps (aspect_ratio_crop, caps);
break; break;
} }
default: default:
break; break;
} }
gst_event_unref (evt);
return ret; return gst_pad_event_default (pad, parent, evt);
} }
static void static void
@ -253,8 +247,6 @@ gst_aspect_ratio_crop_init (GstAspectRatioCrop * aspect_ratio_crop)
aspect_ratio_crop->sink); aspect_ratio_crop->sink);
gst_object_unref (link_pad); gst_object_unref (link_pad);
aspect_ratio_crop->sinkpad_old_eventfunc =
GST_PAD_EVENTFUNC (aspect_ratio_crop->sink);
gst_pad_set_event_function (aspect_ratio_crop->sink, gst_pad_set_event_function (aspect_ratio_crop->sink,
GST_DEBUG_FUNCPTR (gst_aspect_ratio_crop_sink_event)); GST_DEBUG_FUNCPTR (gst_aspect_ratio_crop_sink_event));
} }

View file

@ -46,7 +46,6 @@ struct _GstAspectRatioCrop
GstElement *videocrop; GstElement *videocrop;
GstPad *sink; GstPad *sink;
GstPadEventFunction sinkpad_old_eventfunc;
/* target aspect ratio */ /* target aspect ratio */
gint ar_num; /* if < 1 then don't change ar */ gint ar_num; /* if < 1 then don't change ar */