📄 mmicamera.c
字号:
//Add_One_Record(name, (char *)jpg_buf, (int)pJpegInfo.m_EncSize, 3);
M2C_Control_Refresh(R2D_REFRESH_DISABLE);
Enter_Camera_Mode();
return 1;
case M2C_SWITCH_OFF:
TRACE(("M2C: switch off"));
//Camera_OnExitCamera(); //Marked by Cathy
M2C_Control_Refresh(R2D_REFRESH_ENABLE);
Exit_Camera_Mode();
return 1;
}
return 1;
}
/*
* 描述: 回显ffs里的图片
* 返回: 0: 成功
*/
static int M2C_Disp_Saved_Pic(int index)
{
char ffsname[20]; // ffs文件名
int status;
char * p; // 图片指针
T_FFS_STAT s; // ffs api 需要
int jpgtype;
if(index >= cam_control.file_sum)
return -1;
#ifndef _INNOVATION_EMULATOR_
/* 获取图片数据 */
sprintf(ffsname, "%s/%02d.jpg", CAM_FATH, cam_control.index[index]);
status = ffs_stat(ffsname, &s);
if(status != EFFS_OK)
return -1;
// p = (char *)ALLOC_MEMORY(s.size);
// if(p == NULL)
// return -1;
memset(jpg_buf, 0, 1024*80);
status = ffs_fread(ffsname, jpg_buf, s.size);
if(status != s.size)
{
// FREE_MEMORY((void *)p, s.size);
return -1;
}
/* 调用底层显示接口 */
//jpgtype = cam_control.cam_file[cam_control.index[index]].jpg_type; //Marked by Cathy
Camera_DisplayJPG((CAMU16 *)jpg_buf, s.size/*, jpgtype*/); //Marked by Cathy
TRACE(("M2C: Disp_Saved_Pic"));
// FREE_MEMORY((void *)p, s.size);
#endif
return 0;
}
/*
* 描述: 回显刚捕获的的图片
* 返回: 0: 成功
*/
static int M2C_Disp_Captured_Pic(void)
{
int size;
#ifndef _INNOVATION_EMULATOR_
M2C_Control_Refresh(R2D_REFRESH_DISABLE);
Enter_Camera_Mode();
/* 调用底层的接口显示图片 */
//Camera_DispCapturedPic(); //Marked by Cathy
//jpegDecode(&pJpegInfo);
/* 在camera模式下显示窗口其他部分 */
Display_Preview_Bar();
displaySoftKeys(TxtSave, TxtCancel);
Overlay_Windows_Update(0, 112, 128, 16); //Marked by Cathy
CAM_TRACE_EVENT(("Glowing: before Overlay_Windows_Update2"));
//Overlay_Windows_Update2(0, 16, 128, 96); //Marked by Cathy
TRACE(("M2C: Disp_Captured_Pic"));
#else
//dspl_BitBlt(0, 0, 128, 22, 0, (void *)preview_bar, 0);
//DRAW_ICON(ICON_PREVIEW_BAR); //2004-7-26 yangx Modify
displaySoftKeys(TxtSave, TxtCancel);
#endif
return 0;
}
/*
* 描述: 取得捕获图片的大小
* 返回: 图片大小,半字大小 实际size的1/2
*/
static int M2C_Get_Captured_Size(void)
{
int Lfilesize;
#ifndef _INNOVATION_EMULATOR_
Lfilesize = Camera_GetPicSize();
TRACE(("M2C: M2C_Get_Captured_Size= %d", Lfilesize));
return Lfilesize;
#endif
return 100;
}
/*
* 描述: 获取捕获图片数据
* 返回: 0: 成功
*/
#if 0
static int M2C_Get_Captured_Pic(unsigned char *p/*, int size*/)
{
#ifndef _INNOVATION_EMULATOR_
/* 调用接口函数取得图片数据 */
//Camera_GetPic((UInt8 *)p/*, size*/); //marked by Cathy
Camera_GetPic( &p/*, size*/); //marked by Cathy
TRACE(("M2C: Get_Captured_Pic"));
#endif
return 0;
}
#endif
/*
* 描述: 控制底层r2d_refresh()
*
*/
static void M2C_Control_Refresh(int flag)
{
CamExt.refresh = flag;
TRACE((" M2C_Control_Refresh: %d ", CamExt.refresh));
}
/***********************************************************************************
*
* 模块: 主窗口模块
*
* 描述: 负责预览和捕获窗口的相关工作
*
* 历史: 2004.7.1 WYJ 创建
*
***********************************************************************************/
/* 主窗口事件 */
enum
{
CAM_INIT, // 新建窗口
CAM_DESTROY // 窗口销毁
};
/* 主窗口状态 */
typedef enum
{
CAM_MAIN_PREVIEW, // 捕获状态
CAM_MAIN_PARA, // 预览参数调节
CAM_MAIN_SAVE, // 保存状态
CAM_MAIN_STOP, // 停止状态
CAM_MAIN_OPTION, // 进入状态菜单
CAM_MAIN_TIMER // 定时拍摄 yhf add
}MAIN_WIN_STATE;
// 捕获窗口数据
typedef struct
{
T_MMI_CONTROL mmi_control;
T_MFW_HND parent_win;
T_MFW_HND win;
T_MFW_HND kbd;
T_MFW_HND menu_win; // option menu
T_MFW_HND edit_win; // 文件名编辑框
char name[MAX_CAM_NAME]; // 文件名
T_EDITOR_DATA edit_data; // 编辑框
MAIN_WIN_STATE winstate; // 捕获或保存状态
int preview_option; // 捕获时的选项状态
} T_CAM_DATA;//wyj
// 预览参数调节函数
typedef int (*change_func)(int );
// 预览参数调节
typedef struct
{
int* value;
change_func f;
} T_VIEW_PARA;
enum
{
FORCUS_BRIGHT=0,
FORCUS_CONTRAST,
FORCUS_COLOR,
FORCUS_ZOOM,
FORCUS_MAX
};
//added by cathy begin temporarily
/* 根据标志调节亮度 */
int Camera_ChangeBright(int flag)
{
}
/* 根据标志调节对比度 */
int Camera_ChangeContrast(int flag)
{
}
/* 根据标志调节色度 */
int Camera_ChangeColor(int flag)
{
}
/* 根据标志调焦 */
int Camera_ChangeZoom(int flag)
{
}
//added by cathy end temporarily
// 亮度 对比度 色彩 焦距 调节
T_VIEW_PARA para_prc[FORCUS_MAX] =
{
{&CamExt.bright, (change_func)Camera_ChangeBright},
{&CamExt.contrast, (change_func)Camera_ChangeContrast},
{&CamExt.color, (change_func)Camera_ChangeColor},
{&CamExt.zoom, (change_func)Camera_ChangeZoom},
};
T_MFW_HND cam_main_win = NULL;
/* 模块函数声明 */
static T_MFW_HND Cam_Main_Create (T_MFW_HND parent_win);
static void Cam_Main_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int Cam_Main_win_cb(T_MFW_EVENT event, T_MFW_WIN * win);
static int Cam_Main_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard);
static int Cam_Main_Destroy (T_MFW_HND win);
/* 编辑框 */
static void Set_New_Editor(T_MFW_HND win);
static void New_EditorCB( T_MFW_HND win,USHORT Identifier,UBYTE reason);
/* dialog cb */
static void Full_Info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason);
/* 标题栏属性显示 */
static void Display_Preview_Bar(void);
/* 预览属性显示 */
static int Display_Preview_Option(int key, T_CAM_DATA* data);
/* 预览时放音 */
static void Play_Camera_Melody(void);
/*
* 描述: 照片菜单项的响应函数
*/
int Cam_Main_Catch(struct MfwMnuTag* m, struct MfwMnuItemTag* i)
{
T_MFW_HND parent = mfwParent( mfw_header());
T_MFW_HND win = Cam_Main_Create(parent);
if(win NEQ NULL)
{
SEND_EVENT(win, CAM_INIT, 0, 0);
}
return 1;
}
/*
* 描述: 创建捕获主窗口
*/
static T_MFW_HND Cam_Main_Create (T_MFW_HND parent_win)
{
T_MFW_WIN *win;
T_CAM_DATA *data = (T_CAM_DATA *)ALLOC_MEMORY (sizeof (T_CAM_DATA));
if(data EQ 0)
return 0;
data->win = win_create(parent_win, 0, MfwWinVisible, (T_MFW_CB)Cam_Main_win_cb);
if (data->win EQ 0)
return 0;
cam_main_win = data->win;
data->kbd = kbd_create (data->win, KEY_ALL, (T_MFW_CB)Cam_Main_kbd_cb);
data->winstate = CAM_MAIN_STOP;
data->edit_win = NULL;
/* Create window handler */
data->mmi_control.dialog = (T_DIALOG_FUNC)Cam_Main_DialogCB;/* dialog main function */
data->mmi_control.data = data;
data->parent_win = parent_win;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *) data;
/* return window handle */
return data->win;
}
//2004.08.03 Added by Cathy for Camera begin
Preview_Para_Init()
{
CamExt.m_nCurRotationType = RT_NORMAL;
SetSwivelViewMode(cl_MAIN_WINDOW, 180);
CamExt.m_nCurEffect = IF_NORMAL;
SetWinMirror(cl_MAIN_WINDOW, 0);
}
//2004.07.14 Added by Cathy for Camera end
/*
* 描述: 捕获主窗口事件处理函数
*/
static void Cam_Main_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_DATA *data = (T_CAM_DATA *)win_data->user;
UINT32 oldColor,oldFontColor;
switch(event)
{
case CAM_INIT:
// 做预览的初始化
Preview_Para_Init();
M2C_Set_Camera_State(M2C_SWITCH_ON);
data->winstate = CAM_MAIN_PREVIEW;
// 将背景刷为黑色
oldFontColor = dspl_GetBkgColor();
dspl_SetBkgColor(0x0);
dspl_Clear(0,0,128,128);
dspl_SetBkgColor(oldFontColor);
Force_refresh();
winShow(win);
break;
case CAM_DESTROY:
// 预览结束
Cam_Main_Destroy(win);
break;
}
}
/*
* 描述: 捕获主窗口显示回调函数
*/
static int Cam_Main_win_cb(T_MFW_EVENT event, T_MFW_WIN * win)
{
T_CAM_DATA *data = (T_CAM_DATA *)win->user;
switch(event)
{
case MfwWinVisible:
if(data->winstate == CAM_MAIN_PREVIEW || data->winstate == CAM_MAIN_PARA) //预览,准备拍摄
{
/* 开始预览,仅在这里做 */
Enter_Camera_Mode(main_lcd_mode);
Display_Preview_Bar();
displaySoftKeys(TxtCamCatch, TxtSoftOptions);
Overlay_Windows_Update(0, 112, 128, 16/*, (CAMU8 *)0*/);//Marked by cathy
M2C_Set_Camera_State(M2C_START_PREVIEW);
}
else if(data->winstate == CAM_MAIN_SAVE)//已拍摄,保存窗口
{
}
default:
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
/*
* 描述: 捕获主窗口按键回调函数
*/
#define UP 0x01
#define DOWN 0x00
static int Cam_Main_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_DATA *data = (T_CAM_DATA*)win_data->user;
int status;
// 将键值送入para窗口处理
status = Display_Preview_Option(keyboard->code, data);
if( status == MFW_EVENT_CONSUMED)
return 1;
switch (keyboard->code)
{
case KCD_HUP:
M2C_Set_Camera_State(M2C_STOP_PREVIEW);
SEND_EVENT (win, CAM_DESTROY, 0, 0);
break;
case KCD_LEFT:
if(data->winstate == CAM_MAIN_PREVIEW || data->winstate == CAM_MAIN_PARA) // 预览状态
{
int size=0;
/* 放拍照铃声 */
Play_Camera_Melody();
CAM_TRACE_EVENT(("glowing: --- before capture"));
/* 开始捕获 */
M2C_Set_Camera_State(M2C_CAPTURE);
M2C_Disp_Captured_Pic(); // 获得图片
// 取得图片大小
size = M2C_Get_Captured_Size();
CAM_TRACE_EVENT(("glowing: --- after capture"));
TRACE(("M2C: Get_Captured_Size = %d",size));
if(IsCamFfs_Full(size)) // 空间已满
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -