当按拍照键时先实现自动对焦的功能,再进行拍照
0赞[DESCRIPTION]
模拟两段式拍照键,当按ENTER键拍照时先实现自动对焦的功能,再进行拍照
[KEYWORD]
Camera MMI
[SOLUTION]来自半导体社区
修改Entry 键的callback ,使得流程由最初的直接拍照,变为先对焦,对焦结束后直接拍照。修改方法如下:
请修改CamcorderApp文件:
1、修改mmi_camco_enter_cam_focusing_state函数
注释掉函数最后的如下语句
// mmi_camco_cam_focus_set_key_hdlr();
2、修改 mmi_camco_enter_cam_focused_state函数
注释掉最后的如下语句:
//mmi_camco_cam_focus_set_key_hdlr();
函数最后加上如下语句:
mmi_camco_cam_capture_botton_pressed();
3、 非FTE版本做如下修改:
mmi_camco_cam_preview_set_key_hdlr函数中:
if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT &&
mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) != MMI_CAMCO_AFRANGE_INFINTE)
{
SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_CAMERA,
KEY_HALF_PRESS_DOWN);
}
如上这段code后面加上如下code:
if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE) ==
MMI_CAMCO_CAPMODE_CONT_SHOT)
{
SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_ENTER, KEY_EVENT_DOWN);//add this 连
拍则直接拍
}
else
{
SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed,KEY_ENTER,KEY_EVENT_DOWN);//add
this 非连拍则先对焦
}
// SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_CAMERA, KEY_EVENT_DOWN); 注释掉
// SetKeyHandler(mmi_camco_cam_capture_button_released, KEY_CAMERA, KEY_EVENT_UP);注释掉
原本是最后两句,现在是注释掉,加上前面的这段code,请注意把KEY_ENTER改为 KEY_CAMERA。
FTE版本做如下修改:
把工程中所有调用如下代码的地方进行修改:
if (mmi_camco_cam_p->is_drive_available && mmi_camco_cam_p->is_space_enough)
{
if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT &&
mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_AFRANGE_INFINTE)
{
SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_CAMERA,
KEY_HALF_PRESS_DOWN);
}
//把如下代码
SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_CAMERA, KEY_EVENT_DOWN);
SetKeyHandler(mmi_camco_cam_capture_button_released, KEY_CAMERA, KEY_EVENT_UP);
修改为如下代码:
if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE) ==
MMI_CAMCO_CAPMODE_CONT_SHOT)
{
SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_ENTER, KEY_EVENT_DOWN);//add this 连
拍则直接拍
}
else
{
SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed,KEY_ENTER,KEY_EVENT_DOWN);//add
this 非连拍则先对焦
}
#ifdef __MMI_CAMCO_EVB_AF_TEST__
if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT
&& mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_AFRANGE_INFINTE)
{
SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_1, KEY_EVENT_DOWN);
SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_3, KEY_EVENT_DOWN);
}
#endif /* __MMI_CAMCO_EVB_AF_TEST__ */
g_mmi_camco_cntx.is_camerakey_valid = MMI_TRUE;
}
4、 麻烦您在函数mmi_camco_cam_autofocus_result_hdlr()
中做如下修改后验证一下,谢谢。
else if (result_ind.af_result == MDI_AF_SEARCH_STATUS_SWITCH_MACRO)
{
/* Camera is still in MMI_CAMCO_STATE_CAM_FOCUSING */
mmi_camco_osd_enter_state(MMI_CAMCO_OSD_STATE_FOCUSE_HINT);
mmi_camco_osd_set_center_focus_process_hint_img(IMG_ID_CAMCO_AFRANGE_MACRO);
//添加如下代码
mmi_camco_cam_capture_button_pressed();
}
else
{
.....
//最后添加如下代码
mmi_camco_cam_capture_button_pressed();
}