分类:
2008-11-05 17:19:21
UI修改之Brightness Menu
目的:细化brightness的调节,由原来的8级调节,换成0~30的bar条调节,并增加了Contrast, Temperature的bar条调节。
实现原理:
mmpIspSetColorControl(
MMP_ISP_COLOR_CONTROL colorControl,
MMP_INT value)
并在执行下面的API时,进行ISP的设置:
ISP_SetColorCorrMatrixDPF(
void* matrix,
MMP_INT16 angle,
MMP_INT16 saturation,
MMP_INT16 contrast,
MMP_INT16 midPt,
MMP_INT16 color_op,
MMP_FLOAT rgb_gain_tbl[3], //RGB gain table for the RGB gain adjustment read from the Tuning Tool
MMP_INT16 brightness,
MMP_INT16 colorTemp,
MMP_ISP_CT_TableType* CT_Table)
通过此函数来设置Contrast, Temperature之后,要经过update ISP的操作才能看到Contrast, Temperature改动后的效果,所以,如果当前显示的是图片,要对JPEG档重新进行decode。 在程序中,我们设定进入Brightness Menu时,调用browse.c的smtkBrowseMgrDraw函数,用jpeg来作背景,如此便可以看到调节的效果。
步骤:
一.Brightness UI
1. 在smtkScreenMgrInitialize [screen.c]里面设置brightnessTable, 占空比27%~99%分成31级,在调节过程中用brightneeTable的值来设置Timer2的TIMER2_MATCH1。
2. 增加smtkScreenMgrIncreaseBrightness, smtkScreenMgrDecreaseBrightness函数,调节时调用。
二.Contrast, Temperature UI
1. Contrast范围-60~60, Temperature: 4000~10000,分31(0~30);
2. 相關函數smtkScreenMgrIncreaseContrast, smtkScreenMgrDecreaseContrast.
smtkScreenMgrIncreaseTemperature, smtkScreenMgrDecreaseTemperature,
三.流程图:
一些说明
1. Menu Item的定位:smtkMenuMgr与g的结构体如下:
typedef struct SMTK_MENU_MGR_TAG { MMP_UINT flag; SMTK_GRAPHIC* g; MMP_INT menuCount; MMP_INT currentIndex; MMP_INT displayIndex; MMP_INT actionCount; MMP_INT menuPosition; MMP_INT focusIndex; MMP_BOOL updated; MMP_SURFACE menuSurf; } SMTK_MENU_MGR; |
/* Graphic structure definition */ typedef struct SMTK_GRAPHIC_TAG { MMP_UINT id; truct SMTK_GRAPHIC_TAG* next; struct SMTK_GRAPHIC_TAG* child; MMP_BOOL visible; SMTK_GUI_TYPE type; } SMTK_GRAPHIC; |
其中,g是smtkMenuMgr的Item, 一个menu由smtkMenuMgr来管理,由ITEMs组成,ITEM是通过单链表串起来的。所以,ITEM的位置可以通过ITEM ID(如SMTK_BRIGHTNESS)来取得。
2. 在程序中Proc的时候,会检查jpeg decode的状态,如果是docoding状态,不会响应Key消息,所以在Proc中检测到docoding状态的时候,执行Palsleep操作,以方便分配更多的Tick给JPEG decode用。[但对大图片而言,decoce的速度还是比较慢]