diff options
author | Jeongmo Yang <jm80.yang@samsung.com> | 2016-12-20 17:59:47 +0900 |
---|---|---|
committer | Jeongmo Yang <jm80.yang@samsung.com> | 2016-12-20 17:59:53 +0900 |
commit | a9e739881c10734e6d96197e96045ce2abb41e36 (patch) | |
tree | d65d127aa188f0d3ba8ad87129e73cf5c0a24d58 | |
parent | f2afede73610bf3c79b41680301b1d77d715b443 (diff) | |
parent | 1b09e2d8e06370b7a243153db217e80e451b316f (diff) | |
download | camera-accepted/tizen_3.0.m2_tv.tar.gz camera-accepted/tizen_3.0.m2_tv.tar.bz2 camera-accepted/tizen_3.0.m2_tv.zip |
Merge branch 'tizen' into tizen_3.0submit/tizen_3.0/20161220.100802submit/tizen_3.0.m2/20170104.093748accepted/tizen/3.0/wearable/20161221.011059accepted/tizen/3.0/tv/20161221.010720accepted/tizen/3.0/mobile/20161221.011610accepted/tizen/3.0/ivi/20161221.010933accepted/tizen/3.0/common/20161221.181244accepted/tizen/3.0.m2/wearable/20170104.100949accepted/tizen/3.0.m2/tv/20170104.100409accepted/tizen/3.0.m2/mobile/20170104.100149tizen_3.0.m2accepted/tizen_3.0.m2_wearableaccepted/tizen_3.0.m2_tvaccepted/tizen_3.0.m2_mobile
Change-Id: I2cb57dca8ee48db40624361464c2756cfb71a9ff
-rw-r--r-- | include/camera_private.h | 1 | ||||
-rw-r--r-- | packaging/capi-media-camera.spec | 2 | ||||
-rw-r--r-- | src/camera.c | 70 | ||||
-rw-r--r-- | test/camera_test.c | 1022 |
4 files changed, 554 insertions, 541 deletions
diff --git a/include/camera_private.h b/include/camera_private.h index 5cd5337..f1d3cd5 100644 --- a/include/camera_private.h +++ b/include/camera_private.h @@ -116,6 +116,7 @@ typedef struct _camera_cb_info_s { GCond api_cond[MUSE_CAMERA_API_MAX]; GMutex api_mutex[MUSE_CAMERA_API_MAX]; gint api_activating[MUSE_CAMERA_API_MAX]; + gint api_waiting[MUSE_CAMERA_API_MAX]; gint api_ret[MUSE_CAMERA_API_MAX]; /* general message handler info */ diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index 85f05b0..6aa000c 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.2.89 +Version: 0.2.91 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/camera.c b/src/camera.c index 088d4e6..6388caa 100644 --- a/src/camera.c +++ b/src/camera.c @@ -51,6 +51,7 @@ static int g_cam_dev_state_changed_cb_id; static GDBusConnection *g_cam_dev_state_changed_cb_conn; static guint g_cam_dev_state_changed_cb_subscribe_id; + static void __global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) { @@ -262,6 +263,25 @@ _DONE: } +static void __camera_update_api_waiting(camera_cb_info_s *cb_info, int api, int value) +{ + if (!cb_info || + api < 0 || api >= MUSE_CAMERA_API_MAX) { + LOGE("invalid param %p %d", cb_info, api); + return; + } + + g_mutex_lock(&(cb_info->api_mutex[api])); + cb_info->api_waiting[api] += value; + g_mutex_unlock(&(cb_info->api_mutex[api])); + + /*LOGD("api %d, value %d, waiting %d", + api, value, cb_info->api_waiting[api]);*/ + + return; +} + + static void __camera_device_state_changed_cb(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *param, gpointer user_data) @@ -436,6 +456,8 @@ static void _camera_msg_send(int api, camera_cb_info_s *cb_info, /*LOGD("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_ipc_send_msg(cb_info->fd, msg); g_mutex_unlock(&cb_info->fd_lock); @@ -450,6 +472,8 @@ static void _camera_msg_send(int api, camera_cb_info_s *cb_info, *ret = _camera_client_wait_for_cb_return(api, cb_info, timeout); } + __camera_update_api_waiting(cb_info, api, -1); + muse_core_msg_json_factory_free(msg); return; @@ -501,6 +525,8 @@ static void _camera_msg_send_param1(int api, camera_cb_info_s *cb_info, /*LOGD("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_ipc_send_msg(cb_info->fd, msg); g_mutex_unlock(&cb_info->fd_lock); @@ -516,6 +542,8 @@ static void _camera_msg_send_param1(int api, camera_cb_info_s *cb_info, *ret = _camera_client_wait_for_cb_return(api, cb_info, timeout); } + __camera_update_api_waiting(cb_info, api, -1); + muse_core_msg_json_factory_free(msg); return; @@ -1617,12 +1645,16 @@ static void *_camera_msg_handler_func(gpointer data) g_mutex_lock(&cb_info->api_mutex[api]); if (muse_camera_msg_get(ret, cam_msg->recv_msg)) { - cb_info->api_ret[api] = ret; - cb_info->api_activating[api] = 1; + if (cb_info->api_waiting[api] > 0) { + cb_info->api_ret[api] = ret; + cb_info->api_activating[api] = 1; - /*LOGD("t:%d camera api %d - return 0x%x", type, ret);*/ + /*LOGD("t:%d camera api %d - return 0x%x", type, ret);*/ - g_cond_signal(&cb_info->api_cond[api]); + g_cond_signal(&cb_info->api_cond[api]); + } else { + LOGW("no waiting for this api [%d]", api); + } } else { LOGE("t:%d failed to get camera ret for api %d, msg %s", type, api, cam_msg->recv_msg); } @@ -1860,9 +1892,6 @@ static void __camera_process_msg(camera_cb_info_s *cb_info, char *msg) g_mutex_lock(&cb_info->api_mutex[api]); - cb_info->api_ret[api] = ret; - cb_info->api_activating[api] = 1; - switch (api) { case MUSE_CAMERA_API_CREATE: if (ret != CAMERA_ERROR_NONE) { @@ -1917,7 +1946,15 @@ static void __camera_process_msg(camera_cb_info_s *cb_info, char *msg) break; } - g_cond_signal(&cb_info->api_cond[api]); + if (cb_info->api_waiting[api] > 0) { + cb_info->api_ret[api] = ret; + cb_info->api_activating[api] = 1; + + g_cond_signal(&cb_info->api_cond[api]); + } else { + LOGW("no waiting for this api [%d]", api); + } + g_mutex_unlock(&cb_info->api_mutex[api]); } else if (api_class == MUSE_CAMERA_API_CLASS_THREAD_SUB || api == MUSE_CAMERA_CB_EVENT) { __camera_add_msg_to_queue(cb_info, api, event, event_class, msg); @@ -2167,6 +2204,8 @@ static camera_cb_info_s *_camera_client_callback_new(gint sockfd) goto ErrorExit; } + cb_info->api_waiting[MUSE_CAMERA_API_CREATE] = 1; + for (i = 0 ; i < MUSE_CAMERA_API_MAX ; i++) { g_mutex_init(&cb_info->api_mutex[i]); g_cond_init(&cb_info->api_cond[i]); @@ -2524,6 +2563,9 @@ int camera_create(camera_device_e device, camera_h *camera) LOGD("cb info : %d", pc->cb_info->fd); ret = _camera_client_wait_for_cb_return(api, pc->cb_info, CAMERA_CB_TIMEOUT); + + pc->cb_info->api_waiting[MUSE_CAMERA_API_CREATE] = 0; + if (ret == CAMERA_ERROR_NONE) { intptr_t handle = 0; muse_camera_msg_get_pointer(handle, pc->cb_info->recv_msg); @@ -3169,6 +3211,8 @@ int camera_set_display(camera_h camera, camera_display_type_e type, camera_displ } 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_ipc_send_msg(pc->cb_info->fd, msg); g_mutex_unlock(&pc->cb_info->fd_lock); @@ -3181,6 +3225,8 @@ int camera_set_display(camera_h camera, camera_display_type_e type, camera_displ 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_json_factory_free(msg); LOGD("wayland parent id : %d, window %d,%d,%dx%d", @@ -4851,6 +4897,8 @@ int camera_attr_set_geotag(camera_h camera, double latitude, double longitude, d } 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_ipc_send_msg(pc->cb_info->fd, msg); g_mutex_unlock(&pc->cb_info->fd_lock); @@ -4863,6 +4911,8 @@ int camera_attr_set_geotag(camera_h camera, double latitude, double longitude, d 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_json_factory_free(msg); LOGD("ret : 0x%x", ret); @@ -6429,6 +6479,8 @@ int camera_attr_set_display_roi_area(camera_h camera, int x, int y, int width, i } 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_ipc_send_msg(pc->cb_info->fd, msg); g_mutex_unlock(&pc->cb_info->fd_lock); @@ -6441,6 +6493,8 @@ int camera_attr_set_display_roi_area(camera_h camera, int x, int y, int width, i 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_json_factory_free(msg); LOGD("ret : 0x%x", ret); diff --git a/test/camera_test.c b/test/camera_test.c index 88211eb..7cb2630 100644 --- a/test/camera_test.c +++ b/test/camera_test.c @@ -62,19 +62,12 @@ struct appcore_ops ops = { appdata ad; GIOChannel *stdin_channel; camera_device_e cam_info; -int resolution_set; -int g_current_state; -int src_w, src_h; -int isMultishot; -int camera_state; -int camera_print_state; -int multishot_num; -static GTimer *timer = NULL; +static GTimer *timer; static int g_camera_device_changed_cb_id; GTimeVal previous_time; GTimeVal current_time; -GTimeVal res; +GTimeVal result_time; /*----------------------------------------------------------------------- | GLOBAL CONSTANT DEFINITIONS: | @@ -94,37 +87,9 @@ GTimeVal res; /*----------------------------------------------------------------------- | LOCAL #defines: | -----------------------------------------------------------------------*/ -#define test_ffmux_mp4 - - -#define DISPLAY_X_0 0 /* for direct FB */ -#define DISPLAY_Y_0 0 /* for direct FB */ - -#define DISPLAY_W_320 320 /* for direct FB */ -#define DISPLAY_H_240 240 /* for direct FB */ - - -#define IMAGE_ENC_QUALITY 85 /* quality of jpeg */ -#define IMAGE_CAPTURE_COUNT_STILL 1 /* the number of still-shot */ -#define IMAGE_CAPTURE_COUNT_MULTI 3 /* default the number of multi-shot */ -#define IMAGE_CAPTURE_COUNT_INTERVAL 100 /* millisecond */ - -#define MAX_FILE_SIZE_FOR_MMS (250 * 1024) - -#define EXT_JPEG "jpg" -#define EXT_MP4 "mp4" -#define EXT_3GP "3gp" -#define EXT_AMR "amr" -#define EXT_MKV "mkv" - -#define TARGET_FILENAME_PATH "/home/owner/content/" -#define STILL_CAPTURE_FILE_PATH_NAME TARGET_FILENAME_PATH"StillshotCapture" -#define MULTI_CAPTURE_FILE_PATH_NAME TARGET_FILENAME_PATH"MultishotCapture" -#define IMAGE_CAPTURE_THUMBNAIL_PATH TARGET_FILENAME_PATH"thumbnail.jpg" -#define IMAGE_CAPTURE_SCREENNAIL_PATH TARGET_FILENAME_PATH"screennail.yuv" -#define IMAGE_CAPTURE_EXIF_PATH TARGET_FILENAME_PATH"exif.raw" -#define CAPTURE_FILENAME_LEN 256 -#define MAX_STILLSHOT_CAPTURE_RESOLUTION_SUPPORTED 2 +#define DEFAULT_FILE_PATH "/home/owner/media" +#define MAX_FILE_NAME_LENGTH 256 +#define MAX_FILE_PATH_LENGTH (MAX_FILE_NAME_LENGTH - 20) #define CHECK_MM_ERROR(expr) \ do {\ @@ -179,14 +144,11 @@ enum { typedef struct _cam_handle { camera_h camera; int type; - int mode; /* image(capture)/video(recording) mode */ - int isMultishot; /* flag for multishot mode */ - int stillshot_count; /* total stillshot count */ - int multishot_count; /* total multishot count */ - const char *stillshot_filename; /* stored filename of stillshot */ - const char *multishot_filename; /* stored filename of multishot */ + 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; - int isMute; unsigned long long elapsed_time; } cam_handle_t; @@ -484,7 +446,8 @@ static void _camera_device_state_changed_cb(camera_device_e device, camera_devic static void _camera_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *user_data) { - g_print("\ncamera interrupted callback called %d\n", policy); + g_print("\ncamera interrupted callback called[state %d -> %d, policy %d]\n", + previous, current, policy); return; } @@ -639,16 +602,20 @@ static void _file_write(char *path, void *data, int size) 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[CAPTURE_FILENAME_LEN]; - - if (!hcamcorder->isMultishot) - snprintf(m_filename, CAPTURE_FILENAME_LEN, "/opt/usr/media/Stillshot%03d.jpg", hcamcorder->multishot_count++); - else - snprintf(m_filename, CAPTURE_FILENAME_LEN, "/opt/usr/media/Multishot%03d.jpg", hcamcorder->stillshot_count++); + char m_filename[MAX_FILE_NAME_LENGTH]; /* main image */ - if (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); + } return; } @@ -680,21 +647,19 @@ static void print_menu() g_print("\t Enter the media type:\n\t"); break; case MENU_STATE_MAIN: - if (hcamcorder->mode == MODE_VIDEO_CAPTURE) { - g_print("\n\t=======================================\n"); - if (cam_info == CAMERA_DEVICE_CAMERA1) - g_print("\t Video Capture (Front camera)\n"); - else if (cam_info == CAMERA_DEVICE_CAMERA0) - g_print("\t Video Capture (Rear camera)\n"); - 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 (Rear <-> Front)\n"); - g_print("\t 'b' back\n"); - g_print("\t=======================================\n"); - } + g_print("\n\t=======================================\n"); + if (cam_info == CAMERA_DEVICE_CAMERA1) + g_print("\t Video Capture (Front camera)\n"); + else if (cam_info == CAMERA_DEVICE_CAMERA0) + g_print("\t Video Capture (Rear camera)\n"); + 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 (Rear <-> Front)\n"); + g_print("\t 'b' back\n"); + g_print("\t=======================================\n"); break; case MENU_STATE_SETTING: g_print("\n\t=======================================\n"); @@ -737,7 +702,7 @@ static void print_menu() 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 'b' back\n"); g_print("\t=======================================\n"); break; @@ -753,71 +718,66 @@ static void print_menu() static void main_menu(gchar buf) { int err = 0; - camera_state_e capi_state; - if (hcamcorder->mode == MODE_VIDEO_CAPTURE) { - switch (buf) { - case '1': /* Capture */ - hcamcorder->isMultishot = FALSE; - camera_get_state(hcamcorder->camera, &capi_state); - 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->isMultishot = TRUE; - int interval = 0, count = 0; - flush_stdin(); - g_print("\ninput interval(ms)\n"); - err = scanf("%d", &interval); - flush_stdin(); - g_print("\ninput count(ms) \n"); - err = scanf("%d", &count); - 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_SETTING; - break; - case '4': /* Change device (Rear <-> Front) */ - camera_set_display_reuse_hint(hcamcorder->camera, true); + camera_state_e capi_state = CAMERA_STATE_NONE; + + switch (buf) { + case '1': /* Capture */ + hcamcorder->is_multishot = FALSE; + camera_get_state(hcamcorder->camera, &capi_state); + 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; + int interval = 0, count = 0; + flush_stdin(); + g_print("\n\tinput interval(ms) : "); + err = scanf("%d", &interval); + flush_stdin(); + g_print("\n\tinput count : "); + err = scanf("%d", &count); + 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_SETTING; + break; + case '4': /* Change device (Rear <-> Front) */ + camera_set_display_reuse_hint(hcamcorder->camera, true); - camera_stop_preview(hcamcorder->camera); + camera_stop_preview(hcamcorder->camera); - if (hcamcorder->type == CAMERA_DEVICE_CAMERA0) { - hcamcorder->type = CAMERA_DEVICE_CAMERA1; - } else { - hcamcorder->type = CAMERA_DEVICE_CAMERA0; - } + 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_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_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_display_mode(hcamcorder->camera, CAMERA_DISPLAY_MODE_LETTER_BOX); + camera_set_display_mode(hcamcorder->camera, CAMERA_DISPLAY_MODE_LETTER_BOX); - camera_start_preview(hcamcorder->camera); - break; - case 'b': /* back */ - camera_stop_preview(hcamcorder->camera); - camera_destroy(hcamcorder->camera); - hcamcorder->camera = NULL; - hcamcorder->menu_state = MENU_STATE_INIT; - print_menu(); - break; - default: - g_print("\t Invalid input \n"); - break; - } - } else { - g_print("\t Invalid mode, back to upper menu \n"); + camera_start_preview(hcamcorder->camera); + break; + case 'b': /* back */ + camera_stop_preview(hcamcorder->camera); + camera_destroy(hcamcorder->camera); + hcamcorder->camera = NULL; hcamcorder->menu_state = MENU_STATE_INIT; print_menu(); + break; + default: + g_print("\t Invalid input \n"); + break; } return; @@ -833,419 +793,428 @@ static void setting_menu(gchar buf) int i = 0; int value = 0; int err = 0; - int x = 0, y = 0, width = 0, height = 0; - - if (hcamcorder->mode == MODE_VIDEO_CAPTURE) { - switch (buf) { - /* Camera setting */ - case '0': /* Setting > Preview Resolution setting */ - g_print("*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); + int x = 0; + int y = 0; + int width = 0; + int height = 0; - flush_stdin(); - err = scanf("%d", &idx); - int result = 0; - if (resolution_list.count > idx && idx >= 0) { - g_print("-----------------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("invalid input %d\n", idx); - result = -1; - } - resolution_list.count = 0; - if (result != 0) - g_print("FAIL\n"); - else - g_print("PASS\n"); - break; - case '1': /* Setting > Capture Resolution setting */ - g_print("*Select the preview resolution!\n"); - g_print("-----------------CAPTURE RESOLUTION TEST: ---------------------\n"); - resolution_list.count = 0; - - camera_foreach_supported_capture_resolution(hcamcorder->camera, - capture_resolution_test_cb, &resolution_list); + switch (buf) { + /* Camera setting */ + case '0': /* Setting > Preview Resolution setting */ + g_print("*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); + + flush_stdin(); + err = scanf("%d", &idx); + int result = 0; + if (resolution_list.count > idx && idx >= 0) { + g_print("-----------------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("invalid input %d\n", idx); + result = -1; + } + resolution_list.count = 0; + if (result != 0) + g_print("FAIL\n"); + else + g_print("PASS\n"); + break; + case '1': /* Setting > Capture Resolution setting */ + g_print("*Select the preview resolution!\n"); + g_print("-----------------CAPTURE RESOLUTION TEST: ---------------------\n"); + resolution_list.count = 0; - flush_stdin(); - err = scanf("%d", &idx); - if (resolution_list.count > idx && idx >= 0) { + camera_foreach_supported_capture_resolution(hcamcorder->camera, + capture_resolution_test_cb, &resolution_list); - result = camera_set_capture_resolution(hcamcorder->camera, - resolution_list.width[idx], resolution_list.height[idx]); + flush_stdin(); + err = scanf("%d", &idx); + if (resolution_list.count > idx && idx >= 0) { - g_print("camera_set_capture_resolution with width =%d, height=%d ret=0x%x\n", - resolution_list.width[idx], resolution_list.height[idx], result); - } else { - g_print("invalid input %d\n", idx); - result = -1; - } - resolution_list.count = 0; - if (result != 0) - g_print("FAIL\n"); - else - g_print("PASS\n"); + result = camera_set_capture_resolution(hcamcorder->camera, + resolution_list.width[idx], resolution_list.height[idx]); - break; - case '2': /* Setting > Digital zoom level */ - g_print("*Digital zoom level !\n"); - camera_attr_get_zoom_range(hcamcorder->camera, &min, &max); - if (min >= max) - g_print("Not supported !! \n"); - else { - flush_stdin(); - g_print("\n Select Digital zoom level min %d - max %d\n", min, max); - err = scanf("%d", &idx); - bret = camera_attr_set_zoom(hcamcorder->camera, idx); - } - break; - case '3': /* Setting > AF mode */ - g_print("*AF mode !\n"); - g_print("\t1. AF Start !\n"); - g_print("\t2. AF Stop !\n\n"); - flush_stdin(); - err = scanf("%d", &idx); - switch (idx) { - case 1: - camera_start_focusing(hcamcorder->camera, 0); - break; - case 2: - camera_cancel_focusing(hcamcorder->camera); - break; - default: - g_print("Wrong Input[%d] !! \n", idx); - break; - } - break; - case '4': /* Setting > AF scan range */ - g_print("*AF scan range !\n"); - camera_attr_foreach_supported_af_mode(hcamcorder->camera, (camera_attr_supported_af_mode_cb)af_mode_foreach_cb, NULL); - flush_stdin(); - err = scanf("%d", &idx); - 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); - flush_stdin(); - g_print("\n Select Exposure mode \n"); - err = scanf("%d", &idx); - bret = camera_attr_set_exposure_mode(hcamcorder->camera, idx); - break; + g_print("camera_set_capture_resolution with width =%d, height=%d ret=0x%x\n", + resolution_list.width[idx], resolution_list.height[idx], result); + } else { + g_print("invalid input %d\n", idx); + result = -1; + } + resolution_list.count = 0; + if (result != 0) + g_print("FAIL\n"); + else + g_print("PASS\n"); - case '6': /* Setting > Exposure value */ - camera_attr_get_exposure_range(hcamcorder->camera, &min, &max); - if (min >= max) - g_print("Not supported !! \n"); - else { - flush_stdin(); - g_print("\n Select Exposure mode min%d -max %d\n", min, max); - err = scanf("%d", &idx); - bret = camera_attr_set_exposure(hcamcorder->camera, idx); - } - break; - case '7': /* Setting > F number */ + break; + case '2': /* Setting > Digital zoom level */ + g_print("*Digital zoom level !\n"); + camera_attr_get_zoom_range(hcamcorder->camera, &min, &max); + if (min >= max) 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 'i': /* Setting > ISO */ - g_print("*ISO !\n"); - camera_attr_foreach_supported_iso(hcamcorder->camera, iso_mode_cb, NULL); - flush_stdin(); - err = scanf("%d", &idx); - 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); - flush_stdin(); - err = scanf("%d", &idx); - 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 */ - flush_stdin(); - g_print("*Flip camera input\n"); - g_print(" 0. Flip NONE\n"); - g_print(" 1. Flip HORIZONTAL\n"); - g_print(" 2. Flip VERTICAL\n"); - g_print(" 3. Flip BOTH\n"); - err = scanf("%d", &idx); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - 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"); - flush_stdin(); - g_print("\n Select Jpeg quality \n"); - err = scanf("%d", &idx); - 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); - flush_stdin(); - err = scanf("%d", &idx); - bret = camera_set_preview_format(hcamcorder->camera, idx); - CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); - 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"); - flush_stdin(); - err = scanf("%d", &idx); - if (idx < 1 || idx > 8) - g_print("Wrong INPUT[%d]!! \n", idx); - else - camera_attr_set_tag_orientation(hcamcorder->camera, idx); - break; - case 'F': /* Getting > 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; - /* Display / Filter setting */ - case 'v': /* Display visible */ - g_print("* Display visible setting !\n"); - g_print("\n Select Display visible \n"); - flush_stdin(); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i+1, visible_mode[i]); - err = scanf("%d", &value); - bret = camera_set_display_visible(hcamcorder->camera, idx-1); - break; - case 'o': /* Setting > Display Mode */ - g_print("* Display mode!\n"); - flush_stdin(); - for (i = 0 ; i < 5 ; i++) - g_print("%d. %s\n", i, display_mode[i]); - err = scanf("%d", &idx); - bret = camera_set_display_mode(hcamcorder->camera, idx); - break; - case 'y': /* Setting > Rotate Display */ - flush_stdin(); - 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); - 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 */ - flush_stdin(); - 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); - 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); - flush_stdin(); - g_print("\n Select brightness min (%d) -max(%d)", min, max); - err = scanf("%d", &idx); - 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); - flush_stdin(); - g_print("\n Select Contrast min(%d)-max(%d)", min, max); - err = scanf("%d", &idx); - bret = camera_attr_set_contrast(hcamcorder->camera, idx); - break; - case 'w': /* Setting > White balance */ - g_print("*White balance !\n"); - flush_stdin(); - g_print("\n Select White balance \n"); - camera_attr_foreach_supported_whitebalance(hcamcorder->camera, white_balance_cb, NULL); - err = scanf("%d", &idx); - 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"); - flush_stdin(); - err = scanf("%d", &idx); - bret = camera_attr_set_effect(hcamcorder->camera, idx); - break; - case 'd': /* Setting > WDR */ - g_print("*WDR !\n"); - g_print("\n Select WDR Mode \n"); + else { flush_stdin(); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i+1, wdr_mode[i]); + g_print("\n Select Digital zoom level min %d - max %d\n", min, max); err = scanf("%d", &idx); - 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); + bret = camera_attr_set_zoom(hcamcorder->camera, idx); + } + break; + case '3': /* Setting > AF mode */ + g_print("*AF mode !\n"); + g_print("\t1. AF Start !\n"); + g_print("\t2. AF Stop !\n\n"); + flush_stdin(); + err = scanf("%d", &idx); + switch (idx) { + case 1: + camera_start_focusing(hcamcorder->camera, 0); 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"); - flush_stdin(); - err = scanf("%d", &idx); - bret = camera_attr_set_scene_mode(hcamcorder->camera, idx); + case 2: + camera_cancel_focusing(hcamcorder->camera); break; - case 'R': /* Setting > Display ROI area */ - g_print("* Set display roi area. Select x y width height \n"); - flush_stdin(); - err = scanf("%d %d %d %d", &x, &y, &width, &height); - 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); + default: + g_print("Wrong Input[%d] !! \n", idx); break; + } + break; + case '4': /* Setting > AF scan range */ + g_print("*AF scan range !\n"); + camera_attr_foreach_supported_af_mode(hcamcorder->camera, (camera_attr_supported_af_mode_cb)af_mode_foreach_cb, NULL); + flush_stdin(); + err = scanf("%d", &idx); + 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); + flush_stdin(); + g_print("\n Select Exposure mode \n"); + err = scanf("%d", &idx); + bret = camera_attr_set_exposure_mode(hcamcorder->camera, idx); + 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"); - flush_stdin(); - err = scanf("%d", &idx); - 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(cam_info, (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 'x': /* Setting > Capture mode ,Muitishot? */ - g_print("*Select Capture mode!\n"); + case '6': /* Setting > Exposure value */ + camera_attr_get_exposure_range(hcamcorder->camera, &min, &max); + if (min >= max) + g_print("Not supported !! \n"); + else { flush_stdin(); - g_print(" \n\t1. Stillshot mode\n\t2. Multishot mode\n\t3. HDR capture\n"); + g_print("\n Select Exposure mode min%d -max %d\n", min, max); err = scanf("%d", &idx); + 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; - switch (idx) { - case 1: - g_print("stillshot mode selected and capture callback is set!!!!\n"); - hcamcorder->isMultishot = FALSE; - camera_attr_set_hdr_mode(hcamcorder->camera, 0); - break; - case 2: - g_print("HDR Capture mode selected\n"); - hcamcorder->isMultishot = FALSE; - g_print("\nSelect HDR capture mode\n"); - flush_stdin(); - for (i = 0 ; i < 3 ; i++) - g_print("\t %d. %s\n", i+1, hdr_mode[i]); - err = scanf("%d", &idx); - bret = camera_attr_set_hdr_mode(hcamcorder->camera, idx-1); - break; - default: - g_print("Wrong input, select again!!\n"); + 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 'i': /* Setting > ISO */ + g_print("*ISO !\n"); + camera_attr_foreach_supported_iso(hcamcorder->camera, iso_mode_cb, NULL); + flush_stdin(); + err = scanf("%d", &idx); + 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); + flush_stdin(); + err = scanf("%d", &idx); + 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 */ + flush_stdin(); + g_print("*Flip camera input\n"); + g_print(" 0. Flip NONE\n"); + g_print(" 1. Flip HORIZONTAL\n"); + g_print(" 2. Flip VERTICAL\n"); + g_print(" 3. Flip BOTH\n"); + err = scanf("%d", &idx); + CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); + 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"); + flush_stdin(); + g_print("\n Select Jpeg quality \n"); + err = scanf("%d", &idx); + 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); + flush_stdin(); + err = scanf("%d", &idx); + bret = camera_set_preview_format(hcamcorder->camera, idx); + CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera)); + 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"); + flush_stdin(); + err = scanf("%d", &idx); + if (idx < 1 || idx > 8) + g_print("Wrong INPUT[%d]!! \n", idx); + else + camera_attr_set_tag_orientation(hcamcorder->camera, idx); + break; + case 'F': /* Getting > 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; + /* Display / Filter setting */ + case 'v': /* Display visible */ + g_print("* Display visible setting !\n"); + g_print("\n Select Display visible \n"); + flush_stdin(); + for (i = 0 ; i < 2 ; i++) + g_print("\t %d. %s\n", i+1, visible_mode[i]); + err = scanf("%d", &value); + bret = camera_set_display_visible(hcamcorder->camera, idx-1); + break; + case 'o': /* Setting > Display Mode */ + g_print("* Display mode!\n"); + flush_stdin(); + for (i = 0 ; i < 5 ; i++) + g_print("%d. %s\n", i, display_mode[i]); + err = scanf("%d", &idx); + bret = camera_set_display_mode(hcamcorder->camera, idx); + break; + case 'y': /* Setting > Rotate Display */ + flush_stdin(); + 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); + 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 */ + flush_stdin(); + 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); + 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); + flush_stdin(); + g_print("\n Select brightness min (%d) -max(%d)", min, max); + err = scanf("%d", &idx); + 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); + flush_stdin(); + g_print("\n Select Contrast min(%d)-max(%d)", min, max); + err = scanf("%d", &idx); + bret = camera_attr_set_contrast(hcamcorder->camera, idx); + break; + case 'w': /* Setting > White balance */ + g_print("*White balance !\n"); + flush_stdin(); + g_print("\n Select White balance \n"); + camera_attr_foreach_supported_whitebalance(hcamcorder->camera, white_balance_cb, NULL); + err = scanf("%d", &idx); + 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"); + flush_stdin(); + err = scanf("%d", &idx); + bret = camera_attr_set_effect(hcamcorder->camera, idx); + break; + case 'd': /* Setting > WDR */ + g_print("*WDR !\n"); + g_print("\n Select WDR Mode \n"); + flush_stdin(); + for (i = 0 ; i < 2 ; i++) + g_print("\t %d. %s\n", i+1, wdr_mode[i]); + err = scanf("%d", &idx); + 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"); + flush_stdin(); + err = scanf("%d", &idx); + 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"); + flush_stdin(); + err = scanf("%d %d %d %d", &x, &y, &width, &height); + 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"); + flush_stdin(); + err = scanf("%d", &idx); + 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(cam_info, (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 'x': /* Setting > Capture mode ,Muitishot? */ + g_print("*Select Capture mode!\n"); + flush_stdin(); + g_print(" \n\t1. Stillshot mode\n\t2. Multishot mode\n\t3. HDR capture\n"); + err = scanf("%d", &idx); + + 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 'l': /* Setting > Face detection setting */ - g_print("* Face detect mode !\n"); - flush_stdin(); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s \n", i+1, detection_mode[i]); - err = scanf("%d", &idx); - if (camera_is_supported_face_detection(hcamcorder->camera)) { - if (idx >= 0 && idx < 2) - bret = camera_start_face_detection(hcamcorder->camera, _face_detected, NULL); - } 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"); - flush_stdin(); - for (i = 0; i < 2; i++) - g_print("\t %d. %s\n", i+1, ahs_mode[i]); - err = scanf("%d", &idx); - bret = camera_attr_enable_anti_shake(hcamcorder->camera, idx-1); - break; - case 'K': /* Setting > Video-stabilization */ - g_print("*Video-stabilization !\n"); - g_print("\n Select Video-stabilization mode \n"); + case 2: + g_print("HDR Capture mode selected\n"); + hcamcorder->is_multishot = FALSE; + g_print("\nSelect HDR capture mode\n"); flush_stdin(); - for (i = 0 ; i < 2 ; i++) - g_print("\t %d. %s\n", i+1, vs_mode[i]); + for (i = 0 ; i < 3 ; i++) + g_print("\t %d. %s\n", i+1, hdr_mode[i]); err = scanf("%d", &idx); - if (idx == 1) { - g_print("\n Restart preview with NV12 and 720p resolution\n"); - err = camera_stop_preview(hcamcorder->camera); - camera_set_preview_resolution(hcamcorder->camera, 1280, 720); - camera_set_preview_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_NV12); - camera_attr_enable_video_stabilization(hcamcorder->camera, idx-1); - if (err == 0) { - err = camera_start_preview(hcamcorder->camera); - if (err != 0) - g_print("\n Restart FAILED! %x\n", err); - } - } - break; - case 'u': /* Touch AF area */ - g_print("* Touch AF area !\n"); - flush_stdin(); - g_print("\n Input x,y,width,height \n"); - err = scanf("%d,%d,%d,%d", &x, &y, &width, &height); - 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 'b': /* back */ - hcamcorder->menu_state = MENU_STATE_MAIN; + bret = camera_attr_set_hdr_mode(hcamcorder->camera, idx-1); break; default: - g_print("\t Invalid input \n"); + g_print("Wrong input, select again!!\n"); break; } - } else { - g_print("\t Invalid mode, back to upper menu \n"); + break; + case 'l': /* Setting > Face detection setting */ + g_print("* Face detect mode !\n"); + flush_stdin(); + for (i = 0 ; i < 2 ; i++) + g_print("\t %d. %s \n", i+1, detection_mode[i]); + err = scanf("%d", &idx); + if (camera_is_supported_face_detection(hcamcorder->camera)) { + if (idx >= 0 && idx < 2) + bret = camera_start_face_detection(hcamcorder->camera, _face_detected, NULL); + } 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"); + flush_stdin(); + for (i = 0; i < 2; i++) + g_print("\t %d. %s\n", i+1, ahs_mode[i]); + err = scanf("%d", &idx); + bret = camera_attr_enable_anti_shake(hcamcorder->camera, idx-1); + break; + case 'K': /* Setting > Video-stabilization */ + g_print("*Video-stabilization !\n"); + g_print("\n Select Video-stabilization mode \n"); + flush_stdin(); + for (i = 0 ; i < 2 ; i++) + g_print("\t %d. %s\n", i+1, vs_mode[i]); + err = scanf("%d", &idx); + if (idx == 1) { + g_print("\n Restart preview with NV12 and 720p resolution\n"); + err = camera_stop_preview(hcamcorder->camera); + camera_set_preview_resolution(hcamcorder->camera, 1280, 720); + camera_set_preview_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_NV12); + camera_attr_enable_video_stabilization(hcamcorder->camera, idx-1); + if (err == 0) { + err = camera_start_preview(hcamcorder->camera); + if (err != 0) + g_print("\n Restart FAILED! %x\n", err); + } + } + break; + case 'u': /* Touch AF area */ + g_print("* Touch AF area !\n"); + flush_stdin(); + g_print("\n Input x,y,width,height \n"); + err = scanf("%d,%d,%d,%d", &x, &y, &width, &height); + 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"); + flush_stdin(); + g_print("\n Input file path to save captured data(string) : "); + if (fgets(hcamcorder->file_path, sizeof(hcamcorder->file_path), stdin)) { + hcamcorder->file_path[strlen(hcamcorder->file_path) - 1] = '\0'; + g_print("\ncaptured data will be saved in [%s]\n", hcamcorder->file_path); + } else { + g_print("\nset file path failed\n"); + } + 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); @@ -1309,16 +1278,12 @@ static gboolean cmd_input(GIOChannel *channel) static gboolean init_handle() { - hcamcorder->mode = MODE_VIDEO_CAPTURE; /* image(capture)/video(recording) mode */ - hcamcorder->isMultishot = FALSE; - hcamcorder->stillshot_count = 0; /* total stillshot count */ - hcamcorder->multishot_count = 0; /* total multishot count */ - hcamcorder->stillshot_filename = STILL_CAPTURE_FILE_PATH_NAME; /* stored filename of stillshot */ - hcamcorder->multishot_filename = MULTI_CAPTURE_FILE_PATH_NAME; /* stored filename of multishot */ + 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->isMute = FALSE; hcamcorder->elapsed_time = 0; - multishot_num = IMAGE_CAPTURE_COUNT_MULTI; return TRUE; } @@ -1376,12 +1341,10 @@ static gboolean mode_change(gchar buf) switch (buf) { case '1': - hcamcorder->mode = MODE_VIDEO_CAPTURE; hcamcorder->type = cam_info = CAMERA_DEVICE_CAMERA1; check = TRUE; break; case '2': - hcamcorder->mode = MODE_VIDEO_CAPTURE; hcamcorder->type = cam_info = CAMERA_DEVICE_CAMERA0; check = TRUE; break; @@ -1405,7 +1368,6 @@ static gboolean mode_change(gchar buf) return FALSE; case 'q': g_print("\t Quit Camcorder Testsuite!!\n"); - hcamcorder->mode = -1; elm_exit(); return FALSE; default: @@ -1428,8 +1390,6 @@ static gboolean mode_change(gchar buf) return -1; } - camera_print_state = CAMERA_STATE_CREATED; - check = FALSE; while (!check) { g_print("\n\tEnter the Display Type\n"); @@ -1473,11 +1433,10 @@ static gboolean mode_change(gchar buf) camera_start_preview(hcamcorder->camera); g_get_current_time(¤t_time); - timersub(¤t_time, &previous_time, &res); + timersub(¤t_time, &previous_time, &result_time); - g_print("\n\tCamera Starting Time : %ld.%lds\n", res.tv_sec, res.tv_usec); + g_print("\n\tCamera Starting Time : %ld.%lds\n", result_time.tv_sec, result_time.tv_usec); - camera_print_state = CAMERA_STATE_PREVIEW; hcamcorder->menu_state = MENU_STATE_MAIN; print_menu(); @@ -1596,7 +1555,6 @@ int main(int argc, char **argv) int bret; hcamcorder = (cam_handle_t *) g_malloc0(sizeof(cam_handle_t)); - camera_state = CAMERA_STATE_NONE; 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); |