mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
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:
parent
f2f1663677
commit
6348de195d
2 changed files with 2 additions and 11 deletions
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue