libdrm_meson: add function for zorder setting [1/1]
PD#TV-85483
Problem:
add function for zorder setting
Solution:
Add drmIoctl interface
Verify:
AH212.
Change-Id: I8929c689730ddd1cd6c026fddcdd6a3a9683e399
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index eff843a..5a847e9 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -18,6 +18,7 @@
#include "libdrm_meson_property.h"
#include "meson_drm_settings.h"
#include "meson_drm_log.h"
+#include "meson_drm.h"
#define DEFAULT_CARD "/dev/dri/card0"
#define PROP_NAME_MAX_LEN 50
@@ -996,3 +997,19 @@
return value;
}
+int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag) {
+ int ret = -1;
+ struct video_zpos zpos;
+ if ( drmFd < 0) {
+ ERROR("%s %d drmFd < 0",__FUNCTION__,__LINE__);
+ return ret;
+ }
+ zpos.flag = flag;
+ zpos.index = index;
+ zpos.zpos = zorder;
+ ret = drmIoctl(drmFd, DRM_IOCTL_MESON_SET_VIDEO_ZPOS, &zpos);
+ if (ret) {
+ ERROR("\n failed to create object[%s].\n",strerror(errno));
+ }
+ return ret;
+}
diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index bda2e3e..bc8eb38 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -19,6 +19,12 @@
#endif
#define DRM_DISPLAY_MODE_LEN 32
+struct video_zpos {
+ unsigned int index;//<--Representing video index Index 0 corresponds to modifying video 0;Index 1 corresponds to modifying video 1-->//
+ unsigned int zpos; //<--Represents the zorder value set-->//
+ unsigned int flag; //<-- Make the settings effective Set flag equal to 1 to indicate effectiveness-->//
+};
+
typedef enum _MESON_CONTENT_TYPE {
MESON_CONTENT_TYPE_Data = 0,
MESON_CONTENT_TYPE_Graphics,
@@ -152,6 +158,7 @@
int meson_drm_getHdrCap( int drmFd, MESON_CONNECTOR_TYPE connType );
int meson_drm_getDvCap( int drmFd, MESON_CONNECTOR_TYPE connType );
+int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag);
int meson_open_drm();
void meson_close_drm(int drmFd);
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index f9938b5..5efb491 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -161,7 +161,7 @@
meson_close_drm(drmFd);
} else if (select_s_g == 0 && select_len == 1) {
printf("set value:1.av mute 2.HDMI HDCP enable 3.HDCP Content Type "
- " 4.DvEnable 5.active 6.vrr Enable\n");
+ " 4.DvEnable 5.active 6.vrr Enable 7.video zorder \n");
int set = 0;
int ret = -1;
drmModeAtomicReq * req;
@@ -237,6 +237,19 @@
} else {
printf("\n scanf fail\n");
}
+ } else if (set == 7 && len == 1) {
+ printf("\n please enter the parameters in order(index zorder flag): \n");
+ int zorder = 0;
+ int index = 0;
+ int flag = 0;
+ len = scanf("%d %d %d",&index,&zorder,&flag);
+ if (len == 3) {
+ int ret = meson_drm_setVideoZorder(drmFd, index, zorder, flag);
+ if (ret)
+ printf("\n meson_drm_setVideoZorder fail:\n");
+ } else {
+ printf("\n \ scanf fail \n");
+ }
}
ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
if (ret) {
diff --git a/meson_drm.h b/meson_drm.h
index ec05b1e..e7ce079 100644
--- a/meson_drm.h
+++ b/meson_drm.h
@@ -2,7 +2,6 @@
/*
* Copyright © 2019-2022 Amlogic Inc.
*/
-
#ifndef _MESON_DRM_H
#define _MESON_DRM_H
@@ -38,6 +37,12 @@
__u32 handle;
};
+struct drm_meson_video_zpos_target {
+ __u32 index;
+ __u32 zpos;
+ __u32 flag;
+};
+
/*Memory related.*/
#define DRM_IOCTL_MESON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
0x00, struct drm_meson_gem_create)
@@ -48,4 +53,7 @@
#define DRM_IOCTL_MESON_ASYNC_ATOMIC DRM_IOWR(DRM_COMMAND_BASE + \
0x10, struct drm_mode_atomic)
+#define DRM_IOCTL_MESON_SET_VIDEO_ZPOS DRM_IOWR(DRM_COMMAND_BASE + \
+ 0x11, struct drm_meson_video_zpos_target)
+
#endif /* _MESON_DRM_H */