From e4e396258eb388124b3fcddacb1720de3033f396 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Thu, 23 Jun 2022 11:46:34 +0900 Subject: [PATCH] Remove duplicated code.(phase#2) - Add macros to check handle. - Add sub functions for duplicated code. - Rename camera_test to camera_test_headed. - Add common source file for camera_test_headed/headless. [Version] 0.4.82 [Issue Type] SAM Improvement Change-Id: I2901b473e968dcbd132bf0db6c2d9fbb74978800 Signed-off-by: Jeongmo Yang --- CMakeLists.txt | 1 - ...ifest => capi-media-camera-test-headed.manifest | 0 packaging/capi-media-camera.spec | 16 +- src/camera.c | 843 ++------ src/camera_internal.c | 63 +- test/CMakeLists.txt | 42 +- test/camera_test.c | 341 +--- test/camera_test.h | 155 ++ test/camera_test_headed.c | 192 ++ test/camera_test_headless.c | 63 + test_headless/CMakeLists.txt | 24 - test_headless/camera_test_headless.c | 2035 -------------------- 12 files changed, 686 insertions(+), 3089 deletions(-) rename capi-media-camera-test.manifest => capi-media-camera-test-headed.manifest (100%) create mode 100644 test/camera_test.h create mode 100644 test/camera_test_headed.c create mode 100644 test/camera_test_headless.c delete mode 100644 test_headless/CMakeLists.txt delete mode 100644 test_headless/camera_test_headless.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 243f3bd..ca27ab3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,6 @@ CONFIGURE_FILE( INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) ADD_SUBDIRECTORY(test) -ADD_SUBDIRECTORY(test_headless) IF(UNIX) diff --git a/capi-media-camera-test.manifest b/capi-media-camera-test-headed.manifest similarity index 100% rename from capi-media-camera-test.manifest rename to capi-media-camera-test-headed.manifest diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index 274affb..2ee2852 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.81 +Version: 0.4.82 Release: 0 Group: Multimedia/API License: Apache-2.0 @@ -39,12 +39,12 @@ Requires: pkgconfig(capi-media-tool) Development related files for a Camera library in Tizen Native API. -%package test -Summary: A Camera API testsuite +%package test-headed +Summary: A Camera API testsuite for headed target Requires: %{name} = %{version}-%{release} -%description test -Tizen Native camera API testsuite. +%description test-headed +Tizen Native camera API testsuite for headed target. %package test-headless Summary: A Camera API testsuite for headless target @@ -114,10 +114,10 @@ find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';' %{_libdir}/pkgconfig/*.pc %{_libdir}/libcapi-media-camera.so -%files test -%manifest capi-media-camera-test.manifest +%files test-headed +%manifest capi-media-camera-test-headed.manifest %license LICENSE.APLv2 -%{_bindir}/camera_test +%{_bindir}/camera_test_headed %files test-headless %manifest capi-media-camera-test-headless.manifest diff --git a/src/camera.c b/src/camera.c index bc47060..5a5e4ac 100644 --- a/src/camera.c +++ b/src/camera.c @@ -42,6 +42,20 @@ return CAMERA_ERROR_NOT_SUPPORTED;\ }\ } while (0) +#define CAMERA_CHECK_HANDLE_RETURN(pc) \ + do {\ + if (!pc || !pc->cb_info) {\ + CAM_LOG_ERROR("NULL handle[%p]", pc);\ + return;\ + }\ + } while (0) +#define CAMERA_CHECK_HANDLE_RETURN_VAL(pc, val) \ + do {\ + if (!pc || !pc->cb_info) {\ + CAM_LOG_ERROR("NULL handle[%p]", pc);\ + return (val);\ + }\ + } while (0) /* for camera device manager */ typedef struct _cdm_symbol_table { @@ -90,10 +104,7 @@ static gboolean __camera_allocate_preview_buffer(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; camera_cb_info_s *cb_info = NULL; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("invalid pointer %p %p", pc, pc ? pc->cb_info : NULL); - return FALSE; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, FALSE); cb_info = pc->cb_info; @@ -165,10 +176,7 @@ static void __camera_release_preview_buffer(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; camera_cb_info_s *cb_info = NULL; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("invalid pointer %p %p", pc, pc ? pc->cb_info : NULL); - return; - } + CAMERA_CHECK_HANDLE_RETURN(pc); CAM_LOG_INFO("Enter"); @@ -687,7 +695,7 @@ static void __camera_release_imported_bo(tbm_bo *bo) } -static bool __is_supported_common(camera_h camera, muse_camera_api_e api) +static bool __is_supported(camera_h camera, muse_camera_api_e api) { int ret = CAMERA_ERROR_NONE; camera_cli_s *pc = (camera_cli_s *)camera; @@ -704,7 +712,92 @@ static bool __is_supported_common(camera_h camera, muse_camera_api_e api) CAM_LOG_INFO("Leave - api[%d], ret[%d]", api, ret); - return (bool)ret; + return !!ret; +} + + +static int __set_mode(camera_h camera, muse_camera_api_e api, int set_mode) +{ + int ret = CAMERA_ERROR_NONE; + camera_cli_s *pc = (camera_cli_s *)camera; + camera_msg_param param; + + if (!pc || !pc->cb_info) { + CAM_LOG_ERROR("api[%d] NULL handle[%p]", api, pc); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + CAM_LOG_INFO("Enter - api[%d], mode[%d]", api, set_mode); + + CAMERA_MSG_PARAM_SET(param, INT, set_mode); + + _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); + + CAM_LOG_INFO("Leave - api[%d], ret[0x%x]", api, ret); + + return ret; +} + + +static int __set_enable(camera_h camera, muse_camera_api_e api, int set_enable) +{ + int ret = CAMERA_ERROR_NONE; + camera_cli_s *pc = (camera_cli_s *)camera; + camera_msg_param param; + + if (!pc || !pc->cb_info) { + CAM_LOG_ERROR("api[%d] NULL handle[%p]", api, pc); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + CAM_LOG_INFO("Enter - api[%d], enable[%d]", api, set_enable); + + CAMERA_MSG_PARAM_SET(param, INT, set_enable); + + _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); + + CAM_LOG_INFO("Leave - api[%d], ret[0x%x]", api, ret); + + return ret; +} + + +static void __send_message_get_return(camera_cb_info_s *cb_info, muse_camera_api_e api, char *msg, int time_out, int *ret) +{ + int send_ret = 0; + + if (!msg) { + CAM_LOG_ERROR("api[%d] message failed", api); + if (ret) + *ret = CAMERA_ERROR_OUT_OF_MEMORY; + + return; + } + + CAM_LOG_INFO("api[%d], message[%s]", api, msg); + + if (cb_info->is_server_connected) { + _camera_update_api_waiting(cb_info, api, 1); + + g_mutex_lock(&cb_info->fd_lock); + send_ret = muse_core_msg_send(cb_info->fd, msg); + g_mutex_unlock(&cb_info->fd_lock); + } + + if (send_ret < 0) { + CAM_LOG_ERROR("message send failed"); + if (ret) + *ret = CAMERA_ERROR_INVALID_OPERATION; + } else { + if (ret) + *ret = _camera_client_wait_for_cb_return(api, cb_info, time_out); + } + + _camera_update_api_waiting(cb_info, api, -1); + + muse_core_msg_free(msg); + + CAM_LOG_INFO("api[%d] ret[0x%x]", api, ret ? *ret : 0x0); } @@ -759,7 +852,6 @@ _CB_RETURN_END: void _camera_msg_send(int api, int *fds, camera_cb_info_s *cb_info, int *ret, int timeout) { - int send_ret = 0; char *msg = NULL; if (!cb_info) { @@ -772,44 +864,14 @@ void _camera_msg_send(int api, int *fds, camera_cb_info_s *cb_info, } msg = muse_core_msg_new(api, NULL); - if (!msg) { - CAM_LOG_ERROR("msg failed: api %d", api); - - if (ret) - *ret = CAMERA_ERROR_OUT_OF_MEMORY; - - return; - } - - CAM_LOG_DEBUG("send msg[%s]", msg); - - if (cb_info->is_server_connected) { - _camera_update_api_waiting(cb_info, api, 1); - - g_mutex_lock(&cb_info->fd_lock); - send_ret = muse_core_msg_send_fd(cb_info->fd, fds, msg); - g_mutex_unlock(&cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("msg send failed"); - if (ret) - *ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - if (ret) - *ret = _camera_client_wait_for_cb_return(api, cb_info, timeout); - } - - _camera_update_api_waiting(cb_info, api, -1); - muse_core_msg_free(msg); + __send_message_get_return(cb_info, api, msg, timeout, ret); } void _camera_msg_send_param1(int api, camera_cb_info_s *cb_info, int *ret, camera_msg_param *param, int timeout) { - int send_ret = 0; int array_length; char *msg = NULL; @@ -848,53 +910,23 @@ void _camera_msg_send_param1(int api, camera_cb_info_s *cb_info, break; } - if (!msg) { - CAM_LOG_ERROR("msg failed: api %d", api); - - if (ret) - *ret = CAMERA_ERROR_OUT_OF_MEMORY; - - return; - } - - CAM_LOG_DEBUG("send msg[%s]", msg); - - if (cb_info->is_server_connected) { - _camera_update_api_waiting(cb_info, api, 1); - - g_mutex_lock(&cb_info->fd_lock); - send_ret = muse_core_msg_send(cb_info->fd, msg); - g_mutex_unlock(&cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("msg send failed"); - - if (ret) - *ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - if (ret) - *ret = _camera_client_wait_for_cb_return(api, cb_info, timeout); - } - - _camera_update_api_waiting(cb_info, api, -1); - - muse_core_msg_free(msg); + __send_message_get_return(cb_info, api, msg, timeout, ret); } void _camera_msg_send_param2_int(int api, camera_cb_info_s *cb_info, int *ret, camera_msg_param *param0, camera_msg_param *param1, int timeout) { - int func_ret = CAMERA_ERROR_NONE; - int send_ret = 0; char *msg = NULL; if (!cb_info || !param0 || !param1) { CAM_LOG_ERROR("invalid ptr %p %p %p : api %d", cb_info, param0, param1, api); - func_ret = CAMERA_ERROR_INVALID_PARAMETER; - goto _SEND_PARAM2_INT_DONE; + + if (ret) + *ret = CAMERA_ERROR_INVALID_PARAMETER; + + return; } CAM_LOG_DEBUG("api[%d], param0[%s:%d], param1[%s:%d]", @@ -906,37 +938,8 @@ void _camera_msg_send_param2_int(int api, camera_cb_info_s *cb_info, param0->type, param0->name, param0->value.value_INT, param1->type, param1->name, param1->value.value_INT, NULL); - if (!msg) { - CAM_LOG_ERROR("msg failed: api %d", api); - func_ret = CAMERA_ERROR_OUT_OF_MEMORY; - goto _SEND_PARAM2_INT_DONE; - } - - CAM_LOG_DEBUG("send msg[%s]", msg); - - if (cb_info->is_server_connected) { - _camera_update_api_waiting(cb_info, api, 1); - - g_mutex_lock(&cb_info->fd_lock); - send_ret = muse_core_msg_send(cb_info->fd, msg); - g_mutex_unlock(&cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("msg send failed"); - func_ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - func_ret = _camera_client_wait_for_cb_return(api, cb_info, timeout); - } - - _camera_update_api_waiting(cb_info, api, -1); - - muse_core_msg_free(msg); - -_SEND_PARAM2_INT_DONE: - if (ret) - *ret = func_ret; + __send_message_get_return(cb_info, api, msg, timeout, ret); } @@ -2356,10 +2359,7 @@ int _camera_start_evas_rendering(camera_h camera) { camera_cli_s *pc = (camera_cli_s *)camera; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("start"); @@ -2380,10 +2380,7 @@ int _camera_stop_evas_rendering(camera_h camera, bool keep_screen) int ret = CAMERA_ERROR_NONE; camera_cli_s *pc = (camera_cli_s *)camera; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("stop - keep screen %d", keep_screen); @@ -2657,10 +2654,7 @@ int camera_change_device(camera_h camera, camera_device_e device) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAMERA_MSG_PARAM_SET(param, INT, device); @@ -2684,10 +2678,7 @@ int camera_destroy(camera_h camera) muse_camera_api_e api = MUSE_CAMERA_API_DESTROY; camera_cli_s *pc = (camera_cli_s *)camera; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2718,10 +2709,7 @@ int camera_start_preview(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; camera_state_e current_state = CAMERA_STATE_NONE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter : preview format %d, display type %d", pc->cb_info->preview_format, pc->cb_info->dp_info.type); @@ -2799,10 +2787,7 @@ int camera_stop_preview(camera_h camera) muse_camera_api_e api = MUSE_CAMERA_API_STOP_PREVIEW; camera_state_e current_state = CAMERA_STATE_NONE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2847,10 +2832,7 @@ int camera_start_capture(camera_h camera, camera_capturing_cb capturing_cb, came camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_START_CAPTURE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2870,7 +2852,7 @@ int camera_start_capture(camera_h camera, camera_capturing_cb capturing_cb, came bool camera_is_supported_continuous_capture(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_SUPPORT_CONTINUOUS_CAPTURE); + return __is_supported(camera, MUSE_CAMERA_API_SUPPORT_CONTINUOUS_CAPTURE); } @@ -2882,10 +2864,7 @@ int camera_start_continuous_capture(camera_h camera, int count, int interval, ca camera_msg_param param; int value = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2912,10 +2891,7 @@ int camera_stop_continuous_capture(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_STOP_CONTINUOUS_CAPTURE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2929,25 +2905,25 @@ int camera_stop_continuous_capture(camera_h camera) bool camera_is_supported_face_detection(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_SUPPORT_FACE_DETECTION); + return __is_supported(camera, MUSE_CAMERA_API_SUPPORT_FACE_DETECTION); } bool camera_is_supported_zero_shutter_lag(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_SUPPORT_ZERO_SHUTTER_LAG); + return __is_supported(camera, MUSE_CAMERA_API_SUPPORT_ZERO_SHUTTER_LAG); } bool camera_is_supported_media_packet_preview_cb(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_SUPPORT_MEDIA_PACKET_PREVIEW_CB); + return __is_supported(camera, MUSE_CAMERA_API_SUPPORT_MEDIA_PACKET_PREVIEW_CB); } bool camera_is_supported_extra_preview(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_SUPPORT_EXTRA_PREVIEW); + return __is_supported(camera, MUSE_CAMERA_API_SUPPORT_EXTRA_PREVIEW); } @@ -2957,10 +2933,7 @@ int camera_get_device_count(camera_h camera, int *device_count) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_GET_DEVICE_COUNT; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -2980,10 +2953,7 @@ int camera_start_face_detection(camera_h camera, camera_face_detected_cb callbac camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_START_FACE_DETECTION; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3009,10 +2979,7 @@ int camera_stop_face_detection(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_STOP_FACE_DETECTION; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3063,10 +3030,7 @@ int camera_start_focusing(camera_h camera, bool continuous) camera_msg_param param; int is_continuous = (int)continuous; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3085,10 +3049,7 @@ int camera_cancel_focusing(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_CANCEL_FOCUSING; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter, remote_handle : %td", pc->remote_handle); @@ -3111,10 +3072,7 @@ int _camera_set_display(camera_h camera, mm_display_type_e type, void *display) muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY; muse_camera_display_info_s *dp_info = NULL; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (type > MM_DISPLAY_TYPE_OVERLAY_EXT) { CAM_LOG_ERROR("invalid type %d", type); @@ -3231,10 +3189,7 @@ int camera_set_preview_resolution(camera_h camera, int width, int height) camera_msg_param param; int value = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (pc->cb_info->is_evas_render) { ret = camera_get_state(camera, ¤t_state); @@ -3276,10 +3231,7 @@ int camera_set_capture_resolution(camera_h camera, int width, int height) camera_msg_param param; int value = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3302,10 +3254,7 @@ int camera_set_capture_format(camera_h camera, camera_pixel_format_e format) muse_camera_api_e api = MUSE_CAMERA_API_SET_CAPTURE_FORMAT; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - format %d", set_format); @@ -3327,10 +3276,7 @@ int camera_set_preview_format(camera_h camera, camera_pixel_format_e format) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_SET_PREVIEW_FORMAT; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - format %d", set_format); @@ -3380,10 +3326,7 @@ int camera_set_display_rotation(camera_h camera, camera_rotation_e rotation) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (pc->cb_info->is_evas_render) { ret = mm_display_interface_evas_set_rotation(pc->cb_info->dp_interface, rotation); @@ -3427,10 +3370,7 @@ int camera_set_display_flip(camera_h camera, camera_flip_e flip) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (pc->cb_info->is_evas_render) { ret = mm_display_interface_evas_set_flip(pc->cb_info->dp_interface, flip); @@ -3474,10 +3414,7 @@ int camera_set_display_visible(camera_h camera, bool visible) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (pc->cb_info->is_evas_render) { ret = mm_display_interface_evas_set_visible(pc->cb_info->dp_interface, visible); @@ -3521,10 +3458,7 @@ int camera_set_display_mode(camera_h camera, camera_display_mode_e mode) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (pc->cb_info->is_evas_render) { ret = mm_display_interface_evas_set_mode(pc->cb_info->dp_interface, mode); @@ -3568,10 +3502,7 @@ int camera_set_display_reuse_hint(camera_h camera, bool hint) camera_cli_s *pc = (camera_cli_s *)camera; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - hint %d", set_hint); @@ -3739,10 +3670,7 @@ int camera_unset_preview_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_PREVIEW_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3769,10 +3697,7 @@ int camera_set_media_packet_preview_cb(camera_h camera, camera_media_packet_prev camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_SET_MEDIA_PACKET_PREVIEW_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (camera_is_supported_media_packet_preview_cb(camera) == false) { CAM_LOG_ERROR("NOT SUPPORTED"); @@ -3809,10 +3734,7 @@ int camera_unset_media_packet_preview_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_MEDIA_PACKET_PREVIEW_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); if (camera_is_supported_media_packet_preview_cb(camera) == false) { CAM_LOG_ERROR("NOT SUPPORTED"); @@ -3874,10 +3796,7 @@ int camera_unset_state_changed_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_STATE_CHANGED_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3934,10 +3853,7 @@ int camera_unset_interrupted_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_INTERRUPTED_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -3994,10 +3910,7 @@ int camera_unset_interrupt_started_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_INTERRUPT_STARTED_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4054,10 +3967,7 @@ int camera_unset_focus_changed_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_FOCUS_CHANGED_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4114,10 +4024,7 @@ int camera_unset_error_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_ERROR_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4285,26 +4192,7 @@ int camera_attr_get_lens_orientation(camera_h camera, int *angle) int camera_attr_set_theater_mode(camera_h camera, camera_attr_theater_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_THEATER_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_THEATER_MODE, (int)mode); } @@ -4364,10 +4252,7 @@ int camera_attr_set_preview_fps(camera_h camera, camera_attr_fps_e fps) camera_msg_param param; int set_fps = (int)fps; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4388,10 +4273,7 @@ int camera_attr_set_image_quality(camera_h camera, int quality) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_IMAGE_QUALITY; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4485,10 +4367,7 @@ int camera_attr_set_encoded_preview_bitrate(camera_h camera, int bitrate) camera_msg_param param; int set_bitrate = bitrate; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4534,10 +4413,7 @@ int camera_attr_set_encoded_preview_gop_interval(camera_h camera, int interval) camera_msg_param param; int set_gop_interval = interval; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4558,10 +4434,7 @@ int camera_attr_set_zoom(camera_h camera, int zoom) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_ZOOM; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter, remote_handle : %td", pc->remote_handle); @@ -4577,24 +4450,7 @@ int camera_attr_set_zoom(camera_h camera, int zoom) int camera_attr_set_af_mode(camera_h camera, camera_attr_af_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_AF_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter, remote_handle : %td", pc->remote_handle); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_AF_MODE, (int)mode); } @@ -4606,10 +4462,7 @@ int camera_attr_set_af_area(camera_h camera, int x, int y) camera_msg_param param; int value = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - %d,%d", x, y); @@ -4630,10 +4483,7 @@ int camera_attr_clear_af_area(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_ATTR_CLEAR_AF_AREA; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4647,26 +4497,7 @@ int camera_attr_clear_af_area(camera_h camera) int camera_attr_set_exposure_mode(camera_h camera, camera_attr_exposure_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_EXPOSURE_MODE, (int)mode); } @@ -4677,10 +4508,7 @@ int camera_attr_set_exposure(camera_h camera, int value) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4702,10 +4530,7 @@ int camera_attr_set_iso(camera_h camera, camera_attr_iso_e iso) camera_msg_param param; int set_iso = (int)iso; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4726,10 +4551,7 @@ int camera_attr_set_brightness(camera_h camera, int level) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_BRIGHTNESS; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4750,10 +4572,7 @@ int camera_attr_set_contrast(camera_h camera, int level) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_CONTRAST; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4774,10 +4593,7 @@ int camera_attr_set_hue(camera_h camera, int level) muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HUE; camera_msg_param param; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4799,10 +4615,7 @@ int camera_attr_set_whitebalance(camera_h camera, camera_attr_whitebalance_e wb) camera_msg_param param; int set_whitebalance = (int)wb; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4824,10 +4637,7 @@ int camera_attr_set_effect(camera_h camera, camera_attr_effect_mode_e effect) camera_msg_param param; int set_effect = (int)effect; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4843,51 +4653,13 @@ int camera_attr_set_effect(camera_h camera, camera_attr_effect_mode_e effect) int camera_attr_set_scene_mode(camera_h camera, camera_attr_scene_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_SCENE_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_SCENE_MODE, (int)mode); } int camera_attr_enable_tag(camera_h camera, bool enable) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_TAG; - camera_msg_param param; - int set_enable = (int)enable; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_enable); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_enable(camera, MUSE_CAMERA_API_ATTR_ENABLE_TAG, (int)enable); } @@ -4923,10 +4695,7 @@ int camera_attr_set_tag_orientation(camera_h camera, camera_attr_tag_orientation camera_msg_param param; int set_orientation = (int)orientation; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4972,12 +4741,8 @@ int camera_attr_set_geotag(camera_h camera, double latitude, double longitude, d double set_geotag[3] = {latitude, longitude, altitude}; char *msg = NULL; int length = 0; - int send_ret = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -4987,31 +4752,8 @@ int camera_attr_set_geotag(camera_h camera, double latitude, double longitude, d msg = muse_core_msg_new(api, MUSE_TYPE_ARRAY, "set_geotag", length, (int *)set_geotag, NULL); - if (!msg) { - CAM_LOG_ERROR("msg creation failed: api %d", api); - return CAMERA_ERROR_OUT_OF_MEMORY; - } - - if (pc->cb_info->is_server_connected) { - _camera_update_api_waiting(pc->cb_info, api, 1); - - g_mutex_lock(&pc->cb_info->fd_lock); - send_ret = muse_core_msg_send(pc->cb_info->fd, msg); - g_mutex_unlock(&pc->cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("message send failed"); - ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - ret = _camera_client_wait_for_cb_return(api, pc->cb_info, CAMERA_CB_TIMEOUT); - } - - _camera_update_api_waiting(pc->cb_info, api, -1); - muse_core_msg_free(msg); - - CAM_LOG_INFO("ret : 0x%x", ret); + __send_message_get_return(pc->cb_info, api, msg, CAMERA_CB_TIMEOUT, &ret); return ret; } @@ -5023,10 +4765,7 @@ int camera_attr_remove_geotag(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_ATTR_REMOVE_GEOTAG; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -5040,26 +4779,7 @@ int camera_attr_remove_geotag(camera_h camera) int camera_attr_set_flash_mode(camera_h camera, camera_attr_flash_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_FLASH_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_FLASH_MODE, (int)mode); } @@ -5907,10 +5627,7 @@ int camera_attr_set_stream_rotation(camera_h camera, camera_rotation_e rotation) camera_msg_param param; int set_rotation = (int)rotation; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -5956,10 +5673,7 @@ int camera_attr_set_stream_flip(camera_h camera, camera_flip_e flip) camera_msg_param param; int set_flip = (int)flip; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -5998,26 +5712,7 @@ int camera_attr_get_stream_flip(camera_h camera, camera_flip_e *flip) int camera_attr_set_hdr_mode(camera_h camera, camera_attr_hdr_mode_e mode) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_MODE; - camera_msg_param param; - int set_mode = (int)mode; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_mode); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_mode(camera, MUSE_CAMERA_API_ATTR_SET_HDR_MODE, (int)mode); } @@ -6047,7 +5742,7 @@ int camera_attr_get_hdr_mode(camera_h camera, camera_attr_hdr_mode_e *mode) bool camera_attr_is_supported_hdr_capture(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_HDR_CAPTURE); + return __is_supported(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_HDR_CAPTURE); } @@ -6057,10 +5752,7 @@ int camera_attr_set_hdr_capture_progress_cb(camera_h camera, camera_attr_hdr_pro camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_CAPTURE_PROGRESS_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6097,10 +5789,7 @@ int camera_attr_unset_hdr_capture_progress_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_ATTR_UNSET_HDR_CAPTURE_PROGRESS_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6123,26 +5812,7 @@ int camera_attr_unset_hdr_capture_progress_cb(camera_h camera) int camera_attr_enable_anti_shake(camera_h camera, bool enable) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_ANTI_SHAKE; - camera_msg_param param; - int set_enable = (int)enable; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_enable); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_enable(camera, MUSE_CAMERA_API_ATTR_ENABLE_ANTI_SHAKE, (int)enable); } @@ -6172,32 +5842,13 @@ int camera_attr_is_enabled_anti_shake(camera_h camera, bool *enabled) bool camera_attr_is_supported_anti_shake(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_ANTI_SHAKE); + return __is_supported(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_ANTI_SHAKE); } int camera_attr_enable_video_stabilization(camera_h camera, bool enable) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_VIDEO_STABILIZATION; - camera_msg_param param; - int set_enable = (int)enable; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_enable); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_enable(camera, MUSE_CAMERA_API_ATTR_ENABLE_VIDEO_STABILIZATION, (int)enable); } @@ -6227,32 +5878,13 @@ int camera_attr_is_enabled_video_stabilization(camera_h camera, bool *enabled) bool camera_attr_is_supported_video_stabilization(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_VIDEO_STABILIZATION); + return __is_supported(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_VIDEO_STABILIZATION); } int camera_attr_enable_auto_contrast(camera_h camera, bool enable) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_AUTO_CONTRAST; - camera_msg_param param; - int set_enable = (int)enable; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, set_enable); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_enable(camera, MUSE_CAMERA_API_ATTR_ENABLE_AUTO_CONTRAST, (int)enable); } @@ -6282,7 +5914,7 @@ int camera_attr_is_enabled_auto_contrast(camera_h camera, bool *enabled) bool camera_attr_is_supported_auto_contrast(camera_h camera) { - return __is_supported_common(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_AUTO_CONTRAST); + return __is_supported(camera, MUSE_CAMERA_API_ATTR_IS_SUPPORTED_AUTO_CONTRAST); } @@ -6294,10 +5926,7 @@ int camera_attr_disable_shutter_sound(camera_h camera, bool disable) camera_msg_param param; int set_disable = (int)disable; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6319,10 +5948,7 @@ int camera_attr_set_pan(camera_h camera, camera_attr_ptz_move_type_e move_type, camera_msg_param param0; camera_msg_param param1; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6396,10 +6022,7 @@ int camera_attr_set_tilt(camera_h camera, camera_attr_ptz_move_type_e move_type, camera_msg_param param0; camera_msg_param param1; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6473,10 +6096,7 @@ int camera_attr_set_ptz_type(camera_h camera, camera_attr_ptz_type_e ptz_type) camera_msg_param param; int set_ptz_type = (int)ptz_type; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6522,12 +6142,8 @@ int camera_attr_set_display_roi_area(camera_h camera, int x, int y, int width, i int set_display_roi_area[4] = {x, y, width, height}; char *msg = NULL; int length = 0; - int send_ret = 0; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -6545,31 +6161,8 @@ int camera_attr_set_display_roi_area(camera_h camera, int x, int y, int width, i msg = muse_core_msg_new(api, MUSE_TYPE_ARRAY, "set_display_roi_area", length, (int *)set_display_roi_area, NULL); - if (!msg) { - CAM_LOG_ERROR("msg creation failed: api %d", api); - return CAMERA_ERROR_OUT_OF_MEMORY; - } - if (pc->cb_info->is_server_connected) { - _camera_update_api_waiting(pc->cb_info, api, 1); - - g_mutex_lock(&pc->cb_info->fd_lock); - send_ret = muse_core_msg_send(pc->cb_info->fd, msg); - g_mutex_unlock(&pc->cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("message send failed"); - ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - ret = _camera_client_wait_for_cb_return(api, pc->cb_info, CAMERA_CB_TIMEOUT); - } - - _camera_update_api_waiting(pc->cb_info, api, -1); - - muse_core_msg_free(msg); - - CAM_LOG_INFO("ret : 0x%x", ret); + __send_message_get_return(pc->cb_info, api, msg, CAMERA_CB_TIMEOUT, &ret); return ret; } @@ -6785,10 +6378,7 @@ int camera_media_bridge_set_bridge(camera_h camera, media_bridge_h bridge) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_SET_MEDIA_BRIDGE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); g_mutex_lock(&pc->cb_info->bridge_lock); @@ -6821,10 +6411,7 @@ int camera_media_bridge_unset_bridge(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_MEDIA_BRIDGE; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); g_mutex_lock(&pc->cb_info->bridge_lock); @@ -7087,10 +6674,7 @@ int camera_unset_extra_preview_cb(camera_h camera) camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_UNSET_EXTRA_PREVIEW_CB; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter"); @@ -7114,16 +6698,12 @@ int camera_unset_extra_preview_cb(camera_h camera) int camera_set_extra_preview_stream_format(camera_h camera, int stream_id, camera_pixel_format_e pixel_format, int width, int height, int fps) { int ret = CAMERA_ERROR_NONE; - int send_ret = 0; int stream_format[4] = {pixel_format, width, height, fps}; char *msg = NULL; camera_cli_s *pc = (camera_cli_s *)camera; muse_camera_api_e api = MUSE_CAMERA_API_SET_EXTRA_PREVIEW_STREAM_FORMAT; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - stream[%d],[%d,%dx%d,%d]", stream_id, pixel_format, width, height, fps); @@ -7132,31 +6712,8 @@ int camera_set_extra_preview_stream_format(camera_h camera, int stream_id, camer MUSE_TYPE_INT, "stream_id", stream_id, MUSE_TYPE_ARRAY, "stream_format", 4, stream_format, NULL); - if (!msg) { - CAM_LOG_ERROR("msg creation failed: api %d", api); - return CAMERA_ERROR_OUT_OF_MEMORY; - } - - if (pc->cb_info->is_server_connected) { - _camera_update_api_waiting(pc->cb_info, api, 1); - - g_mutex_lock(&pc->cb_info->fd_lock); - send_ret = muse_core_msg_send(pc->cb_info->fd, msg); - g_mutex_unlock(&pc->cb_info->fd_lock); - } - - if (send_ret < 0) { - CAM_LOG_ERROR("message send failed"); - ret = CAMERA_ERROR_INVALID_OPERATION; - } else { - ret = _camera_client_wait_for_cb_return(api, pc->cb_info, CAMERA_CB_TIMEOUT); - } - _camera_update_api_waiting(pc->cb_info, api, -1); - - muse_core_msg_free(msg); - - CAM_LOG_INFO("ret : 0x%x", ret); + __send_message_get_return(pc->cb_info, api, msg, CAMERA_CB_TIMEOUT, &ret); return ret; } @@ -7201,10 +6758,7 @@ int camera_attr_set_extra_preview_bitrate(camera_h camera, int stream_id, int bi camera_msg_param param0; camera_msg_param param1; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - stream[%d], bitrate[%d]", stream_id, bitrate); @@ -7257,10 +6811,7 @@ int camera_attr_set_extra_preview_gop_interval(camera_h camera, int stream_id, i camera_msg_param param0; camera_msg_param param1; - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle[%p]", pc); - return CAMERA_ERROR_INVALID_PARAMETER; - } + CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); CAM_LOG_INFO("Enter - stream[%d], GOP interval[%d]", stream_id, interval); diff --git a/src/camera_internal.c b/src/camera_internal.c index 9070f95..59e9c0b 100644 --- a/src/camera_internal.c +++ b/src/camera_internal.c @@ -31,6 +31,29 @@ //LCOV_EXCL_START +int __set_level(camera_h camera, muse_camera_api_e api, int level) +{ + int ret = CAMERA_ERROR_NONE; + camera_cli_s *pc = (camera_cli_s *)camera; + camera_msg_param param; + + if (!pc || !pc->cb_info) { + CAM_LOG_ERROR("NULL handle - api[%d]", api); + return CAMERA_ERROR_INVALID_PARAMETER; + } + + CAM_LOG_INFO("Enter - api[%d], level[%d]", api, level); + + CAMERA_MSG_PARAM_SET(param, INT, level); + + _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); + + CAM_LOG_INFO("ret : 0x%x", ret); + + return ret; +} + + int camera_start_evas_rendering(camera_h camera) { return _camera_start_evas_rendering(camera); @@ -204,25 +227,7 @@ void camera_create_preview_frame(MMCamcorderVideoStreamDataType *stream, int num //LCOV_EXCL_START int camera_attr_set_flash_brightness(camera_h camera, int level) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_FLASH_BRIGHTNESS; - camera_msg_param param; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle"); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, level); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_level(camera, MUSE_CAMERA_API_ATTR_SET_FLASH_BRIGHTNESS, level); } @@ -278,25 +283,7 @@ int camera_attr_get_flash_brightness_range(camera_h camera, int *min, int *max) int camera_attr_set_focus_level(camera_h camera, int level) { - int ret = CAMERA_ERROR_NONE; - camera_cli_s *pc = (camera_cli_s *)camera; - muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_FOCUS_LEVEL; - camera_msg_param param; - - if (!pc || !pc->cb_info) { - CAM_LOG_ERROR("NULL handle"); - return CAMERA_ERROR_INVALID_PARAMETER; - } - - CAM_LOG_INFO("Enter"); - - CAMERA_MSG_PARAM_SET(param, INT, level); - - _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - - CAM_LOG_INFO("ret : 0x%x", ret); - - return ret; + return __set_level(camera, MUSE_CAMERA_API_ATTR_SET_FOCUS_LEVEL, level); } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9bb2baa..bc0f09d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,24 +1,40 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(fw_test "${fw_name}-test") +SET(EXTRA_CFLAGS_HEADED "${EXTRA_CFLAGS}") +SET(EXTRA_CFLAGS_HEADLESS "${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS_INIT "${CMAKE_C_FLAGS} -fPIC -pie -Wall") +SET(COMMON_SRC_NAME "camera_test.c") -#INCLUDE_DIRECTORIES(../include) -#link_directories(${CMAKE_SOURCE_DIR}/../) +# camera_test_headed +SET(fw_test_headed "${fw_test}-headed") INCLUDE(FindPkgConfig) -pkg_check_modules(${fw_test} REQUIRED elementary evas ecore appcore-efl libtbm) -FOREACH(flag ${${fw_test}_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +PKG_CHECK_MODULES(${fw_test_headed} REQUIRED elementary evas ecore appcore-efl libtbm) +FOREACH(flag ${${fw_test_headed}_CFLAGS}) + SET(EXTRA_CFLAGS_HEADED "${EXTRA_CFLAGS_HEADED} ${flag}") MESSAGE(${flag}) ENDFOREACH() -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -pie -Wall") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_INIT} ${EXTRA_CFLAGS_HEADED} -fPIC -pie -Wall") +SET(EXEC_NAME_HEADED camera_test_headed) -aux_source_directory(. sources) -FOREACH(src ${sources}) - GET_FILENAME_COMPONENT(src_name ${src} NAME_WE) - MESSAGE("${src_name}") - ADD_EXECUTABLE(${src_name} ${src}) - TARGET_LINK_LIBRARIES(${src_name} ${fw_name} ${${fw_test}_LDFLAGS}) - INSTALL(TARGETS ${src_name} DESTINATION bin) +ADD_EXECUTABLE(${EXEC_NAME_HEADED} ${COMMON_SRC_NAME} ${EXEC_NAME_HEADED}.c) +TARGET_LINK_LIBRARIES(${EXEC_NAME_HEADED} ${fw_name} ${${fw_test_headed}_LDFLAGS}) +INSTALL(TARGETS ${EXEC_NAME_HEADED} DESTINATION bin) +# camera_test_headless +SET(fw_test_headless "${fw_test}-headless") + +INCLUDE(FindPkgConfig) +PKG_CHECK_MODULES(${fw_test_headless} REQUIRED libtbm) +FOREACH(flag ${${fw_test_headless}_CFLAGS}) + SET(EXTRA_CFLAGS_HEADLESS "${EXTRA_CFLAGS_HEADLESS} ${flag}") + MESSAGE(${flag}) ENDFOREACH() + +SET(EXEC_NAME_HEADLESS camera_test_headless) + +ADD_EXECUTABLE(${EXEC_NAME_HEADLESS} ${COMMON_SRC_NAME} ${EXEC_NAME_HEADLESS}.c) +TARGET_LINK_LIBRARIES(${EXEC_NAME_HEADLESS} ${fw_name} ${${fw_test_headless}_LDFLAGS}) +INSTALL(TARGETS ${EXEC_NAME_HEADLESS} DESTINATION bin) + diff --git a/test/camera_test.c b/test/camera_test.c index e4edee5..36a97fc 100644 --- a/test/camera_test.c +++ b/test/camera_test.c @@ -1,7 +1,7 @@ /* * camera_test * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Jeongmo Yang * @@ -22,51 +22,15 @@ /*======================================================================================= | INCLUDE FILES | =======================================================================================*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "camera_test.h" /*----------------------------------------------------------------------- | GLOBAL VARIABLE DEFINITIONS: | -----------------------------------------------------------------------*/ #define EXPORT_API __attribute__((__visibility__("default"))) -#ifdef PACKAGE -#undef PACKAGE -#endif -#define PACKAGE "camera_test" - - -static int app_create(void *data); -static int app_terminate(void *data); - -struct _appdata { - Evas_Object *win; - Evas_Object *eo; - Evas_Object *bg; - Evas_Object *rect; -}; -typedef struct _appdata appdata; - -static struct appcore_ops ops = { - .create = app_create, - .terminate = app_terminate, -}; - -static appdata ad; -static GIOChannel *stdin_channel; +static cam_handle_t *hcamcorder; static camera_device_e camera_device; -static GTimer *timer; static int g_camera_device_state_changed_cb_id; static int g_camera_device_connection_changed_cb_id; static int g_camera_preview_cb_dump; @@ -93,101 +57,9 @@ static media_bridge_h bridge; | IMPORTED FUNCTION DECLARATIONS: | -----------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------- -| LOCAL #defines: | ------------------------------------------------------------------------*/ -#define DEFAULT_FILE_PATH "/home/owner/media" -#define PREVIEW_CB_DUMP_FILE_NAME "preview.data" -#define EXTRA_PREVIEW_CB_DUMP_FILE_NAME "extra_preview.data" -#define MP_PREVIEW_CB_DUMP_FILE_NAME "mp_preview.data" -#define MAX_FILE_NAME_LENGTH 256 -#define MAX_FILE_PATH_LENGTH (MAX_FILE_NAME_LENGTH - 20) - -#define CHECK_MM_ERROR(expr) \ - do {\ - int ret = 0; \ - ret = expr; \ - if (ret != 0) {\ - g_print("[%s:%d] error code : %x \n", __func__, __LINE__, ret); \ - return; \ - } \ - } while (0) - - -#ifndef SAFE_FREE -#define SAFE_FREE(x) \ - if (x) {\ - g_free(x);\ - x = NULL;\ - } -#endif - -#define SENSOR_WHITEBALANCE_NUM 10 -#define SENSOR_COLOR_TONE_NUM 31 -#define SENSOR_FLIP_NUM 4 -#define SENSOR_PROGRAM_MODE_NUM 15 -#define SENSOR_FOCUS_NUM 6 -#define SENSOR_INPUT_ROTATION 4 -#define SENSOR_AF_SCAN_NUM 4 -#define SENSOR_ISO_NUM 8 -#define SENSOR_EXPOSURE_NUM 9 -#define SENSOR_IMAGE_FORMAT 20 - - -/*----------------------------------------------------------------------- - | LOCAL CONSTANT DEFINITIONS: | - -----------------------------------------------------------------------*/ -enum { - MODE_VIDEO_CAPTURE, /* recording and image capture mode */ - MODE_AUDIO, /* audio recording*/ - MODE_NUM, -}; - -enum { - MENU_STATE_INIT, - MENU_STATE_MAIN, - MENU_STATE_MAIN_SETTING, - MENU_STATE_DEVICE_STATE, - MENU_STATE_DEVICE_MANAGER, - MENU_STATE_NUM, -}; - -/*----------------------------------------------------------------------- - | LOCAL DATA TYPE DEFINITIONS: | - -----------------------------------------------------------------------*/ -typedef struct _cam_handle { - camera_h camera; - int type; - int is_multishot; /* flag for multishot mode */ - int stillshot_count; /* stillshot count */ - int multishot_count; /* multishot count */ - char file_path[MAX_FILE_PATH_LENGTH]; /* file path for captured data */ - int menu_state; - unsigned long long elapsed_time; -} cam_handle_t; - -typedef struct { - int width[100]; - int height[100]; - int count; -} resolution_stack; - -typedef struct { - camera_attr_exposure_mode_e mode; - int count; -} exposure_stack; - -typedef struct { - camera_attr_iso_e mode; - int count; -} iso_stack; - - /*--------------------------------------------------------------------------- | LOCAL VARIABLE DEFINITIONS: | ---------------------------------------------------------------------------*/ -static cam_handle_t *hcamcorder; static camera_device_manager_h g_device_manager; const char *wb[SENSOR_WHITEBALANCE_NUM] = { @@ -407,8 +279,6 @@ const char *facing_direction[] = { /*--------------------------------------------------------------------------- | LOCAL FUNCTION PROTOTYPES: | ---------------------------------------------------------------------------*/ -static void print_menu(); -static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data); static gboolean mode_change(gchar buf); int camcordertest_set_attr_int(const char* attr_subcategory, int value); @@ -422,7 +292,7 @@ static void __release_media_bridge() } } -static inline void flush_stdin() +void flush_stdin() { int ch; while ((ch = getchar()) != EOF && ch != '\n'); @@ -737,26 +607,7 @@ _MEDIA_PACKET_PREVIEW_CB_OUT: media_packet_unref(pkt); } -static bool preview_resolution_cb(int width, int height, void *user_data) -{ - resolution_stack *data = (resolution_stack *)user_data; - - if (data == NULL) { - g_print("NULL data\n"); - return false; - } - - data->width[data->count] = width; - data->height[data->count] = height; - - g_print("\t%d. %dx%d\n", data->count, width, height); - - data->count++; - - return true; -} - -static bool capture_resolution_test_cb(int width, int height, void *user_data) +static bool _resolution_cb(int width, int height, void *user_data) { resolution_stack *data = (resolution_stack *)user_data; @@ -902,7 +753,7 @@ static void capture_completed_cb(void *user_data) camera_start_preview(hcamcorder->camera); } -static void print_menu() +void print_menu() { switch (hcamcorder->menu_state) { case MENU_STATE_INIT: @@ -1153,7 +1004,7 @@ static void setting_menu(gchar buf) resolution_list.count = 0; camera_foreach_supported_preview_resolution(hcamcorder->camera, - preview_resolution_cb, &resolution_list); + _resolution_cb, &resolution_list); g_print("\tCommand >> "); @@ -1176,11 +1027,11 @@ static void setting_menu(gchar buf) g_print("\tFAIL\n"); break; case '1': /* Setting > Capture Resolution setting */ - g_print("\t* Select the preview resolution!\n"); + g_print("\t* Select the capture resolution!\n"); resolution_list.count = 0; camera_foreach_supported_capture_resolution(hcamcorder->camera, - capture_resolution_test_cb, &resolution_list); + _resolution_cb, &resolution_list); g_print("\tCommand > "); @@ -1843,7 +1694,7 @@ static void device_manager_menu(gchar buf) * @remark * @see */ -static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data) +gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data) { gchar *buf = NULL; gsize read_size; @@ -1893,16 +1744,18 @@ static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer return TRUE; } -static gboolean init_handle() + +cam_handle_t *init_handle() { + hcamcorder = (cam_handle_t *)g_malloc0(sizeof(cam_handle_t)); + hcamcorder->is_multishot = FALSE; hcamcorder->stillshot_count = 0; hcamcorder->multishot_count = 0; snprintf(hcamcorder->file_path, MAX_FILE_PATH_LENGTH, DEFAULT_FILE_PATH); hcamcorder->menu_state = MENU_STATE_INIT; - hcamcorder->elapsed_time = 0; - return TRUE; + return hcamcorder; } @@ -1919,8 +1772,6 @@ static gboolean mode_change(gchar buf) { int err = 0; int camera_type = 0; - int display_type = 0; - bool check = FALSE; switch (buf) { case '1': @@ -1964,7 +1815,7 @@ static gboolean mode_change(gchar buf) return TRUE; case 'q': g_print("\t Quit Camcorder Testsuite!!\n"); - elm_exit(); + quit_test(); return FALSE; default: g_print("\t Invalid media type(%c)\n", buf); @@ -1975,47 +1826,17 @@ static gboolean mode_change(gchar buf) gettimeofday(&previous_time, NULL); - g_timer_reset(timer); - if (camera_type) err = camera_create_network(camera_device, &hcamcorder->camera); else err = camera_create(camera_device, &hcamcorder->camera); - g_print("[camera_create() : %12.6lfs]\n", g_timer_elapsed(timer, NULL)); - if (err != 0) { g_print("\n\tmmcamcorder_create = 0x%x\n", err); return FALSE; } - while (!check) { - g_print("\n\tEnter the Display Type [1:Overlay, 2:Evas, 3:None] : "); - err = scanf("%d", &display_type); - flush_stdin(); - if (err == EOF) { - g_print("\t!!!read input error!!!\n"); - continue; - } - - switch (display_type) { - case 1: - camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(ad.win)); - check = TRUE; - break; - case 2: - camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_EVAS, GET_DISPLAY(ad.eo)); - check = TRUE; - break; - case 3: - camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_NONE, NULL); - check = TRUE; - break; - default: - g_print("\t Invalid display type(%d)\n", display_type); - break; - } - } + set_display(hcamcorder); camera_set_error_cb(hcamcorder->camera, _camera_error_cb, NULL); camera_set_state_changed_cb(hcamcorder->camera, _camera_state_changed_cb, NULL); @@ -2037,132 +1858,4 @@ static gboolean mode_change(gchar buf) return TRUE; } - -static int app_create(void *data) -{ - appdata *app_data = data; - int w = 0; - int h = 0; - Evas_Object *win = NULL; - Evas_Object *eo = NULL; - Evas_Object *bg = NULL; - Evas_Object *rect = NULL; - - if (app_data == NULL) { - g_print("\t\nappdata is NULL\n"); - return 0; - } - - /* use gl backend */ - elm_config_accel_preference_set("opengl"); - - win = elm_win_add(NULL, "camera_test", ELM_WIN_BASIC); - if (win) { - elm_win_title_set(win, "camera_test"); - elm_win_borderless_set(win, EINA_TRUE); - elm_win_screen_size_get(win, NULL, NULL, &w, &h); - g_print("\n\tscreen size %dx%d\n\n", w, h); - evas_object_resize(win, w, h); - elm_win_autodel_set(win, EINA_TRUE); - elm_win_alpha_set(win, EINA_TRUE); - } else { - g_print("\n\tfailed to get window\n\n"); - return 1; - } - - bg = elm_bg_add(win); - if (bg) { - elm_win_resize_object_add(win, bg); - evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(bg); - } else { - g_print("\n\tfailed to get elm bg\n\n"); - return 1; - } - - rect = evas_object_rectangle_add(evas_object_evas_get(win)); - if (rect) { - evas_object_color_set(rect, 0, 0, 0, 0); - evas_object_render_op_set(rect, EVAS_RENDER_COPY); - } else { - g_print("\n\tfailed to get rectangle\n\n"); - return 1; - } - - elm_win_resize_object_add(win, rect); - evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(rect); - - /* Create evas image object for EVAS surface */ - eo = evas_object_image_add(evas_object_evas_get(win)); - evas_object_image_size_set(eo, w, h); - evas_object_image_fill_set(eo, 0, 0, w, h); - evas_object_resize(eo, w, h); - evas_object_show(eo); - - elm_win_activate(win); - evas_object_show(win); - - app_data->win = win; - app_data->eo = eo; - - timer = g_timer_new(); - g_timer_reset(timer); - - init_handle(); - - print_menu(); - - return 0; -} - -static int app_terminate(void *data) -{ - appdata *app_data = data; - - if (app_data == NULL) { - g_print("\n\tappdata is NULL\n"); - return 0; - } - - if (timer) { - g_timer_stop(timer); - g_timer_destroy(timer); - timer = NULL; - } - - return 0; -} - - -/** - * This function is the example main function for mmcamcorder API. - * - * @param - * - * @return This function returns 0. - * @remark - * @see other functions - */ -int main(int argc, char **argv) -{ - int bret; - - hcamcorder = (cam_handle_t *) g_malloc0(sizeof(cam_handle_t)); - - stdin_channel = g_io_channel_unix_new(fileno(stdin));/* read from stdin */ - g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)cmd_input, NULL); - - memset(&ad, 0x0, sizeof(appdata)); - ops.data = &ad; - - bret = appcore_efl_main(PACKAGE, &argc, &argv, &ops); - - g_print("\n\treturn appcore_efl : %d\n\n", bret); - - g_free(hcamcorder); - g_io_channel_unref(stdin_channel); - - return bret; -} /*EOF*/ diff --git a/test/camera_test.h b/test/camera_test.h new file mode 100644 index 0000000..4e5941d --- /dev/null +++ b/test/camera_test.h @@ -0,0 +1,155 @@ +/* + * camera_test + * + * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jeongmo Yang + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License f(r the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef __CAMERA_TEST_H__ +#define __CAMERA_TEST_H__ + +/*======================================================================================= +| INCLUDE FILES | +=======================================================================================*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*----------------------------------------------------------------------- +| GLOBAL VARIABLE DEFINITIONS: | +-----------------------------------------------------------------------*/ +#define EXPORT_API __attribute__((__visibility__("default"))) + +/*----------------------------------------------------------------------- +| GLOBAL CONSTANT DEFINITIONS: | +-----------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------- +| IMPORTED VARIABLE DECLARATIONS: | +-----------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------- +| IMPORTED FUNCTION DECLARATIONS: | +-----------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------- +| LOCAL #defines: | +-----------------------------------------------------------------------*/ +#define DEFAULT_FILE_PATH "/home/owner/media" +#define PREVIEW_CB_DUMP_FILE_NAME "preview.data" +#define EXTRA_PREVIEW_CB_DUMP_FILE_NAME "extra_preview.data" +#define MP_PREVIEW_CB_DUMP_FILE_NAME "mp_preview.data" +#define MAX_FILE_NAME_LENGTH 256 +#define MAX_FILE_PATH_LENGTH (MAX_FILE_NAME_LENGTH - 20) + +#define CHECK_MM_ERROR(expr) \ + do {\ + int ret = 0; \ + ret = expr; \ + if (ret != 0) {\ + g_print("[%s:%d] error code : %x \n", __func__, __LINE__, ret); \ + return; \ + } \ + } while (0) + + +#ifndef SAFE_FREE +#define SAFE_FREE(x) \ + if (x) {\ + g_free(x);\ + x = NULL;\ + } +#endif + +#define SENSOR_WHITEBALANCE_NUM 10 +#define SENSOR_COLOR_TONE_NUM 31 +#define SENSOR_FLIP_NUM 4 +#define SENSOR_PROGRAM_MODE_NUM 15 +#define SENSOR_FOCUS_NUM 6 +#define SENSOR_INPUT_ROTATION 4 +#define SENSOR_AF_SCAN_NUM 4 +#define SENSOR_ISO_NUM 8 +#define SENSOR_EXPOSURE_NUM 9 +#define SENSOR_IMAGE_FORMAT 20 + + +/*----------------------------------------------------------------------- + | LOCAL CONSTANT DEFINITIONS: | + -----------------------------------------------------------------------*/ +enum { + MODE_VIDEO_CAPTURE, /* recording and image capture mode */ + MODE_AUDIO, /* audio recording*/ + MODE_NUM, +}; + +enum { + MENU_STATE_INIT, + MENU_STATE_MAIN, + MENU_STATE_MAIN_SETTING, + MENU_STATE_DEVICE_STATE, + MENU_STATE_DEVICE_MANAGER, + MENU_STATE_NUM, +}; + +/*----------------------------------------------------------------------- + | LOCAL DATA TYPE DEFINITIONS: | + -----------------------------------------------------------------------*/ +typedef struct _cam_handle { + camera_h camera; + int type; + int is_multishot; /* flag for multishot mode */ + int stillshot_count; /* stillshot count */ + int multishot_count; /* multishot count */ + char file_path[MAX_FILE_PATH_LENGTH]; /* file path for captured data */ + int menu_state; +} cam_handle_t; + +typedef struct { + int width[100]; + int height[100]; + int count; +} resolution_stack; + +typedef struct { + camera_attr_exposure_mode_e mode; + int count; +} exposure_stack; + +typedef struct { + camera_attr_iso_e mode; + int count; +} iso_stack; + + +void set_display(cam_handle_t *hcamcorder); +void quit_test(); +gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data); +cam_handle_t *init_handle(); +void print_menu(); +void flush_stdin(); + +#endif /* __CAMERA_TEST_H__ */ diff --git a/test/camera_test_headed.c b/test/camera_test_headed.c new file mode 100644 index 0000000..a88255a --- /dev/null +++ b/test/camera_test_headed.c @@ -0,0 +1,192 @@ +/* + * camera_test_headed + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jeongmo Yang + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License f(r the specific language governing permissions and + * limitations under the License. + * + */ +#include +#include +#include +#include "camera_test.h" + +static int app_create(void *data); +static int app_terminate(void *data); + +struct _appdata { + Evas_Object *win; + Evas_Object *eo; + Evas_Object *bg; + Evas_Object *rect; +}; +typedef struct _appdata appdata; + +static struct appcore_ops ops = { + .create = app_create, + .terminate = app_terminate, +}; + +static appdata ad; + + +void set_display(cam_handle_t *hcamcorder) +{ + int err = 0; + int display_type = 0; + bool check = FALSE; + + while (!check) { + g_print("\n\tEnter the Display Type [1:Overlay, 2:Evas, 3:None] : "); + err = scanf("%d", &display_type); + flush_stdin(); + if (err == EOF) { + g_print("\t!!!read input error!!!\n"); + continue; + } + + switch (display_type) { + case 1: + camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(ad.win)); + check = TRUE; + break; + case 2: + camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_EVAS, GET_DISPLAY(ad.eo)); + check = TRUE; + break; + case 3: + camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_NONE, NULL); + check = TRUE; + break; + default: + g_print("\t Invalid display type(%d)\n", display_type); + break; + } + } +} + + +void quit_test(void) +{ + elm_exit(); +} + + +static int app_create(void *data) +{ + appdata *app_data = data; + int w = 0; + int h = 0; + Evas_Object *win = NULL; + Evas_Object *eo = NULL; + Evas_Object *bg = NULL; + Evas_Object *rect = NULL; + + if (app_data == NULL) { + g_print("\t\nappdata is NULL\n"); + return 0; + } + + /* use gl backend */ + elm_config_accel_preference_set("opengl"); + + win = elm_win_add(NULL, "camera_test", ELM_WIN_BASIC); + if (win) { + elm_win_title_set(win, "camera_test"); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_screen_size_get(win, NULL, NULL, &w, &h); + g_print("\n\tscreen size %dx%d\n\n", w, h); + evas_object_resize(win, w, h); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_alpha_set(win, EINA_TRUE); + } else { + g_print("\n\tfailed to get window\n\n"); + return 1; + } + + bg = elm_bg_add(win); + if (bg) { + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + } else { + g_print("\n\tfailed to get elm bg\n\n"); + return 1; + } + + rect = evas_object_rectangle_add(evas_object_evas_get(win)); + if (rect) { + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_render_op_set(rect, EVAS_RENDER_COPY); + } else { + g_print("\n\tfailed to get rectangle\n\n"); + return 1; + } + + elm_win_resize_object_add(win, rect); + evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(rect); + + /* Create evas image object for EVAS surface */ + eo = evas_object_image_add(evas_object_evas_get(win)); + evas_object_image_size_set(eo, w, h); + evas_object_image_fill_set(eo, 0, 0, w, h); + evas_object_resize(eo, w, h); + evas_object_show(eo); + + elm_win_activate(win); + evas_object_show(win); + + app_data->win = win; + app_data->eo = eo; + + print_menu(); + + return 0; +} + +static int app_terminate(void *data) +{ + appdata *app_data = data; + + if (app_data == NULL) { + g_print("\n\tappdata is NULL\n"); + return 0; + } + + return 0; +} + + +int main(int argc, char **argv) +{ + int bret; + cam_handle_t *handle = init_handle(); + GIOChannel *stdin_channel = g_io_channel_unix_new(fileno(stdin));/* read from stdin */ + + g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)cmd_input, NULL); + + memset(&ad, 0x0, sizeof(appdata)); + ops.data = &ad; + + bret = appcore_efl_main("camera_test_headed", &argc, &argv, &ops); + + g_print("\n\treturn appcore_efl : %d\n\n", bret); + + g_free(handle); + g_io_channel_unref(stdin_channel); + + return bret; +} diff --git a/test/camera_test_headless.c b/test/camera_test_headless.c new file mode 100644 index 0000000..aa74fbd --- /dev/null +++ b/test/camera_test_headless.c @@ -0,0 +1,63 @@ +/* + * camera_test_headless + * + * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jeongmo Yang + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License f(r the specific language governing permissions and + * limitations under the License. + * + */ +#include "camera_test.h" + + +static GMainLoop *g_mainloop_camera_test; + + +void set_display(cam_handle_t *hcamcorder) +{ + g_print("Display type : NULL for headless\n"); + camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_NONE, NULL); +} + + +void quit_test(void) +{ + g_main_loop_quit(g_mainloop_camera_test); +} + + +int main(int argc, char **argv) +{ + cam_handle_t *handle = init_handle(); + GIOChannel *stdin_channel = g_io_channel_unix_new(fileno(stdin));/* read from stdin */ + + g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)cmd_input, NULL); + + init_handle(); + + print_menu(); + + g_mainloop_camera_test = g_main_loop_new(NULL, FALSE); + + g_main_loop_run(g_mainloop_camera_test); + + g_print("\n\treturn main loop\n\n"); + + g_main_loop_unref(g_mainloop_camera_test); + + g_free(handle); + g_io_channel_unref(stdin_channel); + + return 0; +} diff --git a/test_headless/CMakeLists.txt b/test_headless/CMakeLists.txt deleted file mode 100644 index 4d0cc52..0000000 --- a/test_headless/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -SET(fw_test "${fw_name}-test-headless") - -#INCLUDE_DIRECTORIES(../include) -#link_directories(${CMAKE_SOURCE_DIR}/../) - -INCLUDE(FindPkgConfig) -pkg_check_modules(${fw_test} REQUIRED libtbm) -FOREACH(flag ${${fw_test}_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") - MESSAGE(${flag}) -ENDFOREACH() - -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -pie -Wall") - -aux_source_directory(. sources) -FOREACH(src ${sources}) - GET_FILENAME_COMPONENT(src_name ${src} NAME_WE) - MESSAGE("${src_name}") - ADD_EXECUTABLE(${src_name} ${src}) - TARGET_LINK_LIBRARIES(${src_name} ${fw_name} ${${fw_test}_LDFLAGS}) - INSTALL(TARGETS ${src_name} DESTINATION bin) - -ENDFOREACH() diff --git a/test_headless/camera_test_headless.c b/test_headless/camera_test_headless.c deleted file mode 100644 index 9cdade1..0000000 --- a/test_headless/camera_test_headless.c +++ /dev/null @@ -1,2035 +0,0 @@ -/* - * camera_test_headless - * - * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Jeongmo Yang - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License f(r the specific language governing permissions and - * limitations under the License. - * - */ - -/*======================================================================================= -| INCLUDE FILES | -=======================================================================================*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*----------------------------------------------------------------------- -| GLOBAL VARIABLE DEFINITIONS: | ------------------------------------------------------------------------*/ -#define EXPORT_API __attribute__((__visibility__("default"))) - -#ifdef PACKAGE -#undef PACKAGE -#endif -#define PACKAGE "camera_test" - -static GMainLoop *g_mainloop_camera_test = NULL; -static GIOChannel *stdin_channel; -static camera_device_e camera_device; -static GTimer *timer; -static int g_camera_device_state_changed_cb_id; -static int g_camera_device_connection_changed_cb_id; -static int g_camera_preview_cb_dump; -static int g_camera_extra_preview_cb_dump; -static int g_camera_mp_preview_cb_dump; - -static struct timeval previous_time; -static struct timeval current_time; -static struct timeval result_time; - -static media_bridge_h bridge; - -/*----------------------------------------------------------------------- -| GLOBAL CONSTANT DEFINITIONS: | ------------------------------------------------------------------------*/ - - -/*----------------------------------------------------------------------- -| IMPORTED VARIABLE DECLARATIONS: | ------------------------------------------------------------------------*/ - - -/*----------------------------------------------------------------------- -| IMPORTED FUNCTION DECLARATIONS: | ------------------------------------------------------------------------*/ - - -/*----------------------------------------------------------------------- -| LOCAL #defines: | ------------------------------------------------------------------------*/ -#define DEFAULT_FILE_PATH "/home/owner/media" -#define PREVIEW_CB_DUMP_FILE_NAME "preview.data" -#define EXTRA_PREVIEW_CB_DUMP_FILE_NAME "extra_preview.data" -#define MP_PREVIEW_CB_DUMP_FILE_NAME "mp_preview.data" -#define MAX_FILE_NAME_LENGTH 256 -#define MAX_FILE_PATH_LENGTH (MAX_FILE_NAME_LENGTH - 20) - -#define CHECK_MM_ERROR(expr) \ - do {\ - int ret = 0; \ - ret = expr; \ - if (ret != 0) {\ - g_print("[%s:%d] error code : %x \n", __func__, __LINE__, ret); \ - return; \ - } \ - } while (0) - - -#ifndef SAFE_FREE -#define SAFE_FREE(x) \ - if (x) {\ - g_free(x);\ - x = NULL;\ - } -#endif - -#define SENSOR_WHITEBALANCE_NUM 10 -#define SENSOR_COLOR_TONE_NUM 31 -#define SENSOR_FLIP_NUM 4 -#define SENSOR_PROGRAM_MODE_NUM 15 -#define SENSOR_FOCUS_NUM 6 -#define SENSOR_INPUT_ROTATION 4 -#define SENSOR_AF_SCAN_NUM 4 -#define SENSOR_ISO_NUM 8 -#define SENSOR_EXPOSURE_NUM 9 -#define SENSOR_IMAGE_FORMAT 20 - - -/*----------------------------------------------------------------------- - | LOCAL CONSTANT DEFINITIONS: | - -----------------------------------------------------------------------*/ -enum { - MODE_VIDEO_CAPTURE, /* recording and image capture mode */ - MODE_AUDIO, /* audio recording*/ - MODE_NUM, -}; - -enum { - MENU_STATE_INIT, - MENU_STATE_MAIN, - MENU_STATE_MAIN_SETTING, - MENU_STATE_DEVICE_STATE, - MENU_STATE_DEVICE_MANAGER, - MENU_STATE_NUM, -}; - -/*----------------------------------------------------------------------- - | LOCAL DATA TYPE DEFINITIONS: | - -----------------------------------------------------------------------*/ -typedef struct _cam_handle { - camera_h camera; - int type; - int is_multishot; /* flag for multishot mode */ - int stillshot_count; /* stillshot count */ - int multishot_count; /* multishot count */ - char file_path[MAX_FILE_PATH_LENGTH]; /* file path for captured data */ - int menu_state; - unsigned long long elapsed_time; -} cam_handle_t; - -typedef struct { - int width[100]; - int height[100]; - int count; -} resolution_stack; - -typedef struct { - camera_attr_exposure_mode_e mode; - int count; -} exposure_stack; - -typedef struct { - camera_attr_iso_e mode; - int count; -} iso_stack; - - -/*--------------------------------------------------------------------------- - | LOCAL VARIABLE DEFINITIONS: | - ---------------------------------------------------------------------------*/ -static cam_handle_t *hcamcorder; -static camera_device_manager_h g_device_manager; - -const char *wb[SENSOR_WHITEBALANCE_NUM] = { - "None", - "Auto", - "Daylight", - "Cloudy", - "Fluoroscent", - "Incandescent", - "Shade", - "Horizon", - "Flash", - "Custom", -}; - -const char *ct[SENSOR_COLOR_TONE_NUM] = { - "NONE", - "MONO", - "SEPIA", - "NEGATIVE", - "BLUE", - "GREEN", - "AQUA", - "VIOLET", - "ORANGE", - "GRAY", - "RED", - "ANTIQUE", - "WARM", - "PINK", - "YELLOW", - "PURPLE", - "EMBOSS", - "OUTLINE", - "SOLARIZATION", - "SKETCH", - "WASHED", - "VINTAGE_WARM", - "VINTAGE_COLD", - "POSTERIZATION", - "CARTOON", - "SELECTVE_COLOR_RED", - "SELECTVE_COLOR_GREEN", - "SELECTVE_COLOR_BLUE", - "SELECTVE_COLOR_YELLOW", - "SELECTVE_COLOR_RED_YELLOW", - "GRAPHICS" -}; - -const char *sensor_flip[SENSOR_FLIP_NUM] = { - "NONE", - "HORIZONTAL", - "VERTICAL", - "BOTH" -}; - -const char *program_mode[SENSOR_PROGRAM_MODE_NUM] = { - "NORMAL", - "PORTRAIT", - "LANDSCAPE", - "SPORTS", - "PARTY_N_INDOOR", - "BEACH_N_INDOOR", - "SUNSET", - "DUSK_N_DAWN", - "FALL_COLOR", - "NIGHT_SCENE", - "FIREWORK", - "TEXT", - "SHOW_WINDOW", - "CANDLE_LIGHT", - "BACKLIGHT", -}; - -const char *focus_mode[SENSOR_FOCUS_NUM] = { - "None", - "Pan", - "Auto", - "Manual", - "Touch Auto", - "Continuous Auto", -}; - -const char *camera_rotation[SENSOR_INPUT_ROTATION] = { - "None", - "90", - "180", - "270", -}; - -const char *iso_mode[SENSOR_ISO_NUM] = { - "ISO Auto", - "ISO 50", - "ISO 100", - "ISO 200", - "ISO 400", - "ISO 800", - "ISO 1600", - "ISO 3200", -}; - -const char *exposure_mode[SENSOR_EXPOSURE_NUM] = { - "AE off", - "AE all mode", - "AE center mode", - "AE spot 1 mode", - "AE custom mode", -}; - -const char *image_fmt[SENSOR_IMAGE_FORMAT] = { - "NV12", - "NV12T", - "NV16", - "NV21", - "YUYV", - "UYVY", - "422P", - "I420", - "YV12", - "RGB565", - "RGB888", - "RGBA", - "ARGB", - "JPEG", - "ITLV(YUYV+JPEG, but should not be seen)", - "H264", - "INVZ", - "MJPEG", - "VP8", - "VP9" -}; - -const char *face_zoom_mode[] = { - "Face Zoom OFF", - "Face Zoom ON", -}; - -const char *display_mode[] = { - "Letter Box mode", - "Original Size mode", - "Full Screen mode", - "Cropped Full Screen mode", - "ROI mode", -}; - -const char *capture_sound[] = { - "Default", - "Extra 01", - "Extra 02", -}; - -const char *rotate_mode[] = { - "0", - "90", - "180", - "270", -}; - -const char* strobe_mode[] = { - "Strobe OFF", - "Strobe ON", - "Strobe Auto", - "Strobe RedEyeReduction", - "Strobe SlowSync", - "Strobe FrontCurtain", - "Strobe RearCurtain", - "Strobe Permanent", -}; - -const char *detection_mode[2] = { - "Face Detection OFF", - "Face Detection ON", -}; - -const char *wdr_mode[] = { - "WDR OFF", - "WDR ON", - "WDR AUTO", -}; - -const char *af_scan[SENSOR_AF_SCAN_NUM] = { - "None", - "Normal", - "Macro mode", - "Full mode", -}; - -const char *hdr_mode[] = { - "HDR OFF", - "HDR ON", - "HDR ON and Original", -}; - -const char *ahs_mode[] = { - "Anti-handshake OFF", - "Anti-handshake ON", - "Anti-handshake AUTO", - "Anti-handshake MOVIE", -}; - -const char *vs_mode[] = { - "Video-stabilization OFF", - "Video-stabilization ON", -}; - -const char *visible_mode[] = { - "Display OFF", - "Display ON", -}; - -const char *facing_direction[] = { - "REAR", - "FRONT", -}; - - -/*--------------------------------------------------------------------------- - | LOCAL FUNCTION PROTOTYPES: | - ---------------------------------------------------------------------------*/ -static void print_menu(); -static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data); -static gboolean mode_change(gchar buf); -int camcordertest_set_attr_int(const char* attr_subcategory, int value); - - -static void __release_media_bridge() -{ - if (bridge) { - media_bridge_unset_source(bridge); /* not mandatory, it will be done in media_bridge_destroy() */ - media_bridge_destroy(bridge); - bridge = NULL; - } -} - -static inline void flush_stdin() -{ - int ch; - while ((ch = getchar()) != EOF && ch != '\n'); -} - -static gboolean _release_idle_event_callback(void *data) -{ - g_print("destroy camera handle\n\n"); - - camera_destroy(hcamcorder->camera); - hcamcorder->camera = NULL; - hcamcorder->menu_state = MENU_STATE_INIT; - - print_menu(); - - return 0; -} - -static void _camera_error_cb(int error, camera_state_e current_state, void *user_data) -{ - g_print("\n\n\tERROR [0x%x], current state %d\n", error, current_state); - - switch (error) { - case CAMERA_ERROR_RESOURCE_CONFLICT: - g_print("\t\t[CAMERA_ERROR_RESOURCE_CONFLICT]\n\n"); - break; - case CAMERA_ERROR_SECURITY_RESTRICTED: - g_print("\t\t[CAMERA_ERROR_SECURITY_RESTRICTED]\n\n"); - break; - case CAMERA_ERROR_SERVICE_DISCONNECTED: - g_print("\t\t[CAMERA_ERROR_SERVICE_DISCONNECTED]\n\n"); - g_idle_add_full(G_PRIORITY_DEFAULT, - (GSourceFunc)_release_idle_event_callback, - NULL, NULL); - break; - default: - break; - } -} - -static void _camera_state_changed_cb(camera_state_e previous, camera_state_e current, bool by_policy, void *user_data) -{ - g_print("\n\tcamera state changed %d -> %d\n", previous, current); -} - -static void _camera_device_state_changed_cb(camera_device_e device, camera_device_state_e state, void *user_data) -{ - g_print("\n\tcamera device[%d] state changed to %d\n", device, state); -} - -static void _camera_device_connection_changed_cb(camera_device_type_e type, camera_device_e device, - const char *name, const char *id, int extra_preview_stream_num, bool is_connected, void *user_data) -{ - g_print("\n\tcamera device changed[is_connected:%d][Type:%d,index:%d,name:%s,id:%s,exstream:%d]\n", - is_connected, type, device, name, id, extra_preview_stream_num); -} - -static bool _camera_supported_device_cb(camera_device_type_e type, camera_device_e device, - const char *name, const char *id, int extra_preview_stream_num, void *user_data) -{ - g_print("\n\tcamera supported device[Type:%d,index:%d,name:%s,id:%s,exstream:%d]\n", - type, device, name, id, extra_preview_stream_num); - - return true; -} - -static void _camera_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *user_data) -{ - g_print("\n\tcamera interrupted callback called[state %d -> %d, policy %d]\n", - previous, current, policy); -} - -static void _camera_interrupt_started_cb(camera_policy_e policy, camera_state_e state, void *user_data) -{ - g_print("\n\tcamera interrupt started callback called[state %d, policy %d]\n", state, policy); -} - -static void _dump_preview_data(camera_preview_data_s *frame, const char *file_name) -{ - char dump_path[MAX_FILE_NAME_LENGTH] = {'\0',}; - FILE *fp = NULL; - - if (!frame) { - g_print("\n[DUMP_PREVIEW_DATA] NULL frame\n"); - return; - } - - snprintf(dump_path, MAX_FILE_NAME_LENGTH, "%s/%s", DEFAULT_FILE_PATH, file_name); - - fp = fopen(dump_path, "a"); - if (fp == NULL) { - g_print("\n[DUMP_PREVIEW_DATA] file[%s] open failed\n", dump_path); - return; - } - - switch (frame->format) { - case CAMERA_PIXEL_FORMAT_RGBA: - /* fall through */ - case CAMERA_PIXEL_FORMAT_ARGB: - fwrite(frame->data.rgb_plane.data, 1, frame->data.rgb_plane.size, fp); - break; - case CAMERA_PIXEL_FORMAT_INVZ: - fwrite(frame->data.depth_plane.data, 1, frame->data.depth_plane.size, fp); - break; - case CAMERA_PIXEL_FORMAT_H264: - /* fall through */ - case CAMERA_PIXEL_FORMAT_MJPEG: - /* fall through */ - case CAMERA_PIXEL_FORMAT_VP8: - /* fall through */ - case CAMERA_PIXEL_FORMAT_VP9: - fwrite(frame->data.encoded_plane.data, 1, frame->data.encoded_plane.size, fp); - break; - default: - switch (frame->num_of_planes) { - case 1: - fwrite(frame->data.single_plane.yuv, 1, frame->data.single_plane.size, fp); - break; - case 2: - fwrite(frame->data.double_plane.y, 1, frame->data.double_plane.y_size, fp); - fwrite(frame->data.double_plane.uv, 1, frame->data.double_plane.uv_size, fp); - break; - case 3: - fwrite(frame->data.triple_plane.y, 1, frame->data.triple_plane.y_size, fp); - fwrite(frame->data.triple_plane.u, 1, frame->data.triple_plane.u_size, fp); - fwrite(frame->data.triple_plane.v, 1, frame->data.triple_plane.v_size, fp); - break; - default: - break; - } - break; - } - - g_print("[DUMP_PREVIEW_DATA] file[%s] write done\n", dump_path); - - fclose(fp); -} - -static void _camera_print_preview_info(camera_preview_data_s *frame) -{ - if (!frame) { - g_print("\n[PREVIEW_CB] NULL frame!\n"); - return; - } - - g_print("format[%d] res[%dx%d] num plane[%d] ", - frame->format, frame->width, frame->height, frame->num_of_planes); - - if (frame->num_of_planes == 1) { - g_print("size [%d]\n", - frame->data.single_plane.size); - } else if (frame->num_of_planes == 2) { - g_print("size Y[%d] UV[%d]\n", - frame->data.double_plane.y_size, - frame->data.double_plane.uv_size); - } else if (frame->num_of_planes == 3) { - g_print("size Y[%d] U[%d] V[%d]\n", - frame->data.triple_plane.y_size, - frame->data.triple_plane.u_size, - frame->data.triple_plane.v_size); - } -} - -static void _camera_preview_cb(camera_preview_data_s *frame, void *user_data) -{ - int ret = CAMERA_ERROR_NONE; - camera_h cam_handle = (camera_h)user_data; - camera_rotation_e rotation = CAMERA_ROTATION_NONE; - - if (!cam_handle || !frame) { - g_print("\n[PREVIEW_CB] NULL param! %p %p\n", cam_handle, frame); - return; - } - - ret = camera_attr_get_preview_frame_rotation(cam_handle, &rotation); - if (ret != CAMERA_ERROR_NONE) - g_print("[PREVIEW_CB] get preview frame rotation failed[0x%x]\n", ret); - - g_print("[PREVIEW_CB] preview[rotation:%d] callback - ", rotation); - - _camera_print_preview_info(frame); - - if (g_camera_preview_cb_dump) - _dump_preview_data(frame, PREVIEW_CB_DUMP_FILE_NAME); -} - -static void _camera_extra_preview_cb(camera_preview_data_s *frame, int stream_id, void *user_data) -{ - if (!frame) { - g_print("\n[PREVIEW_CB] NULL frame!\n"); - return; - } - - g_print("[EXTRA_PREVIEW_CB][stream_id:%d] preview callback - ", stream_id); - - _camera_print_preview_info(frame); - - if (g_camera_extra_preview_cb_dump) - _dump_preview_data(frame, EXTRA_PREVIEW_CB_DUMP_FILE_NAME); -} - -static void _dump_media_packet_data(media_packet_h pkt, const char *file_name) -{ - int ret = 0; - unsigned int i = 0; - bool has_surface = false; - FILE *fp = NULL; - char dump_path[MAX_FILE_NAME_LENGTH] = {'\0',}; - tbm_surface_h surface = NULL; - tbm_surface_info_s s_info; - void *data = NULL; - uint64_t data_size = 0; - - if (!pkt) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] NULL packet\n"); - return; - } - - snprintf(dump_path, MAX_FILE_NAME_LENGTH, "%s/%s", DEFAULT_FILE_PATH, file_name); - fp = fopen(dump_path, "a"); - if (fp == NULL) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] file[%s] open failed ====\n", dump_path); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - ret = media_packet_has_tbm_surface_buffer(pkt, &has_surface); - if (ret != MEDIA_PACKET_ERROR_NONE) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] has tbm surface failed[0x%x] ====\n", ret); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - if (has_surface) { - ret = media_packet_get_tbm_surface(pkt, &surface); - if (ret != MEDIA_PACKET_ERROR_NONE) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] get tbm surface failed[0x%x] ====\n", ret); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - ret = tbm_surface_get_info(surface, &s_info); - if (ret != TBM_SURFACE_ERROR_NONE) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] get tbm surface info failed[0x%x] ====\n", ret); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - g_print(" tbm surface [%dx%d], total size[%u]\n", - s_info.width, s_info.height, s_info.size); - - for (i = 0 ; i < s_info.num_planes ; i++) { - g_print(" plane[%d][%p] stride[%u] size[%u]\n", - i, s_info.planes[i].ptr, s_info.planes[i].stride, s_info.planes[i].size); - fwrite(s_info.planes[i].ptr, 1, s_info.planes[i].size, fp); - } - } else { - ret = media_packet_get_buffer_data_ptr(pkt, &data); - if (ret != MEDIA_PACKET_ERROR_NONE) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] get data ptr failed[0x%x] ====\n", ret); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - ret = media_packet_get_buffer_size(pkt, &data_size); - if (ret != MEDIA_PACKET_ERROR_NONE) { - g_print("\n[DUMP_MEDIA_PACKET_DATA] get data size failed[0x%x] ====\n", ret); - goto _DUMP_MEDIA_PACKET_DATA_OUT; - } - - g_print(" no tbm surface, data[%p], size[%"PRIu64"]\n", data, data_size); - - fwrite(data, 1, data_size, fp); - } - -_DUMP_MEDIA_PACKET_DATA_OUT: - if (fp) - fclose(fp); -} - -static void _camera_media_packet_preview_cb(media_packet_h pkt, void *user_data) -{ - int ret = 0; - int width = 0; - int height = 0; - media_format_h fmt = NULL; - media_format_mimetype_e type = MEDIA_FORMAT_I420; - - if (!pkt) { - g_print("\n[MP_PREVIEW_CB] NULL packet!\n"); - return; - } - - ret = media_packet_get_format(pkt, &fmt); - if (ret != MEDIA_PACKET_ERROR_NONE) { - g_print("\n[MP_PREVIEW_CB] get media format failed[0x%x]", ret); - goto _MEDIA_PACKET_PREVIEW_CB_OUT; - } - - ret = media_format_get_video_info(fmt, &type, &width, &height, NULL, NULL); - if (ret != MEDIA_FORMAT_ERROR_NONE) { - g_print("\n[MP_PREVIEW_CB] get video info failed[0x%x]", ret); - goto _MEDIA_PACKET_PREVIEW_CB_OUT; - } - - g_print("[MP_PREVIEW_CB] media_packet_preview_cb[mimetype:0x%x, %dx%d]\n", type, width, height); - - if (g_camera_mp_preview_cb_dump) - _dump_media_packet_data(pkt, MP_PREVIEW_CB_DUMP_FILE_NAME); - -_MEDIA_PACKET_PREVIEW_CB_OUT: - if (fmt) { - media_format_unref(fmt); - fmt = NULL; - } - - media_packet_unref(pkt); -} - -static bool preview_resolution_cb(int width, int height, void *user_data) -{ - resolution_stack *data = (resolution_stack *)user_data; - - if (data == NULL) { - g_print("NULL data\n"); - return false; - } - - data->width[data->count] = width; - data->height[data->count] = height; - - g_print("\t%d. %dx%d\n", data->count, width, height); - - data->count++; - - return true; -} - -static bool capture_resolution_test_cb(int width, int height, void *user_data) -{ - resolution_stack *data = (resolution_stack *)user_data; - - if (data == NULL) { - g_print("NULL data\n"); - return false; - } - - data->width[data->count] = width; - data->height[data->count] = height; - - g_print("\t%d. %dx%d\n", data->count, width, height); - - data->count++; - - return true; -} - -static bool af_mode_foreach_cb(camera_attr_iso_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, af_scan[mode]); - return true; -} - -static bool exposure_mode_cb(camera_attr_af_mode_e mode, void *user_data) -{ - exposure_stack *data = (exposure_stack *)user_data; - - if (data == NULL) { - g_print("NULL data\n"); - return false; - } - - data->mode = mode; - data->count++; - - g_print("\t%d. %s\n", mode, exposure_mode[mode]); - return true; -} - -static bool iso_mode_cb(camera_attr_iso_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, iso_mode[mode]); - return true; -} - -static bool camera_rotation_cb(camera_rotation_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, camera_rotation[mode]); - return true; -} - -static bool camera_flip_cb(camera_flip_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, sensor_flip[mode]); - return true; -} - -static bool preview_format_cb(camera_pixel_format_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, image_fmt[mode]); - return true; -} - -static bool white_balance_cb(camera_attr_whitebalance_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, wb[mode]); - return true; -} - -static bool colortone_cb(camera_attr_effect_mode_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, ct[mode]); - return true; -} - -static bool program_mode_cb(camera_attr_scene_mode_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, program_mode[mode]); - return true; -} - -static bool strobe_mode_cb(camera_attr_flash_mode_e mode, void *user_data) -{ - g_print("\t%d. %s\n", mode, strobe_mode[mode]); - return true; -} - -static void _face_detected(camera_detected_face_s *faces, int count, void *user_data) -{ - int i; - - g_print("\tface detected!! - count %d\n", count); - - for (i = 0 ; i < count ; i++) - g_print("\t%d] %dx%d\n", faces[i].id, faces[i].x, faces[i].y); -} - -static void _file_write(char *path, void *data, int size) -{ - FILE *fp = NULL; - - if (!path || !data || size <= 0) { - g_print("\n\tERROR %p %p %d\n", path, data, size); - return; - } - - fp = fopen(path, "w"); - if (fp) { - g_print("\n\topen success [%s]\n", path); - if (fwrite(data, size, 1, fp) != 1) - g_print("\n\twrite error! errno %d\n", errno); - else - g_print("\n\twrite success [%s]\n", path); - - fclose(fp); - fp = NULL; - } else { - g_print("\n\topen error! [%s], errno %d\n", path, errno); - } -} - -static void capturing_cb(camera_image_data_s* image, camera_image_data_s* postview, camera_image_data_s* thumbnail, void *user_data) -{ - char m_filename[MAX_FILE_NAME_LENGTH]; - - /* main image */ - if (image) { - if (hcamcorder->is_multishot) { - snprintf(m_filename, MAX_FILE_NAME_LENGTH, "%s/multishot%03d.jpg", - hcamcorder->file_path, hcamcorder->multishot_count++); - } else { - snprintf(m_filename, MAX_FILE_NAME_LENGTH, "%s/stillshot%03d.jpg", - hcamcorder->file_path, hcamcorder->stillshot_count++); - } - - _file_write(m_filename, image->data, image->size); - } -} - -static void capture_completed_cb(void *user_data) -{ - camera_start_preview(hcamcorder->camera); -} - -static void print_menu() -{ - switch (hcamcorder->menu_state) { - case MENU_STATE_INIT: - g_print("\n\t=======================================\n"); - g_print("\t CAMERA_TESTSUITE\n"); - g_print("\t=======================================\n"); - g_print("\t '1' Video Capture\n"); - g_print("\t '2' Device State\n"); - g_print("\t '3' Device Manager\n"); - g_print("\t 'q' Exit\n"); - g_print("\t=======================================\n"); - break; - case MENU_STATE_MAIN: - g_print("\n\t=======================================\n"); - g_print("\t Video Capture (CAMERA%d)\n", camera_device); - g_print("\t=======================================\n"); - g_print("\t '1' Stillshot test\n"); - g_print("\t '2' Multishot test\n"); - g_print("\t '3' Setting\n"); - g_print("\t '4' Change device (CAMERA0 <-> CAMERA1)\n"); - g_print("\t '5' Set/Unset preview callback\n"); - g_print("\t '6' Set/Unset extra preview callback\n"); - g_print("\t '7' Set/Unset media packet preview callback\n"); - g_print("\t 'b' back\n"); - g_print("\t=======================================\n"); - break; - case MENU_STATE_DEVICE_STATE: - g_print("\n\t=======================================\n"); - g_print("\t Device State\n"); - g_print("\t=======================================\n"); - g_print("\t '1' Get camera device state\n"); - g_print("\t '2' Add camera device state changed callback\n"); - g_print("\t '3' Remove camera device state changed callback\n"); - g_print("\t 'b' back\n"); - g_print("\t=======================================\n"); - break; - case MENU_STATE_DEVICE_MANAGER: - g_print("\n\t=======================================\n"); - g_print("\t Device List\n"); - g_print("\t=======================================\n"); - g_print("\t '1' Initialize device manager\n"); - g_print("\t '2' Foreach supported camera device\n"); - g_print("\t '3' Add camera device connection changed callback\n"); - g_print("\t '4' Remove camera device connection changed callback\n"); - g_print("\t '9' Deinitialize device manager\n"); - g_print("\t 'b' back\n"); - g_print("\t=======================================\n"); - break; - case MENU_STATE_MAIN_SETTING: - g_print("\n\t=======================================\n"); - g_print("\t Video Capture > Setting\n"); - g_print("\t=======================================\n"); - g_print("\t >>>>>>>>>>>>>>>>>>>>>>>>>>>> [Camera] \n"); - g_print("\t '0' Preview resolution \n"); - g_print("\t '1' Capture resolution \n"); - g_print("\t '2' Digital zoom level \n"); - g_print("\t '3' AF mode \n"); - g_print("\t '4' AF scan range \n"); - g_print("\t '5' Exposure mode \n"); - g_print("\t '6' Exposure value \n"); - g_print("\t '7' F number \n"); - g_print("\t '8' Display reuse hint \n"); - g_print("\t '9' Manual Focus \n"); - g_print("\t 'i' ISO \n"); - g_print("\t 'r' Rotate camera input \n"); - g_print("\t 'f' Flip camera input \n"); - g_print("\t 'j' Jpeg quality \n"); - g_print("\t 'p' Picture format \n"); - g_print("\t 'E' EXIF orientation \n"); - g_print("\t 'F' Get facing direction of camera module\n"); - g_print("\t 's' Extra preview stream format\n"); - g_print("\t 'B' Extra preview bitrate\n"); - g_print("\t 'V' Extra preview GOP interval\n"); - g_print("\t >>>>>>>>>>>>>>>>>>>> [Display/Filter]\n"); - g_print("\t 'v' Visible \n"); - g_print("\t 'o' Output mode \n"); - g_print("\t 'y' Rotate display \n"); - g_print("\t 'Y' Flip display \n"); - g_print("\t 'g' Brightness \n"); - g_print("\t 'c' Contrast \n"); - g_print("\t 'h' Hue \n"); - g_print("\t 'w' White balance \n"); - g_print("\t 't' Color tone \n"); - g_print("\t 'd' WDR \n"); - g_print("\t 'e' EV program mode \n"); - g_print("\t 'R' Display ROI area \n"); - g_print("\t >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [etc.]\n"); - g_print("\t 'z' Strobe (Flash) \n"); - g_print("\t 'S' Strobe (Flash) state\n"); - g_print("\t 'G' Strobe (Flash) brightness\n"); - g_print("\t 'x' Capture mode (Still/Multishot/HDR)\n"); - g_print("\t 'l' Face detection \n"); - g_print("\t 'k' Anti-handshake \n"); - g_print("\t 'K' Video-stabilization \n"); - g_print("\t 'u' Touch AF area \n"); - g_print("\t 'n' Set file path to write captured image\n"); - g_print("\t 'm' Set media bridge\n"); - g_print("\t 'b' back\n"); - g_print("\t=======================================\n"); - break; - default: - g_print("\n\tunknow menu state !!\n"); - return; - } - - g_print("\tCommand >> "); -} - - -static void main_menu(gchar buf) -{ - int err = 0; - int interval = 0; - int count = 0; - int set_cb = 0; - - switch (buf) { - case '1': /* Capture */ - hcamcorder->is_multishot = FALSE; - camera_attr_set_image_quality(hcamcorder->camera, 100); - camera_set_capture_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_JPEG); - camera_start_capture(hcamcorder->camera, capturing_cb, capture_completed_cb, hcamcorder); - break; - case '2': /* multishot Capture */ - g_print("multishot capture"); - hcamcorder->is_multishot = TRUE; - g_print("\n\tinput interval(ms) : "); - err = scanf("%d", &interval); - flush_stdin(); - g_print("\n\tinput count : "); - err = scanf("%d", &count); - flush_stdin(); - camera_attr_set_image_quality(hcamcorder->camera, 100); - camera_set_capture_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_JPEG); - camera_start_continuous_capture(hcamcorder->camera, count, interval, capturing_cb, NULL, NULL); - sleep(3); - camera_start_preview(hcamcorder->camera); - break; - case '3': /* Setting */ - hcamcorder->menu_state = MENU_STATE_MAIN_SETTING; - break; - case '4': /* Change device (CAMERA0 <-> CAMERA1) */ - camera_set_display_reuse_hint(hcamcorder->camera, true); - - camera_stop_preview(hcamcorder->camera); - - if (hcamcorder->type == CAMERA_DEVICE_CAMERA0) - hcamcorder->type = CAMERA_DEVICE_CAMERA1; - else - hcamcorder->type = CAMERA_DEVICE_CAMERA0; - - camera_change_device(hcamcorder->camera, hcamcorder->type); - - camera_set_error_cb(hcamcorder->camera, _camera_error_cb, NULL); - camera_set_state_changed_cb(hcamcorder->camera, _camera_state_changed_cb, NULL); - camera_set_interrupted_cb(hcamcorder->camera, _camera_interrupted_cb, NULL); - camera_set_interrupt_started_cb(hcamcorder->camera, _camera_interrupt_started_cb, NULL); - - camera_set_display_mode(hcamcorder->camera, CAMERA_DISPLAY_MODE_LETTER_BOX); - - camera_start_preview(hcamcorder->camera); - break; - case '5': - g_print("* Preview Callback\n"); - g_print("\tUnset[0] / Set[Others] :"); - err = scanf("%d", &set_cb); - flush_stdin(); - if (set_cb) { - g_print("\n\tDump preview data to file - NO[0], YES[Others] : "); - err = scanf("%d", &g_camera_preview_cb_dump); - flush_stdin(); - err = camera_set_preview_cb(hcamcorder->camera, _camera_preview_cb, hcamcorder->camera); - } else { - err = camera_unset_preview_cb(hcamcorder->camera); - } - g_print("\tresult[0x%x]\n\n", err); - break; - case '6': - g_print("* Extra Preview Callback\n"); - g_print("\tUnset[0] / Set[Others] :"); - err = scanf("%d", &set_cb); - flush_stdin(); - if (set_cb) { - g_print("\n\tDump extra preview data to file - NO[0], YES[Others] : "); - err = scanf("%d", &g_camera_extra_preview_cb_dump); - flush_stdin(); - err = camera_set_extra_preview_cb(hcamcorder->camera, _camera_extra_preview_cb, hcamcorder->camera); - } else { - err = camera_unset_extra_preview_cb(hcamcorder->camera); - } - g_print("\tresult[0x%x]\n\n", err); - break; - case '7': - g_print("* Media Packet Preview Callback\n"); - g_print("\tUnset[0] / Set[Others] :"); - err = scanf("%d", &set_cb); - flush_stdin(); - if (set_cb) { - g_print("\n\tDump media packet preview data to file - NO[0], YES[Others] : "); - err = scanf("%d", &g_camera_mp_preview_cb_dump); - flush_stdin(); - err = camera_set_media_packet_preview_cb(hcamcorder->camera, _camera_media_packet_preview_cb, hcamcorder->camera); - } else { - err = camera_unset_media_packet_preview_cb(hcamcorder->camera); - } - g_print("\tresult[0x%x]\n\n", err); - break; - case 'b': /* back */ - __release_media_bridge(); - - camera_stop_preview(hcamcorder->camera); - camera_destroy(hcamcorder->camera); - hcamcorder->camera = NULL; - hcamcorder->menu_state = MENU_STATE_INIT; - break; - default: - g_print("\t Invalid input \n"); - break; - } -} - - -static void setting_menu(gchar buf) -{ - int bret = FALSE; - int idx = 0; - int min = 0; - int max = 0; - int i = 0; - int err = 0; - int x = 0; - int y = 0; - int width = 0; - int height = 0; - int result = 0; - int set_bridge = 0; - int stream_id; - int pixel_format; - int fps; - int bitrate; - int interval; - - switch (buf) { - /* Camera setting */ - case '0': /* Setting > Preview Resolution setting */ - g_print("\t* Select the preview resolution!\n"); - resolution_stack resolution_list; - resolution_list.count = 0; - - camera_foreach_supported_preview_resolution(hcamcorder->camera, - preview_resolution_cb, &resolution_list); - - g_print("\tCommand >> "); - - err = scanf("%d", &idx); - flush_stdin(); - if (resolution_list.count > idx && idx >= 0) { - g_print("\t-----------------PREVIEW RESOLUTION (%dx%d)---------------------\n", - resolution_list.width[idx], resolution_list.height[idx]); - - result = camera_set_preview_resolution(hcamcorder->camera, - resolution_list.width[idx], resolution_list.height[idx]); - } else { - g_print("\tInvalid command [%d]\n", idx); - result = -1; - } - resolution_list.count = 0; - if (result == CAMERA_ERROR_NONE) - g_print("\tPASS\n"); - else - g_print("\tFAIL\n"); - break; - case '1': /* Setting > Capture Resolution setting */ - g_print("\t* Select the preview resolution!\n"); - resolution_list.count = 0; - - camera_foreach_supported_capture_resolution(hcamcorder->camera, - capture_resolution_test_cb, &resolution_list); - - g_print("\tCommand > "); - - err = scanf("%d", &idx); - flush_stdin(); - if (resolution_list.count > idx && idx >= 0) { - g_print("\t-----------------CAPTURE RESOLUTION (%dx%d)---------------------\n", - resolution_list.width[idx], resolution_list.height[idx]); - - result = camera_set_capture_resolution(hcamcorder->camera, - resolution_list.width[idx], resolution_list.height[idx]); - } else { - g_print("\tInvalid command [%d]\n", idx); - result = -1; - } - resolution_list.count = 0; - if (result == CAMERA_ERROR_NONE) - g_print("\tPASS\n"); - else - g_print("\tFAIL\n"); - break; - case '2': /* Setting > Digital zoom level */ - camera_attr_get_zoom_range(hcamcorder->camera, &min, &max); - if (min > max) { - g_print("\tDigital Zoom Not supported\n"); - } else { - g_print("\tDigital zoom level [%d ~ %d] > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_zoom(hcamcorder->camera, idx); - } - break; - case '3': /* Setting > AF mode */ - g_print("\tAuto Focus [1:Start, 2:Stop] > "); - err = scanf("%d", &idx); - flush_stdin(); - switch (idx) { - case 1: - camera_start_focusing(hcamcorder->camera, 0); - break; - case 2: - camera_cancel_focusing(hcamcorder->camera); - break; - default: - g_print("\tInvalid command [%d]\n", idx); - break; - } - break; - case '4': /* Setting > AF scan range */ - g_print("\t* AF scan range !\n"); - camera_attr_foreach_supported_af_mode(hcamcorder->camera, (camera_attr_supported_af_mode_cb)af_mode_foreach_cb, NULL); - g_print("\tCommand > "); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_af_mode(hcamcorder->camera, idx); - break; - case '5': /* Setting > Exposure mode */ - g_print("* Exposure mode!\n"); - camera_attr_foreach_supported_exposure_mode(hcamcorder->camera, (camera_attr_supported_exposure_mode_cb)exposure_mode_cb, NULL); - g_print("\n Select Exposure mode \n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_exposure_mode(hcamcorder->camera, idx); - break; - - case '6': /* Setting > Exposure value */ - camera_attr_get_exposure_range(hcamcorder->camera, &min, &max); - if (min >= max) - g_print("Not supported !! \n"); - else { - g_print("\n Select Exposure mode min%d -max %d\n", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_exposure(hcamcorder->camera, idx); - } - break; - case '7': /* Setting > F number */ - g_print("Not supported !! \n"); - break; - case '8': /* Setting > Display reuse hint */ - { - bool reuse_hint = false; - - err = camera_get_display_reuse_hint(hcamcorder->camera, &reuse_hint); - if (err != CAMERA_ERROR_NONE) { - g_print("failed to get display reuse hint 0x%x\n", err); - break; - } - - g_print("*Display reuse hint : current %d -> set %d\n", reuse_hint, !reuse_hint); - reuse_hint = !reuse_hint; - err = camera_set_display_reuse_hint(hcamcorder->camera, reuse_hint); - g_print("set display reuse hint result : 0x%x\n", err); - } - break; - case '9': /* Setting > Manual focus */ - g_print("*Manual focus !\n"); - camera_attr_get_focus_level_range(hcamcorder->camera, &min, &max); - if (min > max) { - g_print("\n\tManual focus is NOT SUPPORTED\n"); - break; - } - camera_attr_get_focus_level(hcamcorder->camera, &idx); - g_print("\tCurrent focus level (%d)\n", idx); - g_print("\tSelect focus level min(%d) - max(%d) > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_focus_level(hcamcorder->camera, idx); - idx = -1; - if (bret == CAMERA_ERROR_NONE) { - bret = camera_attr_get_focus_level(hcamcorder->camera, &idx); - g_print("\tfocus level[%d] after set\n", idx); - } else { - g_print("\tset focus level failed[0x%x]\n", bret); - } - break; - case 'i': /* Setting > ISO */ - g_print("*ISO !\n"); - camera_attr_foreach_supported_iso(hcamcorder->camera, iso_mode_cb, NULL); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_iso(hcamcorder->camera, idx); - break; - case 'r': /* Setting > Rotate camera input when recording */ - g_print("*Rotate camera input\n"); - camera_attr_foreach_supported_stream_rotation(hcamcorder->camera, camera_rotation_cb, NULL); - err = scanf("%d", &idx); - flush_stdin(); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - bret = camera_attr_set_stream_rotation(hcamcorder->camera, idx); - CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera)); - break; - case 'f': /* Setting > Flip camera input */ - g_print("*Flip camera input\n"); - camera_attr_foreach_supported_stream_flip(hcamcorder->camera, camera_flip_cb, NULL); - err = scanf("%d", &idx); - flush_stdin(); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - bret = camera_attr_set_stream_flip(hcamcorder->camera, idx); - CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera)); - break; - case 'j': /* Setting > Jpeg quality */ - g_print("*Jpeg quality !\n"); - g_print("\n Select Jpeg quality \n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_image_quality(hcamcorder->camera, idx); - break; - case 'p': /* Setting > Picture format */ - g_print("* Picture format!\n"); - camera_foreach_supported_preview_format(hcamcorder->camera, preview_format_cb, NULL); - err = scanf("%d", &idx); - flush_stdin(); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - bret = camera_set_preview_format(hcamcorder->camera, idx); - CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera)); - break; - case 'E': /* Setting > EXIF orientation */ - g_print("* EXIF Orientation\n"); - g_print("\t 1. TOP_LEFT\n"); - g_print("\t 2. TOP_RIGHT(flipped)\n"); - g_print("\t 3. BOTTOM_RIGHT\n"); - g_print("\t 4. BOTTOM_LEFT(flipped)\n"); - g_print("\t 5. LEFT_TOP(flipped)\n"); - g_print("\t 6. RIGHT_TOP\n"); - g_print("\t 7. RIGHT_BOTTOM(flipped)\n"); - g_print("\t 8. LEFT_BOTTOM\n"); - err = scanf("%d", &idx); - flush_stdin(); - if (idx < 1 || idx > 8) - g_print("Wrong INPUT[%d]!! \n", idx); - else - camera_attr_set_tag_orientation(hcamcorder->camera, idx); - break; - case 'F': /* Setting > Get Facing direction */ - g_print("* Get facing direction of camera module\n"); - err = camera_get_facing_direction(hcamcorder->camera, (camera_facing_direction_e *)&idx); - if (CAMERA_ERROR_NONE == err) - g_print("* Facing direction : %s(%d)\n", facing_direction[idx], idx); - else - g_print("* Error : %d\n", err); - break; - case 's': /* Setting > Set extra preview stream format */ - g_print("* Set extra preview stream format\n"); - - g_print("\tstream_id,pixel format[NV12:0,H264:15,VP8:18],width,height,fps : "); - err = scanf("%d,%d,%d,%d,%d", &stream_id, &pixel_format, &width, &height, &fps); - flush_stdin(); - - err = camera_set_extra_preview_stream_format(hcamcorder->camera, - stream_id, pixel_format, width, height, fps); - if (err != CAMERA_ERROR_NONE) { - g_print("* Set Error : 0x%x\n", err); - break; - } - - pixel_format = width = height = fps = -1; - - err = camera_get_extra_preview_stream_format(hcamcorder->camera, - stream_id, &pixel_format, &width, &height, &fps); - if (err != CAMERA_ERROR_NONE) { - g_print("* Get Error : 0x%x\n", err); - break; - } - - g_print("\tGet stream_id[%d],pixel format[%d],res[%dx%d],fps[%d]\n", - stream_id, pixel_format, width, height, fps); - break; - case 'B': /* Setting > Set extra preview bitrate */ - g_print("* Set extra preview bitrate\n"); - g_print("\tstream_id : "); - err = scanf("%d", &stream_id); - flush_stdin(); - - err = camera_attr_get_extra_preview_bitrate(hcamcorder->camera, stream_id, &bitrate); - if (err != CAMERA_ERROR_NONE) { - g_print("\tFailed to get bitrate for stream_id[%d]\n", stream_id); - break; - } - - g_print("\tCurrent bitrate[%d]bps for stream_id[%d]\n", bitrate, stream_id); - - g_print("\tSet bitrate(bps) : "); - err = scanf("%d", &bitrate); - flush_stdin(); - - err = camera_attr_set_extra_preview_bitrate(hcamcorder->camera, stream_id, bitrate); - if (err != CAMERA_ERROR_NONE) { - g_print("* Set Error : 0x%x\n", err); - break; - } - - bitrate = -1; - - err = camera_attr_get_extra_preview_bitrate(hcamcorder->camera, stream_id, &bitrate); - if (err != CAMERA_ERROR_NONE) { - g_print("* Get Error : 0x%x\n", err); - break; - } - - g_print("\tResult bitrate[%d]bps for stream_id[%d]\n", bitrate, stream_id); - break; - case 'V': /* Setting > Set extra preview GOP interval */ - g_print("* Set extra preview GOP interval\n"); - g_print("\tstream_id : "); - err = scanf("%d", &stream_id); - flush_stdin(); - - err = camera_attr_get_extra_preview_gop_interval(hcamcorder->camera, stream_id, &interval); - if (err != CAMERA_ERROR_NONE) { - g_print("\tFailed to get GOP interval for stream_id[%d]\n", stream_id); - break; - } - - g_print("\tCurrent GOP interval[%d]bps for stream_id[%d]\n", interval, stream_id); - - g_print("\tSet GOP interval(ms) : "); - err = scanf("%d", &interval); - flush_stdin(); - - err = camera_attr_set_extra_preview_gop_interval(hcamcorder->camera, stream_id, interval); - if (err != CAMERA_ERROR_NONE) { - g_print("* Set Error : 0x%x\n", err); - break; - } - - interval = -1; - - err = camera_attr_get_extra_preview_gop_interval(hcamcorder->camera, stream_id, &interval); - if (err != CAMERA_ERROR_NONE) { - g_print("* Get Error : 0x%x\n", err); - break; - } - - g_print("\tResult GOP interval[%d]bps for stream_id[%d]\n", interval, stream_id); - break; - /* Display / Filter setting */ - case 'v': /* Display visible */ - g_print("* Display visible setting !\n"); - g_print("\n Select Display visible \n"); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i, visible_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx == 0 || idx == 1) - bret = camera_set_display_visible(hcamcorder->camera, idx); - else - g_print("invalid input %d", idx); - break; - case 'o': /* Setting > Display Mode */ - g_print("* Display mode!\n"); - for (i = 0 ; i < 5 ; i++) - g_print("%d. %s\n", i, display_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_set_display_mode(hcamcorder->camera, idx); - break; - case 'y': /* Setting > Rotate Display */ - g_print("\n Select Rotate mode\n"); - g_print("\t0. 0\n\t1. 90\n\t2. 180\n\t3. 270\n\n"); - err = scanf("%d", &idx); - flush_stdin(); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - bret = camera_set_display_rotation(hcamcorder->camera, idx); - CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera)); - break; - case 'Y': /* Setting > Flip Display */ - g_print("\n Select Rotate mode\n"); - g_print("\t0. NONE\n\t1. HORIZONTAL\n\t2. VERTICAL\n\t3. BOTH\n\n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_set_display_flip(hcamcorder->camera, idx); - break; - case 'g': /* Setting > Brightness */ - g_print("*Brightness !\n"); - camera_attr_get_brightness_range(hcamcorder->camera, &min, &max); - g_print("\n Select brightness min (%d) -max(%d) > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_brightness(hcamcorder->camera, idx); - break; - case 'c': /* Setting > Contrast */ - g_print("*Contrast !\n"); - camera_attr_get_contrast_range(hcamcorder->camera, &min, &max); - g_print("\n Select Contrast min(%d)-max(%d) > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_contrast(hcamcorder->camera, idx); - break; - case 'h': /* Setting > Hue */ - g_print("*Hue !\n"); - camera_attr_get_hue_range(hcamcorder->camera, &min, &max); - if (max >= min) { - g_print("\n Select Hue min(%d)-max(%d) > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_hue(hcamcorder->camera, idx); - } else { - g_print("\n Hue is not supported (%d,%d)\n", min, max); - } - break; - case 'w': /* Setting > White balance */ - g_print("*White balance !\n"); - g_print("\n Select White balance \n"); - camera_attr_foreach_supported_whitebalance(hcamcorder->camera, white_balance_cb, NULL); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_whitebalance(hcamcorder->camera, idx); - break; - case 't': /* Setting > Color tone */ - g_print("*Color tone !\n"); - camera_attr_foreach_supported_effect(hcamcorder->camera, colortone_cb, NULL); - g_print("\n Select Color tone \n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_effect(hcamcorder->camera, idx); - break; - case 'd': /* Setting > WDR */ - g_print("*WDR !\n"); - g_print("\n Select WDR Mode \n"); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i+1, wdr_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx == 1) - bret = camera_attr_enable_auto_contrast(hcamcorder->camera, 0); - else if (idx == 2) - bret = camera_attr_enable_auto_contrast(hcamcorder->camera, 1); - break; - case 'e': /* Setting > EV program mode */ - g_print("* EV program mode!\n"); - camera_attr_foreach_supported_scene_mode(hcamcorder->camera, program_mode_cb, NULL); - g_print("\n Select EV program mode \n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_scene_mode(hcamcorder->camera, idx); - break; - case 'R': /* Setting > Display ROI area */ - g_print("* Set display roi area. Select x y width height \n"); - err = scanf("%d %d %d %d", &x, &y, &width, &height); - flush_stdin(); - camera_set_display_mode(hcamcorder->camera, CAMERA_DISPLAY_MODE_CUSTOM_ROI); - err = camera_attr_set_display_roi_area(hcamcorder->camera, x, y, width, height); - if (CAMERA_ERROR_NONE != err) - g_print("* Error : %d\n", err); - - err = camera_attr_get_display_roi_area(hcamcorder->camera, &x, &y, &width, &height); - if (CAMERA_ERROR_NONE == err) - g_print("Current display roi area : x %d, y %d, width %d, height %d\n", x, y, width, height); - else - g_print("* Error : %d\n", err); - break; - - /* ext. setting */ - case 'z': /* Setting > Strobe setting */ - g_print("*Strobe Mode\n"); - camera_attr_foreach_supported_flash_mode(hcamcorder->camera, strobe_mode_cb, NULL); - g_print("\n Select Strobe Mode \n"); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_flash_mode(hcamcorder->camera, idx); - break; - case 'S': /* Setting > flash state */ - g_print("*flash state\n"); - err = camera_get_flash_state(camera_device, (camera_flash_state_e *)&idx); - if (CAMERA_ERROR_NONE == err) - g_print("Current flash state = %s\n", idx ? "ON" : "OFF"); - else - g_print("* Error : %d\n", err); - break; - case 'G': /* Setting > flash brightness */ - g_print("*Flash brightness !\n"); - camera_attr_get_flash_brightness_range(hcamcorder->camera, &min, &max); - g_print("\n Select flash brightness min(%d) - max(%d) > ", min, max); - err = scanf("%d", &idx); - flush_stdin(); - bret = camera_attr_set_flash_brightness(hcamcorder->camera, idx); - break; - case 'x': /* Setting > Capture mode ,Muitishot? */ - g_print("*Select Capture mode!\n"); - g_print(" \n\t1. Stillshot mode\n\t2. Multishot mode\n\t3. HDR capture\n"); - err = scanf("%d", &idx); - flush_stdin(); - - switch (idx) { - case 1: - g_print("stillshot mode selected and capture callback is set!!!!\n"); - hcamcorder->is_multishot = FALSE; - camera_attr_set_hdr_mode(hcamcorder->camera, 0); - break; - case 2: - g_print("HDR Capture mode selected\n"); - hcamcorder->is_multishot = FALSE; - g_print("\nSelect HDR capture mode\n"); - for (i = 0 ; i < 3 ; i++) - g_print("\t %d. %s\n", i, hdr_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx >= CAMERA_ATTR_HDR_MODE_DISABLE && idx <= CAMERA_ATTR_HDR_MODE_KEEP_ORIGINAL) - bret = camera_attr_set_hdr_mode(hcamcorder->camera, idx); - else - g_print("invalid input %d\n", idx); - break; - default: - g_print("Wrong input, select again!!\n"); - break; - } - break; - case 'l': /* Setting > Face detection setting */ - if (camera_is_supported_face_detection(hcamcorder->camera)) { - g_print("* Face detect mode !\n"); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s \n", i, detection_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx == 0) - bret = camera_stop_face_detection(hcamcorder->camera); - else if (idx == 1) - bret = camera_start_face_detection(hcamcorder->camera, _face_detected, NULL); - else - g_print("\n invalid input [%d]\n\n", idx); - } else { - g_print("face detection_not supported"); - } - break; - case 'k': /* Setting > Anti-handshake */ - g_print("*Anti-handshake !\n"); - g_print("\n Select Anti-handshake mode \n"); - for (i = 0; i < 2; i++) - g_print("\t %d. %s\n", i, ahs_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx == 0 || idx == 1) - bret = camera_attr_enable_anti_shake(hcamcorder->camera, idx); - else - g_print("invalid input %d\n", idx); - break; - case 'K': /* Setting > Video-stabilization */ - g_print("*Video-stabilization !\n"); - g_print("\n Select Video-stabilization mode \n"); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i, vs_mode[i]); - err = scanf("%d", &idx); - flush_stdin(); - if (idx < 0 || idx > 1) { - g_print("invalid input %d\n", idx); - break; - } - - if (idx == 1) { - g_print("\n Restart preview with NV12 and 720p resolution\n"); - err = camera_stop_preview(hcamcorder->camera); - g_print("stop preview result 0x%x\n", err); - camera_set_preview_resolution(hcamcorder->camera, 1280, 720); - camera_set_preview_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_NV12); - } - - bret = camera_attr_enable_video_stabilization(hcamcorder->camera, idx); - - if (idx == 1) { - err = camera_start_preview(hcamcorder->camera); - if (err != CAMERA_ERROR_NONE) - g_print("\n Restart FAILED! 0x%x\n", err); - } - break; - case 'u': /* Touch AF area */ - g_print("* Touch AF area !\n"); - g_print("\n Input x,y,width,height \n"); - err = scanf("%d,%d,%d,%d", &x, &y, &width, &height); - flush_stdin(); - err = camera_attr_set_af_area(hcamcorder->camera, width, height); - if (err != 0) - g_print("Failed to set touch AF area.(%x)\n", err); - else - g_print("Succeed to set touch AF area.\n"); - break; - case 'n': /* file path */ - g_print("* File path !\n"); - g_print("\n Input file path to save captured data(string) : "); - if (fgets(hcamcorder->file_path, sizeof(hcamcorder->file_path), stdin)) - g_print("\ncaptured data will be saved in [%s]\n", hcamcorder->file_path); - else - g_print("\nset file path failed\n"); - break; - case 'm': /* media bridge */ - g_print("* Media Bridge !\n"); - g_print("\tUnset[0] / Set[Others] :"); - err = scanf("%d", &set_bridge); - flush_stdin(); - if (set_bridge) { - __release_media_bridge(); - - err = media_bridge_create(&bridge); - err |= media_bridge_set_source(bridge, MEDIA_BRIDGE_MODULE_CAMERA, hcamcorder->camera); - } else { - __release_media_bridge(); - } - g_print("\tresult[0x%x]\n\n", err); - break; - case 'b': /* back */ - hcamcorder->menu_state = MENU_STATE_MAIN; - break; - default: - g_print("\t Invalid input \n"); - break; - } - - g_print("\t bret : 0x%x \n", bret); -} - - -static void device_state_menu(gchar buf) -{ - int ret = 0; - camera_device_e device = CAMERA_DEVICE_CAMERA0; - camera_device_state_e device_state = CAMERA_DEVICE_STATE_NULL; - - switch (buf) { - case '1': /* Get device state */ - while (1) { - g_print("\n\tEnter Camera Index[0~9]: "); - - ret = scanf("%d", (int *)&device); - flush_stdin(); - - if (ret == EOF) { - g_print("\n\t!!!read input error!!!\n"); - return; - } - - if (device < CAMERA_DEVICE_CAMERA0 || - device > CAMERA_DEVICE_CAMERA9) { - g_print("\n\tinvalid input:[%d], try again...\n", device); - continue; - } - - ret = camera_get_device_state(device, &device_state); - g_print("\n\tDevice[%d] state[%d], ret[0x%x]", - device, device_state, ret); - break; - } - break; - case '2': /* Add device state changed callback */ - ret = camera_add_device_state_changed_cb(_camera_device_state_changed_cb, - NULL, &g_camera_device_state_changed_cb_id); - g_print("\n\tadd result[0x%x] - cb id[%d]\n", ret, g_camera_device_state_changed_cb_id); - break; - case '3': /* Remove device state changed callback */ - if (g_camera_device_state_changed_cb_id > 0) { - ret = camera_remove_device_state_changed_cb(g_camera_device_state_changed_cb_id); - g_print("\n\tremove result[0x%x] - cb id[%d]\n", ret, g_camera_device_state_changed_cb_id); - g_camera_device_state_changed_cb_id = 0; - } else { - g_print("\n\tinvalid cb id[%d]\n", g_camera_device_state_changed_cb_id); - } - break; - case 'b': /* back */ - hcamcorder->menu_state = MENU_STATE_INIT; - break; - default: - g_print("\n\tinvalid input[%c]\n", buf); - break; - } -} - -static void device_manager_menu(gchar buf) -{ - int ret = 0; - - switch (buf) { - case '1': /* Initialize device manager */ - ret = camera_device_manager_initialize(&g_device_manager); - g_print("\n\tDevice manager[%p] initialize result[0x%x]\n", - g_device_manager, ret); - break; - case '2': /* Foreach supported camera device */ - ret = camera_device_manager_foreach_supported_device(g_device_manager, _camera_supported_device_cb, NULL); - if (ret != CAMERA_ERROR_NONE) { - g_print("\n\tGet device list failed[0x%x]\n", ret); - return; - } - break; - case '3': /* Add device connection changed callback */ - ret = camera_device_manager_add_device_connection_changed_cb(g_device_manager, - _camera_device_connection_changed_cb, NULL, &g_camera_device_connection_changed_cb_id); - g_print("\n\tadd result[0x%x] - cb id[%d]\n", ret, g_camera_device_connection_changed_cb_id); - break; - case '4': /* Remove device connection changed callback */ - if (g_camera_device_connection_changed_cb_id > 0) { - ret = camera_device_manager_remove_device_connection_changed_cb(g_device_manager, - g_camera_device_connection_changed_cb_id); - g_print("\n\tremove result[0x%x] - cb id[%d]\n", ret, g_camera_device_connection_changed_cb_id); - g_camera_device_connection_changed_cb_id = 0; - } else { - g_print("\n\tinvalid cb id[%d]\n", g_camera_device_connection_changed_cb_id); - } - break; - case '9': /* Deinitialize device manager */ - ret = camera_device_manager_deinitialize(g_device_manager); - g_print("\n\tDevice manager[%p] deinitialize result[0x%x]\n", - g_device_manager, ret); - g_device_manager = NULL; - break; - case 'b': /* back */ - hcamcorder->menu_state = MENU_STATE_INIT; - break; - default: - g_print("\n\tinvalid input[%c]\n", buf); - break; - } -} - - -/** - * This function is to execute command. - * - * @param channel [in] 1st parameter - * - * @return This function returns TRUE/FALSE - * @remark - * @see - */ -static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data) -{ - gchar *buf = NULL; - gsize read_size; - GError *g_error = NULL; - - g_print("\n\tENTER\n"); - - g_io_channel_read_line(channel, &buf, &read_size, NULL, &g_error); - if (g_error) { - g_print("\n\tg_io_channel_read_chars error\n"); - g_error_free(g_error); - g_error = NULL; - } - - if (buf) { - g_strstrip(buf); - - g_print("\n\tMenu Status : %d\n", hcamcorder->menu_state); - switch (hcamcorder->menu_state) { - case MENU_STATE_INIT: - mode_change(buf[0]); - break; - case MENU_STATE_MAIN: - main_menu(buf[0]); - break; - case MENU_STATE_MAIN_SETTING: - setting_menu(buf[0]); - break; - case MENU_STATE_DEVICE_STATE: - device_state_menu(buf[0]); - break; - case MENU_STATE_DEVICE_MANAGER: - device_manager_menu(buf[0]); - break; - default: - break; - } - - g_free(buf); - buf = NULL; - - print_menu(); - } else { - g_print("\n\tNo read input\n"); - } - - return TRUE; -} - -static gboolean init_handle() -{ - hcamcorder->is_multishot = FALSE; - hcamcorder->stillshot_count = 0; - hcamcorder->multishot_count = 0; - snprintf(hcamcorder->file_path, MAX_FILE_PATH_LENGTH, DEFAULT_FILE_PATH); - hcamcorder->menu_state = MENU_STATE_INIT; - hcamcorder->elapsed_time = 0; - - return TRUE; -} - - -/** - * This function is to change camcorder mode. - * - * @param buf [in] user input - * - * @return This function returns TRUE/FALSE - * @remark - * @see other functions - */ -static gboolean mode_change(gchar buf) -{ - int err = 0; - int camera_type = 0; - - switch (buf) { - case '1': - while (1) { - g_print("\n\tEnter the Camera Type[0:Local, 1:Network] : "); - err = scanf("%d", &camera_type); - flush_stdin(); - if (err == EOF) { - g_print("\t!!!read input error!!!\n"); - continue; - } - - if (camera_type != 0 && camera_type != 1) { - g_print("\t Invalid camera type(%d)\n", camera_type); - continue; - } - - g_print("\n\tEnter the Camera Device[0 ~ 9] : "); - err = scanf("%d", (int *)&camera_device); - flush_stdin(); - if (err == EOF) { - g_print("\t!!!read input error!!!\n"); - continue; - } - - if (camera_device < 0 || camera_device > 9) { - g_print("\t Invalid camera device(%d)\n", camera_device); - continue; - } - - hcamcorder->type = camera_device; - - break; - } - break; - case '2': - hcamcorder->menu_state = MENU_STATE_DEVICE_STATE; - return TRUE; - case '3': - hcamcorder->menu_state = MENU_STATE_DEVICE_MANAGER; - return TRUE; - case 'q': - g_print("\t Quit Camcorder Testsuite!!\n"); - g_main_loop_quit(g_mainloop_camera_test); - return FALSE; - default: - g_print("\t Invalid media type(%c)\n", buf); - return FALSE; - } - - g_print("\n[camcorder_create - type %d, device %d]\n", camera_type, camera_device); - - gettimeofday(&previous_time, NULL); - - g_timer_reset(timer); - - if (camera_type) - err = camera_create_network(camera_device, &hcamcorder->camera); - else - err = camera_create(camera_device, &hcamcorder->camera); - - g_print("[camera_create() : %12.6lfs]\n", g_timer_elapsed(timer, NULL)); - - if (err != 0) { - g_print("\n\tmmcamcorder_create = 0x%x\n", err); - return FALSE; - } - - g_print("Display type : NULL for headless\n"); - camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_NONE, NULL); - - camera_set_error_cb(hcamcorder->camera, _camera_error_cb, NULL); - camera_set_state_changed_cb(hcamcorder->camera, _camera_state_changed_cb, NULL); - camera_set_interrupted_cb(hcamcorder->camera, _camera_interrupted_cb, NULL); - camera_set_interrupt_started_cb(hcamcorder->camera, _camera_interrupt_started_cb, NULL); - camera_set_display_mode(hcamcorder->camera, CAMERA_DISPLAY_MODE_LETTER_BOX); - /*camera_set_display_rotation(hcamcorder->camera, CAMERA_ROTATION_90);*/ - /*camera_set_display_flip(hcamcorder->camera, CAMERA_FLIP_VERTICAL);*/ - /*camera_set_preview_cb(hcamcorder->camera, _preview_cb, hcamcorder->camera);*/ - - camera_start_preview(hcamcorder->camera); - - gettimeofday(¤t_time, NULL); - timersub(¤t_time, &previous_time, &result_time); - - g_print("\n\tCamera Starting Time : %ld.%lds\n", result_time.tv_sec, result_time.tv_usec); - - hcamcorder->menu_state = MENU_STATE_MAIN; - - return TRUE; -} - -/** - * This function is the example main function for mmcamcorder API. - * - * @param - * - * @return This function returns 0. - * @remark - * @see other functions - */ -int main(int argc, char **argv) -{ - hcamcorder = (cam_handle_t *)g_malloc0(sizeof(cam_handle_t)); - - stdin_channel = g_io_channel_unix_new(fileno(stdin));/* read from stdin */ - g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)cmd_input, NULL); - - timer = g_timer_new(); - g_timer_reset(timer); - - init_handle(); - - print_menu(); - - g_mainloop_camera_test = g_main_loop_new(NULL, FALSE); - - g_main_loop_run(g_mainloop_camera_test); - - g_print("\n\treturn main loop\n\n"); - - g_main_loop_unref(g_mainloop_camera_test); - - if (timer) { - g_timer_stop(timer); - g_timer_destroy(timer); - } - - g_free(hcamcorder); - g_io_channel_unref(stdin_channel); - - return 0; -} -/*EOF*/ -- 2.7.4