From 21a4de4f2bb10063fb36dc0f141c542d03f6b743 Mon Sep 17 00:00:00 2001 From: Jeffy Chen 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 --- 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