⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camwin_style2.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:

/******************************************************************/
/*   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 + -