📄 mmicamera.c
字号:
{
T_DISPLAY_DATA display_info;
dspl_Clear(0, 22, 128, 142);
/* 显示已满对话框 */
M2C_Set_Camera_State(M2C_STOP_PREVIEW);
dialog_info_init(&display_info);
display_info.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT;
display_info.LeftSoftKey = '\0';
display_info.RightSoftKey = TxtCancel;
display_info.TextId = TxtFull;
display_info.Time = THREE_SECS;
display_info.Callback = NULL;
//info_dialog(win, &display_info);
bookShowInformation( win, TxtCapacityFull, NULL,(T_VOID_FUNC)0);//容量以满
data->winstate = CAM_MAIN_PREVIEW;
break;
}
/* 切换到保存状态 */
data->winstate = CAM_MAIN_SAVE;
winShow(win);
}
else if(data->winstate == CAM_MAIN_SAVE) // 保存状态
{
/* 允许刷新 */
M2C_Control_Refresh(R2D_REFRESH_ENABLE);
Exit_Camera_Mode();
/* 启动编辑窗口命名 */
Set_New_Editor(win);
data->edit_data.Callback = (T_EDIT_CB)New_EditorCB;
if( data->edit_data.mode == TEXTINPUT_MODE )
data->edit_win = text_input(win, &(data->edit_data));
else
data->edit_win = editor_start(win, &(data->edit_data));
break;
}
break;
case KCD_RIGHT:
if(data->winstate == CAM_MAIN_PREVIEW || data->winstate == CAM_MAIN_PARA) //预览状态
{
// 进入选项菜单
M2C_Set_Camera_State(M2C_STOP_PREVIEW);
// 启动选项菜单
data->menu_win = bookMenuStart(data->win, (MfwMnuAttr *)menuCamMainOptionsAttributes(), 0);//begin option menu
}
else if(data->winstate == CAM_MAIN_SAVE) //保存状态
{
/* 允许刷新 */
M2C_Control_Refresh(R2D_REFRESH_ENABLE);
Exit_Camera_Mode();
// 取消存储
data->winstate = CAM_MAIN_PREVIEW;
winShow(win);
}
break;
default:
break;
}
return MFW_EVENT_CONSUMED;
}
/*
* 描述: 捕获主窗口销毁
*/
static int Cam_Main_Destroy (T_MFW_HND win)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_DATA *data = (T_CAM_DATA *)win_data->user;
kbd_delete(data->kbd); // Delete keyboard handlers
win_delete(win); // Delete window
FREE_MEMORY((UBYTE *)data, sizeof(T_CAM_DATA)); // Destroy data structure
M2C_Set_Camera_State(M2C_SWITCH_OFF);
cam_main_win = NULL;
return 1;
}
static int Display_Preview_Option(int key, T_CAM_DATA* data)
{
if((data->winstate != CAM_MAIN_PARA) && (data->winstate != CAM_MAIN_PREVIEW))
return MFW_EVENT_REJECTED;
if(data->winstate == CAM_MAIN_PREVIEW)
{
if(key == KCD_OK)
{
data->winstate = CAM_MAIN_PARA;
data->preview_option = FORCUS_BRIGHT;
//2004-7-26 yangx Modify
DRAW_ICON_SEL(ICON_OPTION_BAR, 0);
DRAW_ICON_SEL_MASK(ICON_OPTION_NUM, (*para_prc[FORCUS_BRIGHT].value+3));
//end yangx
Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
return MFW_EVENT_CONSUMED;
}
else
return MFW_EVENT_REJECTED;
}
switch(key)
{
case KCD_MNULEFT:
data->preview_option = ((data->preview_option-1) + FORCUS_MAX) % FORCUS_MAX;
//2004-7-26 yangx Modify
DRAW_ICON_SEL(ICON_OPTION_BAR, data->preview_option);
DRAW_ICON_SEL_MASK(ICON_OPTION_NUM, (*para_prc[data->preview_option].value+3));
//end yangx
Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
break;
case KCD_MNURIGHT:
data->preview_option = (data->preview_option+1) % FORCUS_MAX;
//2004-7-26 yangx Modify
DRAW_ICON_SEL(ICON_OPTION_BAR, data->preview_option);
DRAW_ICON_SEL_MASK(ICON_OPTION_NUM, (*para_prc[data->preview_option].value+3));
//end yangx
Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
break;
case KCD_MNUUP:
para_prc[data->preview_option].f(UP);
//2004-7-26 yangx Modify
DRAW_ICON_SEL(ICON_OPTION_BAR, data->preview_option);
DRAW_ICON_SEL_MASK(ICON_OPTION_NUM, (*para_prc[data->preview_option].value+3));
//end yangx
Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
break;
case KCD_MNUDOWN:
para_prc[data->preview_option].f(DOWN);
//2004-7-26 yangx Modify
DRAW_ICON_SEL(ICON_OPTION_BAR, data->preview_option);
DRAW_ICON_SEL_MASK(ICON_OPTION_NUM, (*para_prc[data->preview_option].value+3));
//end yangx
Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
break;
case KCD_OK:
data->winstate = CAM_MAIN_PREVIEW;
Display_Preview_Bar();
break;
default:
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
/*
* 描述: 新建保存姓名编辑框
*/
static void Set_New_Editor(T_MFW_HND win)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_DATA *data = (T_CAM_DATA *)win_data->user;
memset((char*)data->name, 0, MAX_CAM_NAME);
editor_attr_init_fullscr(&((data->edit_data).editor_attr), 1,TxtName, (char*)data->name, MAX_CAM_NAME, edtCurBar1);
data->edit_data.hide = FALSE;
data->edit_data.min_enter = 1; // Avoid returning empty strings
data->edit_data.Identifier = 0xFFFF ;
data->edit_data.TextString = NULL;
data->edit_data.timeout = FOREVER; // Avoid returning empty strings
data->edit_data.destroyEditor = TRUE;
data->edit_data.TextId = '\0';
data->edit_data.LeftSoftKey = TxtSoftConfirm;//comfirm
data->edit_data.AlternateLeftSoftKey = TxtNull;
data->edit_data.RightSoftKey = TxtDelete;
data->edit_data.mode = TEXTINPUT_MODE;
data->edit_data.InputMode = PINYIN_INPUT_MODE;
}
/*
* 描述: 保存姓名编辑框回调函数
*/
extern unsigned char *Camera_GetPic(void);
static void New_EditorCB( T_MFW_HND win,USHORT Identifier,UBYTE reason)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_DATA *data = (T_CAM_DATA *)win_data->user;
char test[100];
int size;
unsigned char* p=NULL;
int i;
switch( reason )
{
case INFO_KCD_LEFT:
/* 保存图片 */
size = M2C_Get_Captured_Size();
#if 0
if(M2C_Get_Captured_Pic( &p/*, size*/) )
{
// FREE_MEMORY((void *)p, size);
break;
}
#endif
p = Camera_GetPic();
TRACE(("size=%d", size));
//Modified by Cathy
Add_One_Record((char *)data->name, (unsigned char *)p, size /*, CamExt.m_nCurSize*/);
// FREE_MEMORY((void *)p, size);
// 开启预览
data->winstate = CAM_MAIN_PREVIEW;
data->edit_win=0; // edit窗口会自动销毁
break;
case INFO_KCD_RIGHT:
case INFO_KCD_HUP:
// 开启预览
data->winstate = CAM_MAIN_PREVIEW;
data->edit_win=0; // edit窗口会自动销毁
break;
}
}
/*
* 描述: 以通常的方式 显示预览窗口的title和bar
*/
//2004-7-26 yangx Modify
static void Display_Preview_Bar(void)
{
UINT32 oldColor,oldFontColor;
// 根据预设参数显示相应的图片
DRAW_ICON(ICON_PREVIEW_BAR);
// 图片大小图标
DRAW_ICON_SEL_MASK(ICON_SIZE,CamExt.m_nCurSize);
// 图片质量图标
if(CamExt.m_nJPEGQFactor == IQ_HIGH){
DRAW_ICON_SEL_MASK(ICON_QUALITY, 0);
}
if(CamExt.m_nJPEGQFactor == IQ_MIDIUM){
DRAW_ICON_SEL_MASK(ICON_QUALITY, 1);
}
if(CamExt.m_nJPEGQFactor == IQ_LOW){
DRAW_ICON_SEL_MASK(ICON_QUALITY, 2);
}
// 图片亮度
DRAW_ICON_SEL_MASK(ICON_BRIGHT, (CamExt.bright+3));
// 图片模式
DRAW_ICON_SEL_MASK(ICON_MODE, 0);
Overlay_Windows_Update(0, 0, 128, 16/*, (CAMU8 *)0*/); //Marked by Cathy
}
/*
* 描述: 拍照时放音
*/
static void Play_Camera_Melody(void)
{
if(cam_option.melody < 0)
return;
SetMVol_DownLinkPGA(3);
StartPlayingMelody2(FIRST_CAM_MELODY+cam_option.melody, 1);
TRACE(("melody play"));
}
/***********************************************************************************
*
* 模块: 预览选项模块
*
* 描述: 负责预览 捕获选项的显示及设置
*
* 历史: 2004.7.1 WYJ 创建
*
***********************************************************************************/
// 选项 ->特效
USHORT Cam_Effect_Check( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str==TxtOff) && (CamExt.m_nCurEffect == IF_NORMAL))
||(((int)mi->str==TxtOn) && (CamExt.m_nCurEffect == IF_MIRROR)))
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
int Cam_Effect_Set(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND parent_win = mfwParent( mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)parent_win)->data;
tBookStandard *parent_data = (tBookStandard *)win_data->user;
T_MFW_HND win = parent_data->parent_win;
T_CAM_DATA *data;
win_data = ((T_MFW_HDR *)win)->data;
data = (T_CAM_DATA *)win_data->user;
if(((int)i->str) == TxtOff)
{
CamExt.m_nCurEffect = IF_NORMAL;
SetWinMirror(cl_MAIN_WINDOW, 0);
}
else if(((int)i->str) == TxtOn)
{
CamExt.m_nCurEffect = IF_MIRROR;
SetWinMirror(cl_MAIN_WINDOW, 1);
}
bookMenuDestroy(data->menu_win);
// 开启预览
data->menu_win = NULL;
data->winstate = CAM_MAIN_PREVIEW;
return 1;
}
// 选项 ->旋转
USHORT Cam_Rotation_Check( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str==TxtOff) && (CamExt.m_nCurRotationType == RT_NORMAL))
||(((int)mi->str==TxtCam90) && (CamExt.m_nCurRotationType == RT_90))
||(((int)mi->str==TxtCam180) && (CamExt.m_nCurRotationType == RT_180))
||(((int)mi->str==TxtCam270) && (CamExt.m_nCurRotationType == RT_270))
)
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
int Cam_Rotation_Set(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND parent_win = mfwParent( mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)parent_win)->data;
tBookStandard *parent_data = (tBookStandard *)win_data->user;
T_MFW_HND win = parent_data->parent_win; // browse data window
T_CAM_DATA *data;
win_data = ((T_MFW_HDR *)win)->data;
data = (T_CAM_DATA *)win_data->user; // browse data
//2004.07.14 Added by Cathy for Camera begin
if(((int)i->str) == TxtOff)
{
CamExt.m_nCurRotationType = RT_NORMAL;
SetSwivelViewMode(cl_MAIN_WINDOW, 180);
}
else if(((int)i->str) == TxtCam90)
{
CamExt.m_nCurRotationType = RT_90;
SetSwivelViewMode(cl_MAIN_WINDOW, 270);
}
else if(((int)i->str) == TxtCam180)
{
CamExt.m_nCurRotationType = RT_180;
SetSwivelViewMode(cl_MAIN_WINDOW, 0);
}
else if(((int)i->str) == TxtCam270)
{
CamExt.m_nCurRotationType = RT_270;
SetSwivelViewMode(cl_MAIN_WINDOW, 90);
}
//2004.07.14 Added by Cathy for Camera end
bookMenuDestroy(data->menu_win);
// 开启预览
data->menu_win = NULL;
data->winstate = CAM_MAIN_PREVIEW;
return 1;
}
USHORT Cam_OSD_Check( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str==TxtOff) && (CamExt.m_nCurMode == SINGLE_SHOT))
||(((int)mi->str==TxtOn) && (CamExt.m_nCurMode == OSD_SHOT)))
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
int Cam_OSD_Set(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND parent_win = mfwParent( mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)parent_win)->data;
tBookStandard *parent_data = (tBookStandard *)win_data->user;
T_MFW_HND win = parent_data->parent_win; // browse data window
T_CAM_DATA *data;
win_data = ((T_MFW_HDR *)win)->data;
data = (T_CAM_DATA *)win_data->user; // browse data
if(((int)i->str) == TxtOff)
{
CamExt.m_nCurMode = SINGLE_SHOT;
}
else if(((int)i->str) == TxtOn)
{
CamExt.m_nCurMode = OSD_SHOT;
CamExt.m_nCurSize = S128120;
//CamExt.pOSD_Mask = (CAMU16 *)osd_mask;
// CamExt.pOSD_Mask = (CAMU16*)icontable[ICON_OSD_MASK].icon->icons; //Marked by Cathy
}
bookMenuDestroy(data->menu_win);
// 开启预览
data->menu_win = NULL;
data->winstate = CAM_MAIN_PREVIEW;
return 1;
#if 0
//begin overlay
addr1=GetStartAddress(cl_MAIN_WINDOW);//得到主窗口的地址
addr2=GetStartAddress(cl_OVERLAY_WINDOW);//的到overlay窗口地址
halWriteDisplay8(addr2, 0xe0, 128*128);//把overlay写成红色
clStartOneFrameTransfer();//刷屏
SetOverlayEnable(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -