From 3e50cc85935ffdcd5873d68017e4fc8d3bb89531 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Fri, 30 Sep 2022 15:41:28 +0900 Subject: [PATCH] Add flag to invoke preview callback [Version] 0.4.92 [Issue Type] Improvement Change-Id: I39cf395eabe10ee2181d29444a5e03b2aa56b458 Signed-off-by: Jeongmo Yang --- include/camera_private.h | 1 + packaging/capi-media-camera.spec | 2 +- src/camera.c | 11 ++++++++++- test/camera_test.c | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/camera_private.h b/include/camera_private.h index 74e11e1..69a01f3 100644 --- a/include/camera_private.h +++ b/include/camera_private.h @@ -161,6 +161,7 @@ typedef struct _camera_cb_info_s { gpointer user_cb[MUSE_CAMERA_EVENT_TYPE_NUM]; gpointer user_data[MUSE_CAMERA_EVENT_TYPE_NUM]; GMutex user_cb_mutex[MUSE_CAMERA_EVENT_TYPE_NUM]; + gboolean invoke_preview_cb; /* tbm */ tbm_bufmgr bufmgr; diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index 645e859..bb25635 100644 --- a/packaging/capi-media-camera.spec +++ b/packaging/capi-media-camera.spec @@ -1,6 +1,6 @@ Name: capi-media-camera Summary: A Camera API -Version: 0.4.91 +Version: 0.4.92 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/camera.c b/src/camera.c index 228808f..0f60caf 100644 --- a/src/camera.c +++ b/src/camera.c @@ -321,6 +321,11 @@ static void __camera_event_handler_preview(camera_cb_info_s *cb_info, char *recv ret_fd = preview_fd; CAMERA_MSG_PARAM_SET(param, INT, ret_fd); + if (cb_info->invoke_preview_cb == FALSE) { + CAM_LOG_WARNING("Skip preview callback for fd[%d] due to preview stop.", ret_fd); + goto _PREVIEW_CB_HANDLER_DONE; + } + if (num_buffer_fd < 0 || num_buffer_fd > BUFFER_MAX_PLANE_NUM) { CAM_LOG_ERROR("invalid num buffer fd %d", num_buffer_fd); goto _PREVIEW_CB_HANDLER_DONE; @@ -2770,6 +2775,8 @@ int camera_start_preview(camera_h camera) } } + pc->cb_info->invoke_preview_cb = TRUE; + _camera_msg_send(api, fds, pc->cb_info, &ret, #ifdef TIZEN_FEATURE_NO_TIMEOUT_FOR_PREVIEW CAMERA_CB_NO_TIMEOUT); @@ -2832,7 +2839,9 @@ int camera_stop_preview(camera_h camera) } } //LCOV_EXCL_STOP - /* send stop preview message */ + + pc->cb_info->invoke_preview_cb = FALSE; + _camera_msg_send(api, NULL, pc->cb_info, &ret, CAMERA_CB_TIMEOUT); if (ret == CAMERA_ERROR_NONE) { diff --git a/test/camera_test.c b/test/camera_test.c index f3facb7..e471e37 100644 --- a/test/camera_test.c +++ b/test/camera_test.c @@ -1789,7 +1789,7 @@ static void __enable_extra_preview_and_callback(camera_h camera) g_print("\n\t## for MM_CAMCORDER_EXTRA_PREVIEW_MODE_PIPELINE_ELEMENT ##\n"); g_print("\n\tSet device for extra preview[0 ~ 9] : "); - err = scanf("%d", (int *)&device); + err = scanf("%d", &device); flush_stdin(); err = camera_set_extra_preview_device(hcamcorder->camera, 0, device); -- 2.7.4