ARM2倒车时,倒车画面的色度、亮度和饱和度调整

本文主要针对ATC平台的ARM2倒车时,将ARM1倒车时设置调整的色度、亮度、饱和度参数同步到ARM2倒车时的设置,否则直接导致ARM1倒车和ARM2倒车时显示画面的色彩效果有偏差。本文主要实现方式:

通过MTK平台PQ接口调整LCD的PQ显示参数方式来达到调整ARM2倒车画面显示效果的目的,否则直接调整ARM2倒车TVD参数,效果不理想。那么ARM1和ARM2共享的PQ参数存储在META分区中。上层APP通过读写META分区中固定地址段来实现读写,在ARM2倒车阶段同样读取固定地址段来读取并设置LCD的PQ参数来达到ARM1和ARM2倒车参数一致的目的。

具体移植步骤如下:

1、定义该功能的开关

vendor\autochips\proprietary\arm2\backcar\Makefile

LOCAL_CFLAG += -DENABLE_BACKCAR_UI=1

LOCAL_CFLAG += -DENABLE_PQ_SYNC=1

2、实现ARM2读写META分区中针对色度、亮度、饱和度存在地址的读写接口,以及在设置PQ之后,ARM2退出倒车时将原来PQ参数设置回去的接口,否则正常系统启动会导致LCD显示效果异常。

diff --git a/display/src/ddp_color.c b/display/src/ddp_color.c
index a3d7419..355889b 100755
--- a/display/src/ddp_color.c
+++ b/display/src/ddp_color.c
@@ -25,6 +25,14 @@ u4HueAdj:{9, 9, 12, 12},
 u4SatAdj:{0, 2, 6, 6}
 };

//添加参数调整结构体 
+static DISP_PQ_PARAM origin_Color_Param = {
+u4SHPGain:2,
+u4SatGain:0,
+u4Contrast:3,
+u4Brightness:7,
+u4HueAdj:{9, 9, 12, 12},
+u4SatAdj:{0, 2, 6, 6}
+};
 
 /* same with ddp_color_index.h */
 static DISPLAY_PQ_T g_Color_Index = {
@@ -1041,6 +1049,78 @@ void DpEngine_COLORonConfig(unsigned int srcWidth, unsigned int srcHeight)
        //DISP_REG_SET((DISPSYS_COLOR_BASE + 0x740), g_Color_Window);
 }

//读取ARM1设置参数的索引 
+/* Support PQ param sync arm1 interface */
+//add by oumeiyin@flyaudio.cn{
+typedef enum {
+    //INDEX_SHPGAIN = 0,  //AC8227L can not adjust Sharpness
+    INDEX_SATGAIN = 0,
+    INDEX_CONTRAST,
+    INDEX_BRIGHTNESS,
+    INDEX_HUE_PURP,
+    INDEX_HUE_SKIN,
+    INDEX_HUE_GRASS,
+    INDEX_HUE_SKY,
+    INDEX_SAT_PURP,
+    INDEX_SAT_SKIN,
+    INDEX_SAT_GRASS,
+    INDEX_SAT_SKY,
+    INDEX_MAX
+}PQ_INDEX_OFFSET;

+//索引和参数
+typedef struct
+{
+       PQ_INDEX_OFFSET index_offset;
+       unsigned long *p_pq_param;
+}TypeDispInfo;

