Add flag to invoke preview callback 56/282356/2
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 30 Sep 2022 06:41:28 +0000 (15:41 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 30 Sep 2022 07:25:06 +0000 (16:25 +0900)
[Version] 0.4.92
[Issue Type] Improvement

Change-Id: I39cf395eabe10ee2181d29444a5e03b2aa56b458
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
include/camera_private.h
packaging/capi-media-camera.spec
src/camera.c
test/camera_test.c

index 74e11e1..69a01f3 100644 (file)
@@ -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;
index 645e859..bb25635 100644 (file)
@@ -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
index 228808f..0f60caf 100644 (file)
@@ -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) {
index f3facb7..e471e37 100644 (file)
@@ -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);