libdrm_meson: provide a display interface to set the BkgrdColor [1/1]
PD#OTT-57773
Problem:
provide a display interface to set the BkgrdColor
Solution:
provide a display interface to set the BkgrdColor
Verify:
BG201
Change-Id: I20986fb6d70fab72cb25314c45bcc64c55e90478
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/meson/libdrm_meson_connector.h b/meson/libdrm_meson_connector.h
index f502434..cecd8fd 100644
--- a/meson/libdrm_meson_connector.h
+++ b/meson/libdrm_meson_connector.h
@@ -39,6 +39,7 @@
#define DRM_CONNECTOR_PROP_TX_HDR_OFF "force_output"
#define DRM_CONNECTOR_DV_MODE "dv_mode"
#define DRM_CONNECTOR_PROP_DPMS "DPMS"
+#define DRM_CONNECTOR_PROP_BACKGROUND_COLOR "BACKGROUND_COLOR"
struct mesonPrimaryPlane;
struct mesonConnector;
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index 821366f..0e38b98 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -1360,6 +1360,30 @@
return value;
}
+int meson_drm_setBackGroundColor(int drmFd, drmModeAtomicReq *req, uint64_t backgroundColor,
+ MESON_CONNECTOR_TYPE connType) {
+ int ret = -1;
+ int rc = -1;
+ struct mesonConnector* conn = NULL;
+ uint32_t crtcId = 0;
+ DEBUG("%s %d set background current color %llx",__FUNCTION__,__LINE__,backgroundColor);
+ if ( drmFd < 0 || req == NULL) {
+ ERROR(" %s %d invalid parameter return",__FUNCTION__,__LINE__);
+ return ret;
+ }
+ conn = get_current_connector(drmFd, connType);
+ if (conn) {
+ DEBUG("%s %d get current connector success",__FUNCTION__,__LINE__);
+ crtcId = mesonConnectorGetCRTCId(conn);
+ rc = meson_drm_set_property(drmFd, req, crtcId, DRM_MODE_OBJECT_CRTC,
+ DRM_CONNECTOR_PROP_BACKGROUND_COLOR, backgroundColor);
+ mesonConnectorDestroy(drmFd,conn);
+ }
+ if (rc >= 0)
+ ret = 0;
+ return ret;
+}
+
int meson_drm_getGraphicPlaneSize(int drmFd, uint32_t* width, uint32_t* height) {
int ret = -1;
struct mesonPrimaryPlane* planesize = NULL;
diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index 55e038b..7d691e7 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -212,6 +212,8 @@
int meson_drm_setDvMode(int drmFd, drmModeAtomicReq *req, int dvMode, MESON_CONNECTOR_TYPE connType);
int meson_drm_getDvMode( int drmFd, MESON_CONNECTOR_TYPE connType );
int meson_drm_getGraphicPlaneSize(int drmFd, uint32_t* width, uint32_t* height);
+int meson_drm_setBackGroundColor(int drmFd, drmModeAtomicReq *req,uint64_t backgroundColor,
+ MESON_CONNECTOR_TYPE connType);
int meson_drm_getPhysicalSize(int drmFd, uint32_t* width, uint32_t* height, MESON_CONNECTOR_TYPE connType);
int meson_drm_getSignalTimingInfo(int drmFd, uint16_t* htotal, uint16_t* vtotal, uint16_t* hstart,
uint16_t* vstart, MESON_CONNECTOR_TYPE connType);
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index ebdf389..408518a 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -250,7 +250,7 @@
} 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 7.video zorder 8.plane mute 9.aspect ratio"
- " 10.frac rate policy 11.hdr force mode 12.dv mode\n");
+ " 10.frac rate policy 11.hdr force mode 12.dv mode 13.background color\n");
int set = 0;
int ret = -1;
drmModeAtomicReq * req;
@@ -402,6 +402,20 @@
} else {
printf("\n scanf fail\n");
}
+ } else if (set == 13 && len == 1) {
+ printf("\n please input backgroundColor:\n");
+ uint64_t backgroundColor = 0;
+ len = scanf("%llx", &backgroundColor);
+ printf("\n backgroundColor %llu\n",backgroundColor);
+ if (len == 1) {
+ if (meson_drm_setBackGroundColor( drmFd, req, backgroundColor, MESON_CONNECTOR_HDMIA)) {
+ printf("\n meson_drm_setBackGroundColor fail\n");
+ } else {
+ printf("\n meson_drm_setBackGroundColor SUCCESS\n");
+ }
+ } else {
+ printf("\n scanf fail\n");
+ }
}
ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
if (ret) {