本文主要针对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");