case MUSE_CAMERA_API_UNSET_MEDIA_BRIDGE:
ret = __camera_dispatcher_unset_preview_cb_flag(muse_camera, PREVIEW_CB_TYPE_MEDIA_BRIDGE);
break;
+ case MUSE_CAMERA_API_SET_EXTRA_PREVIEW_CB:
+ ret = __camera_dispatcher_set_preview_cb_flag(muse_camera, PREVIEW_CB_TYPE_EXTRA);
+ break;
+ case MUSE_CAMERA_API_UNSET_EXTRA_PREVIEW_CB:
+ ret = __camera_dispatcher_unset_preview_cb_flag(muse_camera, PREVIEW_CB_TYPE_EXTRA);
+ break;
default:
CAM_LOG_ERROR("unhandled task - api[%d]", job->api);
goto _PROCESS_DONE;
muse_camera->preview_cb_flag, flag);
if (muse_camera->preview_cb_flag == PREVIEW_CB_TYPE_NONE) {
- ret = legacy_camera_set_preview_cb(muse_camera->camera_handle, \
+ g_mutex_unlock(&muse_camera->preview_cb_lock);
+
+ ret = legacy_camera_set_preview_cb(muse_camera->camera_handle,
(camera_preview_cb)_camera_dispatcher_preview_cb,
(void *)muse_camera->module);
+
+ g_mutex_lock(&muse_camera->preview_cb_lock);
+
if (ret != CAMERA_ERROR_NONE)
CAM_LOG_ERROR("set preview cb failed[0x%x]", ret);
}
- if (ret == CAMERA_ERROR_NONE)
+ if (ret == CAMERA_ERROR_NONE) {
+ if (!CHECK_PREVIEW_CB(muse_camera, PREVIEW_CB_TYPE_EXTRA) && flag == PREVIEW_CB_TYPE_EXTRA) {
+ g_mutex_unlock(&muse_camera->preview_cb_lock);
+
+ legacy_camera_enable_extra_preview(muse_camera->camera_handle, true);
+
+ g_mutex_lock(&muse_camera->preview_cb_lock);
+ }
+
SET_PREVIEW_CB_TYPE(muse_camera, flag);
+ }
g_mutex_unlock(&muse_camera->preview_cb_lock);
static int __camera_dispatcher_unset_preview_cb_flag(muse_camera_handle_s *muse_camera, guint flag)
{
int ret = CAMERA_ERROR_NONE;
- guint current_flag = 0x0;
+ guint old_flag = 0x0;
+ gboolean is_extra_preview_disabled = FALSE;
camera_return_val_if_fail(muse_camera, CAMERA_ERROR_INVALID_PARAMETER);
+ if (muse_camera->preview_cb_flag == PREVIEW_CB_TYPE_NONE) {
+ CAM_LOG_INFO("nothing to do");
+ return ret;
+ }
+
g_mutex_lock(&muse_camera->preview_cb_lock);
CAM_LOG_INFO("current flag[0x%x] - unset[0x%x]",
muse_camera->preview_cb_flag, flag);
/* backup current flag */
- current_flag = muse_camera->preview_cb_flag;
+ old_flag = muse_camera->preview_cb_flag;
+
+ /* disable extra preview */
+ if (CHECK_PREVIEW_CB(muse_camera, PREVIEW_CB_TYPE_EXTRA) && flag == PREVIEW_CB_TYPE_EXTRA) {
+ g_mutex_unlock(&muse_camera->preview_cb_lock);
+
+ CAM_LOG_INFO("disable extra preview");
+
+ legacy_camera_enable_extra_preview(muse_camera->camera_handle, false);
+ is_extra_preview_disabled = TRUE;
+
+ g_mutex_lock(&muse_camera->preview_cb_lock);
+ }
UNSET_PREVIEW_CB_TYPE(muse_camera, flag);
if (muse_camera->preview_cb_flag == PREVIEW_CB_TYPE_NONE) {
g_mutex_unlock(&muse_camera->preview_cb_lock);
- ret = legacy_camera_unset_preview_cb(muse_camera->camera_handle);
-
- g_mutex_lock(&muse_camera->preview_cb_lock);
+ CAM_LOG_INFO("unset preview cb");
+ ret = legacy_camera_unset_preview_cb(muse_camera->camera_handle);
if (ret != CAMERA_ERROR_NONE) {
CAM_LOG_ERROR("unset preview cb failed[0x%x]", ret);
- /* restore flag */
- muse_camera->preview_cb_flag = current_flag;
+
+ /* restore flag and extra preview */
+ muse_camera->preview_cb_flag = old_flag;
+
+ if (is_extra_preview_disabled)
+ legacy_camera_enable_extra_preview(muse_camera->camera_handle, true);
}
+
+ g_mutex_lock(&muse_camera->preview_cb_lock);
}
g_mutex_unlock(&muse_camera->preview_cb_lock);
}
+int camera_dispatcher_set_extra_preview_cb(muse_module_h module)
+{
+ muse_camera_handle_s *muse_camera = NULL;
+
+ muse_camera = (muse_camera_handle_s *)muse_server_ipc_get_handle(module);
+
+ CAM_LOG_INFO("handle[%p]", muse_camera);
+
+ _camera_task_add_job(muse_camera, MUSE_CAMERA_API_SET_EXTRA_PREVIEW_CB,
+ MUSE_CAMERA_API_CLASS_IMMEDIATE, 0);
+
+ return MUSE_CAMERA_ERROR_NONE;
+}
+
+
+int camera_dispatcher_unset_extra_preview_cb(muse_module_h module)
+{
+ muse_camera_handle_s *muse_camera = NULL;
+
+ muse_camera = (muse_camera_handle_s *)muse_server_ipc_get_handle(module);
+
+ CAM_LOG_INFO("handle[%p]", muse_camera);
+
+ _camera_task_add_job(muse_camera, MUSE_CAMERA_API_UNSET_EXTRA_PREVIEW_CB,
+ MUSE_CAMERA_API_CLASS_IMMEDIATE, 0);
+
+ return MUSE_CAMERA_ERROR_NONE;
+}
+
+
static tbm_bo __camera_normal_buffer_bo_new(MMCamcorderVideoStreamDataType *stream, tbm_bufmgr bufmgr)
{
int data_size[3] = {0, 0, 0};
camera_dispatcher_attr_get_flash_brightness, /* MUSE_CAMERA_API_ATTR_GET_FLASH_BRIGHTNESS */
camera_dispatcher_attr_get_flash_brightness_range, /* MUSE_CAMERA_API_ATTR_GET_FLASH_BRIGHTNESS_RANGE */
camera_dispatcher_set_media_bridge, /* MUSE_CAMERA_API_SET_MEDIA_BRIDGE */
- camera_dispatcher_unset_media_bridge /* MUSE_CAMERA_API_UNSET_MEDIA_BRIDGE */
+ camera_dispatcher_unset_media_bridge, /* MUSE_CAMERA_API_UNSET_MEDIA_BRIDGE */
+ camera_dispatcher_set_extra_preview_cb, /* MUSE_CAMERA_API_SET_EXTRA_PREVIEW_CB, */
+ camera_dispatcher_unset_extra_preview_cb /* MUSE_CAMERA_API_UNSET_EXTRA_PREVIEW_CB, */
};