51cb20e8bf
Signed-off-by: Som Qin <som.qin@starfivetech.com>
61 lines
2.0 KiB
Diff
61 lines
2.0 KiB
Diff
From 23c80a346def541e7a750efa22be1da64777067e Mon Sep 17 00:00:00 2001
|
|
From: Som Qin <som.qin@starfivetech.com>
|
|
Date: Wed, 18 Oct 2023 09:55:16 +0800
|
|
Subject: [PATCH] Support direct display using of wave511 omx decoder
|
|
|
|
Gets environment variables "SF_OMX_SLICE" to support special cases
|
|
|
|
Signed-off-by: Som Qin <som.qin@starfivetech.com>
|
|
---
|
|
sys/kms/gstkmsallocator.c | 27 ++++++++++++++++++++++++++-
|
|
1 file changed, 26 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/sys/kms/gstkmsallocator.c b/sys/kms/gstkmsallocator.c
|
|
index cb2f6bd..493cd92 100644
|
|
--- a/sys/kms/gstkmsallocator.c
|
|
+++ b/sys/kms/gstkmsallocator.c
|
|
@@ -189,7 +189,18 @@ gst_kms_allocator_memory_create (GstKMSAllocator * allocator,
|
|
fmt = gst_drm_format_from_video (GST_VIDEO_INFO_FORMAT (vinfo));
|
|
arg.bpp = gst_drm_bpp_from_drm (fmt);
|
|
arg.width = GST_VIDEO_INFO_WIDTH (vinfo);
|
|
- h = GST_VIDEO_INFO_HEIGHT (vinfo);
|
|
+ char* env = NULL;
|
|
+ env = getenv("SF_OMX_SLICE");
|
|
+ if (env) {
|
|
+ gint slice, i;
|
|
+ slice = atoi(env);
|
|
+ if (slice > 0 && slice > vinfo->height) {
|
|
+ h = slice;
|
|
+ } else {
|
|
+ h = GST_VIDEO_INFO_HEIGHT (vinfo);
|
|
+ }
|
|
+ } else
|
|
+ h = GST_VIDEO_INFO_HEIGHT (vinfo);
|
|
arg.height = gst_drm_height_from_drm (fmt, h);
|
|
|
|
ret = drmIoctl (allocator->priv->fd, DRM_IOCTL_MODE_CREATE_DUMB, &arg);
|
|
@@ -498,6 +509,20 @@ gst_kms_allocator_bo_alloc (GstAllocator * allocator, GstVideoInfo * vinfo)
|
|
|
|
mem = GST_MEMORY_CAST (kmsmem);
|
|
|
|
+ char* env = NULL;
|
|
+ env = getenv("SF_OMX_SLICE");
|
|
+ if (env) {
|
|
+ gint slice, i;
|
|
+ slice = atoi(env);
|
|
+ if (slice > 0 && slice > vinfo->height) {
|
|
+ GST_DEBUG_OBJECT (alloc, "slice %d is large than height %d, recalculate size/offset",
|
|
+ slice, vinfo->height );
|
|
+ vinfo->size = vinfo->size / vinfo->height * slice;
|
|
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; i++)
|
|
+ vinfo->offset[i] = vinfo->offset[i] / vinfo->height * slice;
|
|
+ }
|
|
+ }
|
|
+
|
|
if (!gst_kms_allocator_memory_create (alloc, kmsmem, vinfo)) {
|
|
g_slice_free (GstKMSMemory, kmsmem);
|
|
return NULL;
|
|
--
|
|
2.25.1
|
|
|