//索引对应参数的结构体数组
+TypeDispInfo DisplayInfoFromArm1[] =
+{
+    //{INDEX_SHPGAIN,&g_Color_Param.u4SHPGain},  //AC8227L can not adjust Sharpness
+    {INDEX_SATGAIN,&g_Color_Param.u4SatGain},
+    {INDEX_CONTRAST,&g_Color_Param.u4Contrast},
+    {INDEX_BRIGHTNESS,&g_Color_Param.u4Brightness},
+
+    {INDEX_HUE_PURP,&g_Color_Param.u4HueAdj[PURP_TONE]},
+    {INDEX_HUE_SKIN,&g_Color_Param.u4HueAdj[SKIN_TONE]},
+    {INDEX_HUE_GRASS,&g_Color_Param.u4HueAdj[GRASS_TONE]},
+    {INDEX_HUE_SKY,&g_Color_Param.u4HueAdj[SKY_TONE]},
+
+    {INDEX_SAT_PURP,&g_Color_Param.u4SatAdj[PURP_TONE]},
+    {INDEX_SAT_SKIN,&g_Color_Param.u4SatAdj[SKIN_TONE]},
+    {INDEX_SAT_GRASS,&g_Color_Param.u4SatAdj[GRASS_TONE]},
+    {INDEX_SAT_SKY,&g_Color_Param.u4SatAdj[SKY_TONE]},
+};
+
//对应参数在META分区中的偏移量
+#define MATEZONE_PQ_BASE_INDEX 0x10000+160

//读取ARM1设置的参数并设置LCD PQ
+void DisplayLightenSyncArm1(void)
+{
+    int pq_index = -1;
+    DISP_MSG("[ARM2] DisplayLightenSyncArm1 get pq param from metazone\n");
+    for(int i = 0; i < INDEX_MAX; i++)
+       {
+        unsigned long pq_param;
+        pq_index = MATEZONE_PQ_BASE_INDEX + DisplayInfoFromArm1[i].index_offset;
+        _MetaZone_Read(pq_index,&pq_param);
+        DISP_MSG("[ARM2] GetDisplayInfoFromMetazone:i = %d,index = %d,pq_param = %d\n",i,pq_index,pq_param);
+        if(pq_param < 0 || pq_param >= COLOR_TUNING_INDEX)
+        {
+            DISP_MSG("[ARM2] GetDisplayInfoFromMetazone :get pq param fail\n");
+        }else{
+            *DisplayInfoFromArm1[i].p_pq_param = pq_param;
+        }
+    }
    //将读取的参数设置到LCD的PQ中
+    setColorParam(&g_Color_Param);
+
+}
//退出倒车时候将设置ARM1参数之前的LCD PQ参数重新设置回LCD中,否则系统启动时候LCD显示会异常
+void DisplayLightenRelease()
+{
+    DISP_MSG("[ARM2] DisplayLightenRelease release pq param\n");
+    setColorParam(&origin_Color_Param);
+}
+//}add by oumeiyin@flyaudio.cn
+
 /* get current pq color param*/
 DISP_PQ_PARAM *getColorParam(void)
 {

3、在ARM2进入倒车时候将调用同步ARM1倒车时候设置的参数,在ARM2倒车退出时回写同步ARM1倒车之前的系统LCD PQ参数,具体如下:

diff --git a/backcar/custom_protocol.c b/backcar/custom_protocol.c
index fa73746..eaaba94 100755
--- a/backcar/custom_protocol.c
+++ b/backcar/custom_protocol.c
@@ -148,7 +148,10 @@ int BCCustomEntry()
         BC_INFO("before DisplayLighten, at TickCount (%d)",GetARM2TickCount());
         mt65xx_backlight_on();
         BC_INFO("display light have enabled, at TickCount (%d)",GetARM2TickCount());

//即可在进入倒车打开系统背光之后调用同步ARM1倒车的参数
+#ifdef ENABLE_PQ_SYNC
+        BC_INFO("display lighten sync ARM1");
+        DisplayLightenSyncArm1();
+#endif
         //step 3: wait for backcar off event from GPIO
         while (1) {
                        //Pull down CVBS select gpio(SW1 and SW2),select Channel 1 input video.
@@ -193,10 +196,14 @@ int BCCustomEntry()
         }
 
         // step 4: close backcar
+        //modify by oumeiyin@flyaudio.cn{
 //在退出倒车的时候回写系统启动时候默认的LCD PQ参数
+#ifdef ENABLE_PQ_SYNC
+        DisplayLightenRelease();
+#endif
+        //}
         if (!BCReleaseResource()) {
             BC_ERROR("BCReleaseResource Failed");
         }
-
     #ifdef ENABLE_BACKCAR_UI
         if (!CustomUI_Hide()) {
             BC_ERROR("CustomUI_DeInit Failed");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值