Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40787
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-05 10:27
文章分类
文章存档

2011年(1)

2009年(1)

2008年(16)

我的朋友

分类:

2008-11-05 17:19:21

UI修改之Brightness Menu

 

目的:细化brightness的调节,由原来的8级调节,换成0~30bar条调节,并增加了Contrast, Temperaturebar条调节。

 

实现原理:

  1. Brightness的调节是通过BrightnessPWM的占空比来实现的,在程序中通过设置Timer2的参数来调节PWM,从而达到控制Backlight的效果。
  2. Contrast, Temperature是通过调节ISPImage Signal Processing)的Color EnhancementColor Correction)功能来实现的,API接口是:

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.csmtkBrowseMgrDraw函数,用jpeg来作背景,如此便可以看到调节的效果。

 

  1. UI的设定:在Brightness下,焦点focus在某一Menu Ttem (比如Brightness)时,按Enter显示bar条,然后可以过上下左右进行调节。

 

步骤:

一.Brightness UI

1.       smtkScreenMgrInitialize [screen.c]里面设置brightnessTable, 占空比27%~99%分成31级,在调节过程中用brightneeTable的值来设置Timer2TIMER2_MATCH1

2.       增加smtkScreenMgrIncreaseBrightness, smtkScreenMgrDecreaseBrightness函数,调节时调用。

 

二.Contrast, Temperature UI

1.       Contrast范围-60~60, Temperature: 4000~10000,分310~30;

2.       相關函數smtkScreenMgrIncreaseContrast, smtkScreenMgrDecreaseContrast.

smtkScreenMgrIncreaseTemperature, smtkScreenMgrDecreaseTemperature,

三.流程图:

 

一些说明

1.       Menu Item的定位:smtkMenuMgrg的结构体如下:

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;

 

其中,gsmtkMenuMgrItem, 一个menusmtkMenuMgr来管理,由ITEMs组成,ITEM是通过单链表串起来的。所以,ITEM的位置可以通过ITEM ID(如SMTK_BRIGHTNESS)来取得。

2.       在程序中Proc的时候,会检查jpeg decode的状态,如果是docoding状态,不会响应Key消息,所以在Proc中检测到docoding状态的时候,执行Palsleep操作,以方便分配更多的TickJPEG decode用。[但对大图片而言,decoce的速度还是比较慢]

阅读(643) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~