summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStef Boerrigter <stef_boerrigter@hotmail.com>2020-03-16 09:09:46 +0100
committerStef Boerrigter <stef_boerrigter@hotmail.com>2020-04-16 09:40:26 +0100
commit19f6faf671438dc9c5165733a1b060fe2dfe1956 (patch)
tree3fa506f7c5ff54013887ef12403e64d0dc160fdb /src
parent7bd13d3f98a6f1f9cf7aed122fd2f301fbae9d62 (diff)
GSTVideoRender: Update viewport on gst video buffer crop metadata
If the video buffer contains crop metadata update a viewport for the video frame format. Fixes: QTBUG-82448 Change-Id: Iace150c6c03b48662cc9f0112b45fbe6401d6061 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/gsttools/qgstvideorenderersink.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp
index 3b458a978..13edcb820 100644
--- a/src/gsttools/qgstvideorenderersink.cpp
+++ b/src/gsttools/qgstvideorenderersink.cpp
@@ -141,6 +141,19 @@ bool QGstDefaultVideoRenderer::present(QAbstractVideoSurface *surface, GstBuffer
if (!videoBuffer)
videoBuffer = new QGstVideoBuffer(buffer, m_videoInfo);
+ auto meta = gst_buffer_get_video_crop_meta (buffer);
+ if (meta) {
+ QRect vp(meta->x, meta->y, meta->width, meta->height);
+ if (m_format.viewport() != vp) {
+#ifdef DEBUG_VIDEO_SURFACE_SINK
+ qDebug() << Q_FUNC_INFO << " Update viewport on Metadata: [" << meta->height << "x" << meta->width << " | " << meta->x << "x" << meta->y << "]";
+#endif
+ //Update viewport if data is not the same
+ m_format.setViewport(vp);
+ surface->start(m_format);
+ }
+ }
+
QVideoFrame frame(
videoBuffer,
m_format.frameSize(),