linuxOS_AP06/buildroot/package/gstreamer1/gst1-plugins-bad/0048-kmssink-Support-forcing-disable-aspect-ratio.patch
2025-06-03 12:28:32 +08:00

71 lines
2.3 KiB
Diff

From 21a4de4f2bb10063fb36dc0f141c542d03f6b743 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Thu, 30 May 2024 17:53:49 +0800
Subject: [PATCH 48/48] kmssink: Support forcing disable aspect ratio
Tested on RK3588 EVB with:
export KMSSINK_IGNORE_ASPECT=1
gst-launch-1.0 videotestsrc ! kmssink render-rectangle='<0, 0, 500, 500>'
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
sys/kms/gstkmssink.c | 8 ++++++--
sys/kms/gstkmssink.h | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index f85461e..9fd1746 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -1844,7 +1844,7 @@ gst_kms_sink_calculate_display_ratio (GstKMSSink * self, GstVideoInfo * vinfo,
video_par_n = GST_VIDEO_INFO_PAR_N (vinfo);
video_par_d = GST_VIDEO_INFO_PAR_D (vinfo);
- if (self->can_scale && self->keep_aspect) {
+ if (self->can_scale && self->keep_aspect && !self->force_ignore_aspect) {
gst_video_calculate_device_ratio (self->hdisplay, self->vdisplay,
self->mm_width, self->mm_height, &dpy_par_n, &dpy_par_d);
} else {
@@ -2461,7 +2461,7 @@ retry_set_plane:
result.x += self->render_rect.x;
result.y += self->render_rect.y;
- if (self->can_scale && !self->keep_aspect)
+ if (self->can_scale && (!self->keep_aspect || self->force_ignore_aspect))
result = self->render_rect;
/* Restore the real source size */
@@ -2864,6 +2864,7 @@ gst_kms_sink_init (GstKMSSink * sink)
sink->plane_id = -1;
sink->saved_zpos = -1;
sink->can_scale = TRUE;
+ sink->force_ignore_aspect = FALSE;
sink->keep_aspect = TRUE;
sink->sync_mode = DEFAULT_SYNC_MODE;
gst_poll_fd_init (&sink->pollfd);
@@ -2871,6 +2872,9 @@ gst_kms_sink_init (GstKMSSink * sink)
gst_video_info_init (&sink->vinfo);
sink->skip_vsync = FALSE;
+ if (g_getenv ("KMSSINK_IGNORE_ASPECT"))
+ sink->force_ignore_aspect = TRUE;
+
if (g_getenv ("KMSSINK_DISABLE_VSYNC"))
sink->skip_vsync = TRUE;
diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h
index 80b5c3e..9f31ac8 100644
--- a/sys/kms/gstkmssink.h
+++ b/sys/kms/gstkmssink.h
@@ -131,6 +131,7 @@ struct _GstKMSSink {
guintptr window_handle;
gboolean keep_aspect;
+ gboolean force_ignore_aspect;
gboolean fullscreen;
GstKMSSyncMode sync_mode;
--
2.20.1