From: Jeongmo Yang Date: Tue, 27 Apr 2021 12:50:36 +0000 (+0900) Subject: Add extra preview for test X-Git-Tag: accepted/tizen/unified/20210602.122536~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=caa7d9bbfcde4101cf4091fe1ffc5be3b6494331;p=platform%2Fadaptation%2Fcamera-hal-v4l2.git Add extra preview for test - It could be enabled with mmfw_camcorder.ini : SupportExtraPreview in [VideoInput] [Version] 0.1.1 [Issue Type] New feature Change-Id: Id0ee278c043b8fb7b099a789554945bbac0b7d51 Signed-off-by: Jeongmo Yang --- diff --git a/packaging/camera-hal-v4l2.spec b/packaging/camera-hal-v4l2.spec index aa01d0f..f52c565 100644 --- a/packaging/camera-hal-v4l2.spec +++ b/packaging/camera-hal-v4l2.spec @@ -1,7 +1,7 @@ Name: camera-hal-v4l2 Summary: Tizen Camera Hal for V4L2 -Version: 0.1.0 -Release: 1 +Version: 0.1.1 +Release: 0 Group: Multimedia/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/hal_camera_v4l2.c b/src/hal_camera_v4l2.c index e82d995..6738f85 100644 --- a/src/hal_camera_v4l2.c +++ b/src/hal_camera_v4l2.c @@ -952,6 +952,17 @@ static void *__camera_buffer_handler_func(gpointer data) camera_v4l2_release_preview_buffer((void *)handle, index); } + g_mutex_lock(&handle->extra_preview_lock); + + if (handle->extra_preview_cb) { + handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 0, handle->extra_preview_cb_data); + handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 1, handle->extra_preview_cb_data); + handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 2, handle->extra_preview_cb_data); + handle->extra_preview_cb(&handle->camera_buffers[index], NULL, 3, handle->extra_preview_cb_data); + } + + g_mutex_unlock(&handle->extra_preview_lock); + /* check capture request flag */ if (handle->capture_request) { __camera_do_capture(handle); @@ -1064,6 +1075,7 @@ static void __camera_release_handle(hal_camera_handle *handle) g_mutex_clear(&handle->lock); g_mutex_clear(&handle->buffer_lock); g_mutex_clear(&handle->msg_cb_lock); + g_mutex_clear(&handle->extra_preview_lock); g_cond_clear(&handle->buffer_cond); g_cond_clear(&handle->msg_cb_cond); @@ -1111,6 +1123,7 @@ int camera_v4l2_init(void **camera_handle) g_mutex_init(&new_handle->lock); g_mutex_init(&new_handle->buffer_lock); g_mutex_init(&new_handle->msg_cb_lock); + g_mutex_init(&new_handle->extra_preview_lock); g_cond_init(&new_handle->buffer_cond); g_cond_init(&new_handle->msg_cb_cond); @@ -1876,6 +1889,65 @@ int camera_v4l2_stop_record(void *camera_handle) } +int camera_v4l2_set_extra_preview_frame_cb(void *camera_handle, hal_camera_extra_preview_frame_cb callback, void *user_data) +{ + hal_camera_handle *handle = (hal_camera_handle *)camera_handle; + + if (!handle) { + LOGE("NULL handle"); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + g_mutex_lock(&handle->extra_preview_lock); + + handle->extra_preview_cb = callback; + handle->extra_preview_cb_data = user_data; + + g_mutex_unlock(&handle->extra_preview_lock); + + LOGI("done"); + + return CAMERA_ERROR_NONE; +} + + +int camera_v4l2_unset_extra_preview_frame_cb(void *camera_handle) +{ + hal_camera_handle *handle = (hal_camera_handle *)camera_handle; + + if (!handle) { + LOGE("NULL handle"); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + g_mutex_lock(&handle->extra_preview_lock); + + handle->extra_preview_cb = NULL; + handle->extra_preview_cb_data = NULL; + + g_mutex_unlock(&handle->extra_preview_lock); + + LOGI("done"); + + return CAMERA_ERROR_NONE; +} + + +int camera_v4l2_release_extra_preview_buffer(void *camera_handle, int stream_id, int buffer_index) +{ + hal_camera_handle *handle = (hal_camera_handle *)camera_handle; + + if (!handle) { + LOGE("NULL handle"); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + LOGI("done - stream_id[%d], index[%d]", stream_id, buffer_index); + + return CAMERA_ERROR_NONE; +} + + int camera_v4l2_set_command(void *camera_handle, int64_t command, void *value) { int ret = CAMERA_ERROR_NONE; @@ -2104,6 +2176,9 @@ static int camera_v4l2_backend_init(void **data) funcs->set_command = camera_v4l2_set_command; funcs->get_command = camera_v4l2_get_command; funcs->set_batch_command = camera_v4l2_set_batch_command; + funcs->set_extra_preview_frame_cb = camera_v4l2_set_extra_preview_frame_cb; + funcs->unset_extra_preview_frame_cb = camera_v4l2_unset_extra_preview_frame_cb; + funcs->release_extra_preview_buffer = camera_v4l2_release_extra_preview_buffer; *data = (void *)funcs; diff --git a/src/hal_camera_v4l2_private.h b/src/hal_camera_v4l2_private.h index b6eb18a..d4e6397 100644 --- a/src/hal_camera_v4l2_private.h +++ b/src/hal_camera_v4l2_private.h @@ -54,6 +54,9 @@ typedef struct _camera_hal_handle { camera_format_s preview_format; hal_camera_preview_frame_cb preview_cb; gpointer preview_cb_data; + hal_camera_extra_preview_frame_cb extra_preview_cb; + gpointer extra_preview_cb_data; + GMutex extra_preview_lock; /* capture */ hal_camera_capture_cb capture_cb;