MMFMWK-8261 glupload: handle video crop on output caps
crop width and height on output caps to get right video size
Signed-off-by: Haihua Hu <jared.hu@nxp.com>
diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c
index 52bd76a..876705e 100644
--- a/ext/gl/gstgluploadelement.c
+++ b/ext/gl/gstgluploadelement.c
@@ -228,6 +228,7 @@
GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (bt);
GstGLUploadReturn ret;
GstBaseTransformClass *bclass;
+ GstVideoCropMeta *crop = NULL;
bclass = GST_BASE_TRANSFORM_GET_CLASS (bt);
@@ -239,6 +240,24 @@
if (!upload->upload)
return GST_FLOW_NOT_NEGOTIATED;
+ crop = gst_buffer_get_video_crop_meta(buffer);
+
+ if (crop) {
+ GstCaps * out_caps = gst_caps_copy (upload->out_caps);
+ gst_caps_set_simple (out_caps, "width", G_TYPE_INT, crop->width,
+ "height", G_TYPE_INT, crop->height, NULL);
+
+ if (!gst_caps_is_equal (out_caps, upload->out_caps)){
+ GST_DEBUG ("new out caps %" GST_PTR_FORMAT " old out caps %" GST_PTR_FORMAT,
+ out_caps, upload->out_caps);
+ if (gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (bt),
+ gst_event_new_caps (out_caps))) {
+ gst_caps_replace (&upload->out_caps, out_caps);
+ gst_gl_upload_set_caps (upload->upload, upload->in_caps, out_caps);
+ }
+ }
+ }
+
ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf);
if (ret == GST_GL_UPLOAD_RECONFIGURE) {
gst_base_transform_reconfigure_src (bt);