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

📄 mmicamera.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
      
	//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 + -