📄 camwin_style2.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : CamWin.c
Desc : camera 模块 OSD 和 操作控制
Author : dengxj
Date : 2008/03/27
Notes :
$Log :
版本信息见CamConfig.h
*********************************************************************/
#include "../Gui/AlphaDispThread.h"
#include "IdleDetec.h"
#include "audio_globals.h"
#if (ROCK_CAMERA && (CAM_OSD_STYLE== CAM_OSD_STYLE2))
void Cam_WinOSDSettingEnforce(void);
void Cam_WinOsdStateSwitch(CAMERA_STATE state);
void Cam_WinOSDMenuCreate(void);
void Cam_WinOSDItemSelect(CAM_MENU * menu);
void Cam_WinRootMenuUpdate( CAM_MENU * menu, BOOLEAN bFullUpdate );
void Cam_WinSubMenuUpdate( CAM_MENU * menu, BOOLEAN bFullUpdate );
void Cam_WinRootItemSelect(void);
void Cam_WinDrawTime(INT16U x, INT16U y, INT32U sTime );
void Cam_WinDoKeyReturn( WINDOW* win );
int Cam_WinSettingFilePathHook( INT8U pixel );
int Cam_WinSettingPixelHook( INT8U pixel );
int Cam_WinSettingZoomHook( INT8U level );
int Cam_WinSettingBlightHook( INT8U level );
int Cam_WinSettingContrastHook( INT8U level );
int Cam_WinSettingSaturationHook( INT8U level );
int Cam_WinSettingModeHook( INT8U level );
int Cam_WinSettingEffectHook( INT8U level );
int Cam_WinSettingQualityHook( INT8U level );
void Cam_WinConfigLoad(void);
void Cam_WinOSDPaint(BOOLEAN ScnUpdate );
/*******************************************************************/
#define CAMMEM_FREE(a) if(a){FREE(a); a=NULL;}
WINDOW_PROCREG CameraWinProcMap[];
CAMERA_STATE gCameraOsdCurState; /*用来OSD操作控制*/
CAMERA_STATE gCameraOsdPreState; /*用来OSD操作上一次状态(主要是用来刷屏优化*/
CAM_MENU gCamMenuRoot; /*一级菜单*/
CAM_MENU gCamMenuSub[eCamMax]; /*二级菜单*/
/*菜单项显示文本串资源*/
#define SID_CNT 36
ColorDesc gCamStrColorSel = {COLOR_BLACK,COLOR_WHITE,DSPM_Transp};
/* 进度条资源 */
CAM_PROCESS gCamProcess;
CAMRES CamResProcess[CAM_PROCESS_STEP];
CAMERA_CONFIG* pgCameraConfig;
char DialogTick = DIALOG_NOEXIST_FLAG; /* 对话框显示计数器 */
HTIMER DialogTimerHandle;
extern CAMERA gCamera;
extern CAM_DV gCamDv;
extern char gCameraFilePath[20];
extern uint32 SDCardInsert;
/*----------------------------------------------------------
*Name : Cam_Reset
*Desc : camera 模块复位
*Params:
*return:
-----------------------------------------------------------*/
void Cam_Reset( void)
{
gCamera.sensorIf.Sensor_Reset();
return;
}
/*----------------------------------------------------------
*Name : Cam_PowerOn
*Desc : camera 模块上电
*Params:
*return:
-----------------------------------------------------------*/
void Cam_PowerOn( void)
{
gCamera.sensorIf.Sensor_PowerOn();
return;
}
/*----------------------------------------------------------
*Name : Cam_PowerOnInit
*Desc : camera 模块上电硬件初始化
*Params:
*return:
-----------------------------------------------------------*/
void Cam_PowerOnInit(void)
{
VipInit( );
Cam_PowerOn();
Cam_Reset();
return;
}
/*----------------------------------------------------------
*Name : Cam_FilePathSetup
*Desc : 存储器设置
*Params:
*return:
-----------------------------------------------------------*/
int Cam_FilePathSetup(CAM_STORAGE_TYPE storage)
{
if ( eCamFlash == storage )
{
gCameraFilePath[0] = 'D'; //flash
gCamera.CamFreeSize = FS_GetFreeMem("D:\\");
}
else
{
gCameraFilePath[0] = 'E'; //card
gCamera.CamFreeSize = FS_GetFreeMem("E:\\");
}
gCamera.CamFreeSize = (gCamera.CamFreeSize<<10); //byte
/* 获取当前文件序号 */
gCamera.CameraFileIdx[eFileDc] = Cam_GetFileIdx(gCameraFilePath, 0, eFileDc );
gCamera.CameraFileIdx[eFileDv] = Cam_GetFileIdx(gCameraFilePath, 0, eFileDv );
gCamera.CamUsedSize = 0;
return 0;
}
/*----------------------------------------------------------
*Name : Cam_MainWin
*Desc : camera 模块入口函数
*Params:
*return: 是否成功
-----------------------------------------------------------*/
int Cam_MainWin(void* Parent, char* InputParam, void* data)
{
WINDOW * win;
SensorGetDriver( &gCamera.sensorIf ); /*获取当前选定的sensor接口驱动初始化*/
Cam_PowerOnInit( );
PMU_EnterModule(PMU_CAMHIGH);
if (Cam_WinOSDInit( ))
goto CAMINITERR;
if (Cam_Init(eSensor))
goto CAMINITERR;
win = WindowCreate( Parent,
WS_FULLSCREEN|WS_TICK,
WID_CameraWin,
0,0,LCD_W,LCD_H,
NULL,NULL,
0,
NULL,
CameraWinProcMap,
NULL );
if (win==NULL)
goto CAMINITERR;
gCameraOsdCurState = eOSD_NULL;
Cam_WinOsdStateSwitch(eOSD_Dc); /* OSD状态进入DC */
RockCreateThread(ProcGetProcGuid(GUID_EXE_CAMERA), Cam_DvWriteFileTaskMsg,TPRI_MHIGH);
RockCreateThread(ProcGetProcGuid(GUID_EXE_CAMERA), Cam_DvEncodeTaskMsg,TPRI_HIGH);
Cam_WinOSDSettingEnforce(); /* 初始化设置 */
Cam_PreviewStart(eSensor); /* 默认处于preview状态*/
Cam_WinOSDPaint(TRUE); /* 刷屏 */
return ;
CAMINITERR:
Cam_WinOSDDeInit();
Cam_Deinit();
}
/*----------------------------------------------------------
*Name : Cam_WinOSDInit
*Desc : OSD 菜单的生成,及图片等资源的生成
*Params:
*return: 是否成功
-----------------------------------------------------------*/
int Cam_WinOSDInit(void)
{
if (NULL == AlphaInit(NULL,CameraAPP))
{
AlphaBufFree();
return 1;
}
/* 创建菜单 */
Cam_WinConfigLoad();
Cam_WinOSDMenuCreate( );
return 0;
}
/*----------------------------------------------------------
*Name : Cam_WinOSDDeInit
*Desc : OSD 菜单的反初始化,生成的资源buf在这里一定要释放
*Params:
*return: 是否成功
-----------------------------------------------------------*/
int Cam_WinOSDDeInit(void)
{
Screen_ChangeAlpha(NULL);
AlphaBufFree();
PMU_ExitModule(PMU_CAMHIGH);
}
/*----------------------------------------------------------
*Name : Cam_WinConfigLoad
*Desc : OSD 菜单设置参数从注册表中导出
*Params:
*return: 是否成功
-----------------------------------------------------------*/
void Cam_WinConfigLoad(void)
{
#if (REGISTER_METHOD == eRegisterOld)
char Key[] = "APPLICATION\\CAMERA\\INFORMATION";
pgCameraConfig = (CAMERA_CONFIG*)RegisterGetKeyValue( Key );
if (NULL == pgCameraConfig)
{
RegisterAddKey( Key , sizeof (CAMERA_CONFIG) );
pgCameraConfig = (CAMERA_CONFIG *)RegisterGetKeyValueEx(Key, NULL );
pgCameraConfig->DcImagePixel= 0;
pgCameraConfig->backlight= 0;
pgCameraConfig->zoom= 0;
pgCameraConfig->mode = 0;
pgCameraConfig->staturation= 0;
pgCameraConfig->bw= 0;
pgCameraConfig->ScenMode= 0;
pgCameraConfig->Storage= 0;
}
#elif (REGISTER_METHOD == eRegisterNew)
pgCameraConfig = &(gCameraConfig);
#endif
}
/*----------------------------------------------------------
*Name : Cam_WinOSDSettingEnforce
*Desc : 对config值 进行全部设置
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinOSDSettingEnforce(void)
{
CAM_MENU * menu = gCamMenuSub;
INT8U i;
#if CAM_SENSOR
for (i=0; i<eCamMax; i++)
{
if ( menu->itemSelectHook )
{
menu->itemSelectHook(menu->curItem);
}
menu++;
}
gCamera.sensorIf.Sensor_Set_Contrast(4); /* style2风格下没有对比度的菜单,这边进行默认设置 */
#endif
}
/*----------------------------------------------------------
*Name : Cam_WinOsdStateClear
*Desc : 实现OSD状态之间转换的清屏操作
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinOsdStateClear(void)
{
UHRECT rect;
switch ( gCameraOsdCurState )
{
case eOSD_Dc:
case eOSD_Dv:
case eOSD_Setting:
{
if ( gCameraOsdPreState == eOSD_Setting )
{
rect.x = CAM_OSD_ROOTMENU_X;
rect.y = CAM_OSD_ROOTMENU_Y;
rect.w = CAM_OSD_ROOTMENU_W;
rect.h = CAM_OSD_ROOTMENU_H;
}
else
{
rect.x = CAM_OSD_STATEBAR_X;
rect.y = CAM_OSD_STATEBAR_Y;
rect.w = CAM_OSD_STATEBAR_W;
rect.h = CAM_OSD_STATEBAR_H;
}
break;
}
default:
return ;
}
AlphaClearGui(&rect, 0);
}
/*----------------------------------------------------------
*Name : Cam_WinOsdStateSwitch
*Desc : 实现OSD状态之间转换的刷屏
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinOsdStateSwitch(CAMERA_STATE state)
{
if ( gCameraOsdCurState == state )
{
return ;
}
gCameraOsdPreState = gCameraOsdCurState;
gCameraOsdCurState = state;
Cam_WinOsdStateClear( ); /*清 OSD屏*/
switch ( state )
{
case eOSD_Dc:
{
AlphaDraw16bitBmpId(CAM_OSD_STATEICON_X, CAM_OSD_STATEICON_Y, BID_Cam_Dc, NULL, DSPM_Transp); /*显示DC小图标*/
AlphaDrawStringIdEx(CAM_DC_PIXELSTR_X, CAM_DC_PIXELSTR_Y,120,SID_Cam_Pixel_320240+pgCameraConfig->DcImagePixel,
Font16X16, &gCamStrColorSel, 0); /*显示分辨率*/
}
break;
case eOSD_Dv:
{
AlphaDraw16bitBmpId(CAM_OSD_STATEICON_X, CAM_OSD_STATEICON_Y, BID_Cam_Dv, NULL, DSPM_Transp); /*显示DV小图标*/
AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Stop, NULL, DSPM_Transp); /*初始状态为stop*/
Cam_WinDrawTime(CAM_OSD_STATEBAR_DVTIME_X, CAM_OSD_STATEBAR_DVTIME_Y, 0 ); /* 初始显示时间0*/
}
break;
case eOSD_Setting:
{
Cam_WinRootMenuUpdate( &gCamMenuRoot, TRUE );
Cam_WinRootItemSelect( ); /*刷新设置菜单项*/
}
break;
default:
break;
}
}
/*----------------------------------------------------------
*Name : Cam_WinDialogDestroy
*Desc : 销毁提示型对话框
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDialogDestroy(void * arg)
{
UHRECT rect;
/* dialog 销毁 */
if ( DialogTick != DIALOG_NOEXIST_FLAG )
{
DialogTick = DIALOG_NOEXIST_FLAG;
if (gCamera.State == Cam_Previewing) /* 防止将"等待..."信息刷新 */
{
rect.x = CAM_DIALOG_X;
rect.y = CAM_DIALOG_Y;
rect.w = CAM_DIALOG_W;
rect.h = CAM_DIALOG_H;
AlphaClearGui(&rect, 0);
Cam_WinOSDPaint(TRUE);
}
RockStopTimer(DialogTimerHandle);
}
}
/*----------------------------------------------------------
*Name : Cam_WinDialog
*Desc : 生成提示型对话框
*Params: dialogtype:对话框类型; tick:存在的时间长度,单位S
*return:
-----------------------------------------------------------*/
void Cam_WinDialog( CAM_DIALOG dialogtype, UINT8 tick )
{
INT16U dialog_pic[4] = {BID_Cam_Save_Success,BID_Cam_NotSpace,BID_Cam_Save_Failure,BID_Cam_Encode_Error};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -