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

📄 mmicamera.c

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