4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jeongmo Yang <jm80.yang@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 /*=======================================================================================
24 =======================================================================================*/
33 #include <Elementary.h>
35 /*-----------------------------------------------------------------------
36 | GLOBAL VARIABLE DEFINITIONS: |
37 -----------------------------------------------------------------------*/
38 #define EXPORT_API __attribute__((__visibility__("default")))
40 #define PACKAGE "recorder_testsuite"
44 #define LOG_TAG "RECORDER_TESTSUITE"
47 GIOChannel *stdin_channel;
55 static GTimer *timer = NULL;
58 /*-----------------------------------------------------------------------
59 | GLOBAL CONSTANT DEFINITIONS: |
60 -----------------------------------------------------------------------*/
63 /*-----------------------------------------------------------------------
64 | IMPORTED VARIABLE DECLARATIONS: |
65 -----------------------------------------------------------------------*/
68 /*-----------------------------------------------------------------------
69 | IMPORTED FUNCTION DECLARATIONS: |
70 -----------------------------------------------------------------------*/
73 /*-----------------------------------------------------------------------
75 -----------------------------------------------------------------------*/
78 #define DISPLAY_W_320 320 /* for direct FB */
79 #define DISPLAY_H_240 240 /* for direct FB */
82 #define SRC_VIDEO_FRAME_RATE_15 15 /* video input frame rate */
83 #define SRC_VIDEO_FRAME_RATE_30 30 /* video input frame rate */
84 #define IMAGE_ENC_QUALITY 85 /* quality of jpeg */
86 #define MAX_FILE_SIZE_FOR_MMS (250 * 1024)
88 #define EXT_JPEG "jpg"
94 #define TARGET_FILENAME_PATH "/home/owner/content/Sounds/"
95 #define IMAGE_CAPTURE_EXIF_PATH TARGET_FILENAME_PATH"exif.raw"
96 #define TARGET_FILENAME_VIDEO TARGET_FILENAME_PATH"test_rec_video.mp4"
97 #define TARGET_FILENAME_AUDIO TARGET_FILENAME_PATH"test_rec_audio.m4a"
98 #define CAPTURE_FILENAME_LEN 256
100 #define AUDIO_SOURCE_SAMPLERATE_AAC 44100
101 #define AUDIO_SOURCE_SAMPLERATE_AMR 8000
102 #define AUDIO_SOURCE_CHANNEL_AAC 2
103 #define AUDIO_SOURCE_CHANNEL_AMR 1
104 #define VIDEO_ENCODE_BITRATE 40000000 /* bps */
106 #define CHECK_MM_ERROR(expr) \
111 printf("[%s:%d] error code : %x \n", __func__, __LINE__, ret); \
118 #define SAFE_FREE(x) if (x) { g_free(x); x = NULL; }
128 * Enumerations for command
130 #define SENSOR_WHITEBALANCE_NUM 10
131 #define SENSOR_COLOR_TONE_NUM 31
132 #define SENSOR_FLIP_NUM 3
133 #define SENSOR_PROGRAM_MODE_NUM 15
134 #define SENSOR_FOCUS_NUM 6
135 #define SENSOR_INPUT_ROTATION 4
136 #define SENSOR_AF_SCAN_NUM 4
137 #define SENSOR_ISO_NUM 8
138 #define SENSOR_EXPOSURE_NUM 9
139 #define SENSOR_IMAGE_FORMAT 9
142 /*-----------------------------------------------------------------------
143 | LOCAL CONSTANT DEFINITIONS: |
144 -----------------------------------------------------------------------*/
146 MODE_VIDEO_CAPTURE, /* recording and image capture mode */
147 MODE_AUDIO, /* audio recording*/
157 /*-----------------------------------------------------------------------
158 | LOCAL DATA TYPE DEFINITIONS: |
159 -----------------------------------------------------------------------*/
160 typedef struct _cam_handle {
163 int mode; /*video/audio(recording) mode */
167 unsigned long long elapsed_time;
170 typedef struct _cam_xypair {
171 const char *attr_subcat_x;
172 const char *attr_subcat_y;
190 camera_attr_af_mode_e mode;
200 camera_attr_exposure_mode_e mode;
205 camera_attr_iso_e mode;
210 camera_rotation_e mode;
212 } camera_rotation_stack;
214 /*---------------------------------------------------------------------------
215 | LOCAL VARIABLE DEFINITIONS: |
216 ---------------------------------------------------------------------------*/
217 static cam_handle_t *hcamcorder ;
219 const char *wb[SENSOR_WHITEBALANCE_NUM] = {
232 const char *ct[SENSOR_COLOR_TONE_NUM] = {
258 "SELECTVE_COLOR_RED",
259 "SELECTVE_COLOR_GREEN",
260 "SELECTVE_COLOR_BLUE",
261 "SELECTVE_COLOR_YELLOW",
262 "SELECTVE_COLOR_RED_YELLOW",
266 const char *flip[SENSOR_FLIP_NUM] = {
272 const char *program_mode[SENSOR_PROGRAM_MODE_NUM] = {
290 const char *focus_mode[SENSOR_FOCUS_NUM] = {
299 const char *camera_rotation[SENSOR_INPUT_ROTATION] = {
306 const char *af_scan[SENSOR_AF_SCAN_NUM] = {
313 const char *iso_mode[SENSOR_ISO_NUM] = {
324 const char *exposure_mode[SENSOR_EXPOSURE_NUM] = {
336 const char *image_fmt[SENSOR_IMAGE_FORMAT] = {
348 const char *face_zoom_mode[] = {
353 const char *display_mode[] = {
355 "Primary Video ON and Secondary Video Full Screen",
356 "Primary Video OFF and Secondary Video Full Screen",
359 const char *output_mode[] = {
361 "Original Size mode",
363 "Cropped Full Screen mode",
367 const char *capture_sound[] = {
373 const char *rotate_mode[] = {
380 const char* strobe_mode[] = {
384 "Strobe RedEyeReduction",
386 "Strobe FrontCurtain",
387 "Strobe RearCurtain",
391 const char *detection_mode[2] = {
392 "Face Detection OFF",
396 const char *wdr_mode[] = {
402 const char *hdr_mode[] = {
405 "HDR ON and Original",
408 const char *ahs_mode[] = {
409 "Anti-handshake OFF",
411 "Anti-handshake AUTO",
412 "Anti-handshake MOVIE",
415 const char *vs_mode[] = {
416 "Video-stabilization OFF",
417 "Video-stabilization ON",
420 const char *visible_mode[] = {
426 /*---------------------------------------------------------------------------
427 | LOCAL FUNCTION PROTOTYPES: |
428 ---------------------------------------------------------------------------*/
429 static void print_menu();
430 static gboolean cmd_input(GIOChannel *channel);
431 static gboolean init(int type);
432 static gboolean mode_change();
435 bool preview_resolution_cb(int width, int height, void *user_data)
437 resolution_stack *data = (resolution_stack*)user_data;
440 printf("NULL data\n");
444 data->width[data->count] = width;
445 data->height[data->count] = height;
447 printf("%d. %dx%d\n", data->count, width, height);
454 bool af_mode_foreach_cb(camera_attr_iso_e mode , void *user_data)
456 printf("%d.%s\n", mode, af_scan[mode]);
460 bool exposure_mode_cb(camera_attr_af_mode_e mode , void *user_data)
462 exposure_stack *data = (exposure_stack*)user_data;
465 printf("NULL data\n");
472 printf("%d.%s\n", mode, exposure_mode[mode]);
476 bool iso_mode_cb(camera_attr_iso_e mode , void *user_data)
478 printf("%d.%s\n", mode, iso_mode[mode]);
482 bool camera_rotation_cb(camera_rotation_e mode , void *user_data)
484 camera_rotation_stack *data = (camera_rotation_stack*)user_data;
487 printf("NULL data\n");
494 printf("%d.%s\n", mode, camera_rotation[mode]);
498 bool preview_format_cb(camera_pixel_format_e mode , void *user_data)
500 printf("%d.%s\n", mode, image_fmt[mode]);
504 bool white_balance_cb(camera_attr_whitebalance_e mode , void *user_data)
506 printf("%d.%s\n", mode, wb[mode]);
510 bool colortone_cb(camera_attr_effect_mode_e mode , void *user_data)
512 printf("%d.%s\n", mode, ct[mode]);
516 bool program_mode_cb(camera_attr_scene_mode_e mode , void *user_data)
518 printf("%d.%s\n", mode, program_mode[mode]);
522 bool strobe_mode_cb(camera_attr_flash_mode_e mode , void *user_data)
524 printf("%d.%s\n", mode, strobe_mode[mode]);
528 void _face_detected(camera_detected_face_s *faces, int count, void *user_data)
530 printf("face detected!!\n");
532 for (i = 0 ; i < count ; i++)
533 printf("%d) - %dx%d\n", faces[i].id, faces[i].x, faces[i].y);
536 void _state_changed_cb(recorder_state_e previous_state, recorder_state_e current_state, bool by_policy, void *user_data)
538 printf("\n\tstate changed[by_policy:%d] : %d -> %d\n\n", by_policy, previous_state, current_state);
541 void _recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
543 static unsigned long long elapsed = -1;
544 if (elapsed != elapsed_time / 1000) {
545 unsigned long temp_time;
546 unsigned long long hour, minute, second;
547 elapsed = elapsed_time / 1000;
549 hour = temp_time / 3600;
550 temp_time = elapsed % 3600;
551 minute = temp_time / 60;
552 second = temp_time % 60;
553 printf("\n\tCurrent Time - %lld:%lld:%lld, filesize %lld KB\n\n",
554 hour, minute, second, file_size);
558 void _recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
560 printf("\n\tRECORDING LIMIT REACHED [type: %d]\n\n", type);
564 static inline void flush_stdin()
567 while ((ch = getchar()) != EOF && ch != '\n');
571 static void print_menu()
573 switch (hcamcorder->menu_state) {
574 case MENU_STATE_MAIN:
575 if (hcamcorder->mode == MODE_VIDEO_CAPTURE) {
576 g_print("\n\t=======================================\n");
577 if (recorder_state <= RECORDER_STATE_NONE) {
578 g_print("\t '1' Start Recording\n");
579 g_print("\t '2' Setting\n");
580 g_print("\t 'b' back\n");
581 } else if (recorder_state == RECORDER_STATE_RECORDING) {
582 g_print("\t 'p' Pause Recording\n");
583 g_print("\t 'c' Cancel\n");
584 g_print("\t 's' Save\n");
585 } else if (recorder_state == RECORDER_STATE_PAUSED) {
586 g_print("\t 'r' Resume Recording\n");
587 g_print("\t 'c' Cancel\n");
588 g_print("\t 's' Save\n");
590 g_print("\t=======================================\n");
591 } else if (hcamcorder->mode == MODE_AUDIO) {
592 g_print("\n\t=======================================\n");
593 g_print("\t Audio Recording\n");
594 g_print("\t=======================================\n");
595 if (recorder_state <= RECORDER_STATE_NONE) {
596 g_print("\t '1' Start Recording\n");
597 g_print("\t 'b' back\n");
598 } else if (recorder_state == RECORDER_STATE_RECORDING) {
599 g_print("\t 'p' Pause Recording\n");
600 g_print("\t 'c' Cancel\n");
601 g_print("\t 's' Save\n");
602 } else if (recorder_state == RECORDER_STATE_PAUSED) {
603 g_print("\t 'r' Resume Recording\n");
604 g_print("\t 'c' Cancel\n");
605 g_print("\t 's' Save\n");
607 g_print("\t=======================================\n");
611 case MENU_STATE_SETTING:
612 g_print("\n\t=======================================\n");
613 g_print("\t Video Capture > Setting\n");
614 g_print("\t=======================================\n");
615 g_print("\t >>>>>>>>>>>>>>>>>>>>>>>>>>>> [Camera] \n");
616 g_print("\t '0' Preview resolution \n");
617 g_print("\t '2' Digital zoom level \n");
618 g_print("\t '3' Optical zoom level \n");
619 g_print("\t '4' AF mode \n");
620 g_print("\t '5' AF scan range \n");
621 g_print("\t '6' Exposure mode \n");
622 g_print("\t '7' Exposure value \n");
623 g_print("\t '8' F number \n");
624 g_print("\t '9' Shutter speed \n");
625 g_print("\t 'i' ISO \n");
626 g_print("\t 'r' Rotate camera input \n");
627 g_print("\t 'f' Flip camera input \n");
628 g_print("\t >>>>>>>>>>>>>>>>>>>> [Display/Filter]\n");
629 g_print("\t 'v' Visible \n");
630 g_print("\t 'n' Display mode \n");
631 g_print("\t 'o' Output mode \n");
632 g_print("\t 'y' Rotate display \n");
633 g_print("\t 'Y' Flip display \n");
634 g_print("\t 'g' Brightness \n");
635 g_print("\t 'c' Contrast \n");
636 g_print("\t 's' Saturation \n");
637 g_print("\t 'h' Hue \n");
638 g_print("\t 'a' Sharpness \n");
639 g_print("\t 'w' White balance \n");
640 g_print("\t 't' Color tone \n");
641 g_print("\t 'd' WDR \n");
642 g_print("\t 'e' EV program mode \n");
643 g_print("\t >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [etc.]\n");
644 g_print("\t 'z' Strobe (Flash) \n");
645 g_print("\t 'l' Face detection \n");
646 g_print("\t 'k' Anti-handshake \n");
647 g_print("\t 'K' Video-stabilization \n");
648 g_print("\t 'u' Touch AF area \n");;
649 g_print("\t 'M' Camcorder Motion Rate setting \n");
650 g_print("\t 'b' back\n");
651 g_print("\t=======================================\n");
655 LOGE("unknow menu state !!\n");
662 static void main_menu(gchar buf)
666 if (hcamcorder->mode == MODE_VIDEO_CAPTURE) {
667 if (recorder_state == RECORDER_STATE_NONE) {
669 case '1': /* Start Recording */
670 g_print("*Recording start!\n");
671 hcamcorder->elapsed_time = 0;
673 g_timer_reset(timer);
674 err = recorder_start(hcamcorder->recorder);
677 LOGE("Rec start camcorder_record 0x%x", err);
679 recorder_state = RECORDER_STATE_RECORDING;
682 case '2': /* Setting */
683 hcamcorder->menu_state = MENU_STATE_SETTING;
687 hcamcorder->menu_state = MENU_STATE_MAIN;
692 g_print("\t Invalid input \n");
695 } else if (recorder_state == RECORDER_STATE_RECORDING || recorder_state == RECORDER_STATE_PAUSED) {
697 case 'p': /* Pause Recording */
698 g_print("*Pause!\n");
699 err = recorder_pause(hcamcorder->recorder);
702 LOGE("Rec pause camcorder_pause = %x", err);
704 recorder_state = RECORDER_STATE_PAUSED;
707 case 'r': /* Resume Recording */
708 g_print("*Resume!\n");
709 err = recorder_start(hcamcorder->recorder);
711 LOGE("Rec start camcorder_record = %x", err);
713 recorder_state = RECORDER_STATE_RECORDING;
716 case 'c': /* Cancel */
717 g_print("*Cancel Recording !\n");
719 err = recorder_cancel(hcamcorder->recorder);
722 LOGE("Cancel recording camcorder_cancel = %x", err);
724 recorder_state = RECORDER_STATE_NONE;
728 g_print("*Save Recording!\n");
729 g_timer_reset(timer);
731 err = recorder_commit(hcamcorder->recorder);
734 LOGE("Save recording recorder_commit = %x", err);
736 recorder_state = RECORDER_STATE_NONE;
740 g_print("\t Invalid input \n");
744 LOGE("Wrong camcorder state, check status!!");
746 } else if (hcamcorder->mode == MODE_AUDIO) {
747 if (recorder_state == RECORDER_STATE_NONE) {
749 case '1': /* Start Recording */
750 g_print("*Recording start!\n");
751 hcamcorder->elapsed_time = 0;
752 g_timer_reset(timer);
753 err = recorder_start(hcamcorder->recorder);
756 LOGE("Rec start camcorder_record = %x", err);
758 recorder_state = RECORDER_STATE_RECORDING;
762 hcamcorder->menu_state = MENU_STATE_MAIN;
767 g_print("\t Invalid input \n");
770 } else if (recorder_state == RECORDER_STATE_RECORDING || recorder_state == RECORDER_STATE_PAUSED) {
772 case 'p': /* Pause Recording */
773 g_print("*Pause!\n");
774 err = recorder_pause(hcamcorder->recorder);
777 LOGE("Rec pause camcorder_pause = %x", err);
779 recorder_state = RECORDER_STATE_PAUSED;
782 case 'r': /* Resume Recording */
783 g_print("*Resume!\n");
784 err = recorder_start(hcamcorder->recorder);
786 LOGE("Rec start camcorder_record = %x", err);
788 recorder_state = RECORDER_STATE_RECORDING;
791 case 'c': /* Cancel */
792 g_print("*Cancel Recording !\n");
793 err = recorder_cancel(hcamcorder->recorder);
796 LOGE("Cancel recording camcorder_cancel = %x", err);
798 recorder_state = RECORDER_STATE_NONE;
802 g_print("*Save Recording!\n");
803 g_timer_reset(timer);
804 err = recorder_commit(hcamcorder->recorder);
807 LOGE("Save recording recorder_commit = %x", err);
809 recorder_state = RECORDER_STATE_NONE;
813 g_print("\t Invalid input \n");
817 LOGE("Wrong camcorder state, check status!!");
820 g_print("\t Invalid mode, back to upper menu \n");
821 hcamcorder->menu_state = MENU_STATE_MAIN;
827 static void setting_menu(gchar buf)
829 gboolean bret = FALSE;
835 int x = 0, y = 0, width = 0, height = 0;
837 if (hcamcorder->mode == MODE_VIDEO_CAPTURE) {
840 case '0': /* Setting > Preview Resolution setting */
841 g_print("*Select the preview resolution!\n");
842 resolution_stack resolution_list;
843 resolution_list.count = 0;
844 recorder_foreach_supported_video_resolution(hcamcorder->recorder, preview_resolution_cb, &resolution_list);
846 err = scanf("%d", &idx);
848 preview_test_data data;
850 if (resolution_list.count > idx && idx >= 0) {
852 data.expected_width = resolution_list.width[idx];
853 data.expected_height = resolution_list.height[idx];
855 printf("-----------------PREVIEW RESOLUTION (%dx%d)---------------------\n", data.expected_width, data.expected_height);
856 result = recorder_set_video_resolution(hcamcorder->recorder, data.expected_width, data.expected_height);
858 printf("invalid input %d\n", idx);
862 resolution_list.count = 0;
870 case '2': /* Setting > Digital zoom level */
871 g_print("*Digital zoom level !\n");
873 camera_attr_get_zoom_range(hcamcorder->camera, &min, &max);
875 g_print("Not supported !! \n");
878 g_print("\n Select Digital zoom level min %d - max %d\n", min, max);
879 err = scanf("%d", &idx);
880 bret = camera_attr_set_zoom(hcamcorder->camera, idx);
885 case '3': /* Setting > AF mode */
887 g_print("*AF mode !\n");
888 g_print("\t1. AF Start !\n");
889 g_print("\t2. AF Stop !\n\n");
892 err = scanf("%d", &idx);
895 camera_start_focusing(hcamcorder->camera, 0);
898 camera_cancel_focusing(hcamcorder->camera);
901 g_print("Wrong Input[%d] !! \n", idx);
907 case '4': /* Setting > AF scan range */
908 g_print("*AF scan range !\n");
910 af_stack af_mode_list;
911 af_mode_list.count = 0;
912 camera_attr_foreach_supported_af_mode(hcamcorder->camera, (camera_attr_supported_af_mode_cb)af_mode_foreach_cb , NULL);
915 data1.ispass = false;
916 data1.expected_mode = af_mode_list.mode;
918 err = scanf("%d", &idx);
920 bret = camera_attr_set_af_mode(hcamcorder->camera, idx);
923 case '5': /* Setting > Exposure mode */
924 g_print("* Exposure mode!\n");
926 camera_attr_foreach_supported_exposure_mode(hcamcorder->camera, (camera_attr_supported_exposure_mode_cb)exposure_mode_cb, NULL);
930 g_print("\n Select Exposure mode \n");
931 err = scanf("%d", &idx);
932 bret = camera_attr_set_exposure_mode(hcamcorder->camera, idx);
936 case '6': /* Setting > Exposure value */
937 camera_attr_get_exposure_range(hcamcorder->camera, &min, &max);
939 g_print("Not supported !! \n");
943 g_print("\n Select Exposure mode min%d -max %d\n", min, max);
944 err = scanf("%d", &idx);
945 bret = camera_attr_set_exposure(hcamcorder->camera, idx);
949 case '7': /* Setting > F number */
950 g_print("Not supported !! \n");
953 case 'i': /* Setting > ISO */
955 camera_attr_foreach_supported_iso(hcamcorder->camera, iso_mode_cb, NULL);
959 err = scanf("%d", &idx);
960 bret = camera_attr_set_iso(hcamcorder->camera, idx);
963 case 'r': /* Setting > Rotate camera input when recording */
964 g_print("*Rotate camera input\n");
965 camera_attr_foreach_supported_stream_rotation(hcamcorder->camera, camera_rotation_cb, NULL);
968 err = scanf("%d", &idx);
969 CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera));
970 bret = camera_attr_set_stream_rotation(hcamcorder->camera, idx);
971 CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera));
974 case 'f': /* Setting > Flip camera input */
976 g_print("*Flip camera input\n");
977 g_print(" 0. Flip NONE\n");
978 g_print(" 1. Flip HORIZONTAL\n");
979 g_print(" 2. Flip VERTICAL\n");
980 g_print(" 3. Flip BOTH\n");
982 err = scanf("%d", &idx);
984 CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera));
985 camera_attr_set_stream_flip(hcamcorder->camera, idx);
986 CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera));
989 /* Display / Filter setting */
990 case 'v': /* Display visible */
991 g_print("* Display visible setting !\n");
993 g_print("\n Select Display visible \n");
996 for (i = 0; i < 2; i++)
997 g_print("\t %d. %s\n", i+1, visible_mode[i]);
999 err = scanf("%d", &value);
1000 bret = camera_set_display_visible(hcamcorder->camera, idx-1);
1005 case 'o': /* Setting > Display MODe */
1006 g_print("* Display mode!\n");
1009 for (i = 1 ; i <= 2 ; i++)
1010 g_print("%d. %s\n", i, display_mode[i]);
1012 err = scanf("%d", &idx);
1013 bret = camera_set_display_mode(hcamcorder->camera, idx-1);
1016 case 'y': /* Setting > Rotate Display */
1019 g_print("\n Select Rotate mode\n");
1020 g_print("\t0. 0\n\t1. 90\n\t2. 180\n\t3. 270\n\n");
1021 err = scanf("%d", &idx);
1022 CHECK_MM_ERROR(camera_stop_preview(hcamcorder->camera));
1023 bret = camera_set_display_rotation(hcamcorder->camera, idx);
1024 CHECK_MM_ERROR(camera_start_preview(hcamcorder->camera));
1027 case 'Y': /* Setting > Flip Display */
1029 g_print("\n Select Rotate mode\n");
1030 g_print("\t0. NONE\n\t1. HORIZONTAL\n\t2. VERTICAL\n\t3. BOTH\n\n");
1031 err = scanf("%d", &idx);
1032 bret = camera_set_display_flip(hcamcorder->camera, idx);
1035 case 'g': /* Setting > Brightness */
1036 g_print("*Brightness !\n");
1037 camera_attr_get_brightness_range(hcamcorder->camera, &min, &max);
1040 g_print("\n Select brightness min (%d) -max(%d)", min, max);
1041 err = scanf("%d", &idx);
1042 bret = camera_attr_set_brightness(hcamcorder->camera, idx);
1045 case 'c': /* Setting > Contrast */
1046 g_print("*Contrast !\n");
1047 camera_attr_get_contrast_range(hcamcorder->camera, &min, &max);
1050 g_print("\n Select Contrast min(%d)-max(%d)", min, max);
1051 err = scanf("%d", &idx);
1052 bret = camera_attr_set_contrast(hcamcorder->camera, idx);
1057 case 'w': /* Setting > White balance */
1058 g_print("*White balance !\n");
1061 g_print("\n Select White balance \n");
1062 camera_attr_foreach_supported_whitebalance(hcamcorder->camera, white_balance_cb, NULL);
1063 err = scanf("%d", &idx);
1064 bret = camera_attr_set_whitebalance(hcamcorder->camera, idx);
1067 case 't': /* Setting > Color tone */
1068 g_print("*Color tone !\n");
1069 camera_attr_foreach_supported_effect(hcamcorder->camera, colortone_cb, NULL);
1071 g_print("\n Select Color tone \n");
1073 err = scanf("%d", &idx);
1074 bret = camera_attr_set_effect(hcamcorder->camera, idx);
1078 case 'd': /* Setting > WDR */
1079 g_print("*WDR !\n");
1081 g_print("\n Select WDR Mode \n");
1083 for (i = 0; i < 2; i++)
1084 g_print("\t %d. %s\n", i+1, wdr_mode[i]);
1086 err = scanf("%d", &idx);
1088 bret = camera_attr_enable_auto_contrast(hcamcorder->camera, 0);
1090 bret = camera_attr_enable_auto_contrast(hcamcorder->camera, 1);
1094 case 'e': /* Setting > EV program mode */
1095 g_print("* EV program mode!\n");
1096 camera_attr_foreach_supported_scene_mode(hcamcorder->camera, program_mode_cb, NULL);
1098 g_print("\n Select EV program mode \n");
1100 err = scanf("%d", &idx);
1101 bret = camera_attr_set_scene_mode(hcamcorder->camera, idx);
1106 case 'z': /* Setting > Strobe setting */
1107 g_print("*Strobe Mode\n");
1108 camera_attr_foreach_supported_flash_mode(hcamcorder->camera, strobe_mode_cb, NULL);
1109 g_print("\n Select Strobe Mode \n");
1111 err = scanf("%d", &idx);
1112 bret = camera_attr_set_flash_mode(hcamcorder->camera, idx);
1116 case 'l': /* Setting > Face detection setting */
1117 /* hcamcorder->menu_state = MENU_STATE_SETTING_DETECTION; */
1118 g_print("* Face detect mode !\n");
1122 for (i = 0; i < 2; i++)
1123 g_print("\t %d. %s \n", i+1, detection_mode[i]);
1125 err = scanf("%d", &idx);
1126 if (camera_is_supported_face_detection(hcamcorder->camera)) {
1127 if (idx >= 0 && idx < 2)
1128 bret = camera_start_face_detection(hcamcorder->camera, _face_detected, NULL);
1130 g_print("face detection_not supported");
1135 case 'k': /* Setting > Anti-handshake */
1136 g_print("*Anti-handshake !\n");
1138 g_print("\n Select Anti-handshake mode \n");
1140 for (i = 0; i < 2; i++)
1141 g_print("\t %d. %s\n", i+1, ahs_mode[i]);
1143 err = scanf("%d", &idx);
1144 bret = camera_attr_enable_anti_shake(hcamcorder->camera, idx-1);
1148 case 'K': /* Setting > Video-stabilization */
1149 g_print("*Video-stabilization !\n");
1151 g_print("\n Select Video-stabilization mode \n");
1153 for (i = 0; i < 2; i++)
1154 g_print("\t %d. %s\n", i+1, vs_mode[i]);
1156 err = scanf("%d", &idx);
1159 g_print("\n Restart preview with NV12 and 720p resolution\n");
1161 err = camera_stop_preview(hcamcorder->camera);
1163 camera_set_preview_resolution(hcamcorder->camera, 1280, 720);
1164 camera_set_preview_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_NV12);
1165 camera_attr_enable_video_stabilization(hcamcorder->camera, idx-1);
1168 err = camera_start_preview(hcamcorder->camera);
1171 g_print("\n Restart FAILED! %x\n", err);
1176 case 'u': /* Touch AF area */
1177 g_print("* Touch AF area !\n");
1180 g_print("\n Input x,y,width,height \n");
1181 err = scanf("%d,%d,%d,%d", &x, &y, &width, &height);
1182 err = camera_attr_set_af_area(hcamcorder->camera, width, height);
1185 g_print("Failed to set touch AF area.(%x)\n", err);
1187 g_print("Succeed to set touch AF area.\n");
1194 float motion_rate = 0.0;
1198 g_print("*Camcorder Motion Rate setting! (should be bigger than zero)\n");
1200 err = scanf("%f", &motion_rate);
1201 err = recorder_attr_set_recording_motion_rate(hcamcorder->recorder, motion_rate);
1203 g_print("Failed to set Camcorder Motion Rate %f [err:0x%x]\n", motion_rate, err);
1205 g_print("Succeed to set Motion Rate %f\n", motion_rate);
1209 case 'b': /* back */
1210 hcamcorder->menu_state = MENU_STATE_MAIN;
1214 g_print("\t Invalid input \n");
1218 g_print("\t Invalid mode, back to upper menu \n");
1219 hcamcorder->menu_state = MENU_STATE_MAIN;
1222 g_print("\t bret : 0x%x \n", bret);
1227 * This function is to execute command.
1229 * @param channel [in] 1st parameter
1231 * @return This function returns TRUE/FALSE
1235 static gboolean cmd_input(GIOChannel *channel)
1239 GError *g_error = NULL;
1243 g_io_channel_read_line(channel, &buf, &read_size, NULL, &g_error);
1245 LOGD("g_io_channel_read_chars error");
1246 g_error_free(g_error);
1253 LOGD("Menu Status : %d", hcamcorder->menu_state);
1254 switch (hcamcorder->menu_state) {
1255 case MENU_STATE_MAIN:
1258 case MENU_STATE_SETTING:
1259 setting_menu(buf[0]);
1270 LOGD("No read input");
1276 static gboolean init(int type)
1283 if (!hcamcorder->recorder)
1286 /*================================================================================
1288 *=================================================================================*/
1289 if (type == MODE_VIDEO_CAPTURE) {
1290 err = recorder_set_file_format(hcamcorder->recorder, RECORDER_FILE_FORMAT_MP4);
1292 LOGE("Init fail. (%x)", err);
1295 err = recorder_attr_set_audio_device(hcamcorder->recorder, RECORDER_AUDIO_DEVICE_MIC);
1297 LOGE("Init fail. (%x)", err);
1300 err = recorder_set_audio_encoder(hcamcorder->recorder, RECORDER_AUDIO_CODEC_AAC);
1302 LOGE("Init fail. (%x)", err);
1305 err = recorder_set_video_encoder(hcamcorder->recorder, RECORDER_VIDEO_CODEC_MPEG4);
1307 LOGE("Init fail. (%x)", err);
1310 err = recorder_attr_set_video_encoder_bitrate(hcamcorder->recorder, VIDEO_ENCODE_BITRATE);
1312 LOGE("Init fail. (%x)", err);
1315 err = recorder_attr_set_audio_samplerate(hcamcorder->recorder, AUDIO_SOURCE_SAMPLERATE_AAC);
1317 LOGE("Init fail. (%x)", err);
1320 err = recorder_attr_set_audio_channel(hcamcorder->recorder, AUDIO_SOURCE_CHANNEL_AAC);
1322 LOGE("Init fail. (%x)", err);
1325 err = recorder_set_filename(hcamcorder->recorder, TARGET_FILENAME_VIDEO);
1327 LOGE("Init fail. (%x)", err);
1330 } else if (type == MODE_AUDIO) {
1331 /*================================================================================
1333 *=================================================================================*/
1334 err = recorder_set_file_format(hcamcorder->recorder, RECORDER_FILE_FORMAT_MP4);
1336 LOGE("Init fail. (%x)", err);
1339 err = recorder_attr_set_audio_device(hcamcorder->recorder, RECORDER_AUDIO_DEVICE_MIC);
1341 LOGE("Init fail. (%x)", err);
1344 err = recorder_set_audio_encoder(hcamcorder->recorder, RECORDER_AUDIO_CODEC_AAC);
1346 LOGE("Init fail. (%x)", err);
1349 err = recorder_attr_set_audio_samplerate(hcamcorder->recorder, AUDIO_SOURCE_SAMPLERATE_AAC);
1351 LOGE("Init fail. (%x)", err);
1354 err = recorder_attr_set_audio_channel(hcamcorder->recorder, AUDIO_SOURCE_CHANNEL_AAC);
1356 LOGE("Init fail. (%x)", err);
1359 err = recorder_set_filename(hcamcorder->recorder, TARGET_FILENAME_AUDIO);
1361 LOGE("Init fail. (%x)", err);
1364 err = recorder_attr_set_time_limit(hcamcorder->recorder, 360000);
1366 LOGE("Init fail. (%x)", err);
1369 err = recorder_attr_set_audio_encoder_bitrate(hcamcorder->recorder, 128000);
1371 LOGE("Init fail. (%x)", err);
1376 recorder_set_state_changed_cb(hcamcorder->recorder, _state_changed_cb, NULL);
1377 recorder_set_recording_status_cb(hcamcorder->recorder, _recording_status_cb, NULL);
1378 recorder_set_recording_limit_reached_cb(hcamcorder->recorder, _recording_limit_reached_cb, NULL);
1385 LOGE("init failed.");
1389 static gboolean init_handle()
1391 hcamcorder->mode = MODE_VIDEO_CAPTURE; /* image(capture)/video(recording) mode */
1392 hcamcorder->menu_state = MENU_STATE_MAIN;
1393 hcamcorder->isMute = FALSE;
1394 hcamcorder->elapsed_time = 0;
1395 hcamcorder->fps = SRC_VIDEO_FRAME_RATE_15; /*SRC_VIDEO_FRAME_RATE_30;*/
1400 * This function is to change camcorder mode.
1402 * @param type [in] image(capture)/video(recording) mode
1404 * @return This function returns TRUE/FALSE
1406 * @see other functions
1408 static gboolean mode_change()
1410 int err = RECORDER_ERROR_NONE;
1411 int state = RECORDER_STATE_NONE;
1412 char media_type = '\0';
1415 if (hcamcorder->recorder) {
1416 err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
1417 if (state != RECORDER_STATE_NONE) {
1418 if (state == RECORDER_STATE_RECORDING ||
1419 state == RECORDER_STATE_PAUSED) {
1420 LOGD("recorder_cancel");
1421 err = recorder_cancel(hcamcorder->recorder);
1422 if (err != RECORDER_ERROR_NONE) {
1423 LOGE("exit recorder_cancel failed 0x%x", err);
1428 err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
1429 if (state == RECORDER_STATE_READY) {
1430 LOGD("recorder_unprepare");
1431 recorder_unprepare(hcamcorder->recorder);
1434 err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
1435 if (state == RECORDER_STATE_CREATED) {
1436 LOGD("recorder_destroy");
1437 err = recorder_destroy(hcamcorder->recorder);
1438 if (err == RECORDER_ERROR_NONE) {
1439 LOGD("recorder_destroy done");
1440 hcamcorder->recorder = NULL;
1445 LOGW("NULL handle");
1450 g_get_current_time(&previous);
1451 g_timer_reset(timer);
1454 g_print("\n\t=======================================\n");
1455 g_print("\t RECORDER_TESTSUIT\n");
1456 g_print("\t=======================================\n");
1457 g_print("\t '1' Video Capture - Rear Camera\n");
1458 g_print("\t '2' Audio Recording - MIC\n");
1459 g_print("\t '3' Audio Recording - MODEM\n");
1460 g_print("\t 'q' Exit\n");
1461 g_print("\t=======================================\n");
1463 g_print("\t Enter the media type:\n\t");
1465 err = scanf("%c", &media_type);
1467 g_print("\t!!!read input error!!!\n");
1471 LOGD("media type : %c", media_type);
1473 switch (media_type) {
1475 hcamcorder->mode = MODE_VIDEO_CAPTURE;
1477 LOGD("camera_create");
1479 err = camera_create(CAMERA_DEVICE_CAMERA0, &hcamcorder->camera);
1480 if (err != CAMERA_ERROR_NONE) {
1481 LOGE("camera create failed 0x%d", err);
1485 err = camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(display));
1486 if (err != CAMERA_ERROR_NONE) {
1487 LOGE("set display failed 0x%d", err);
1488 camera_destroy(hcamcorder->camera);
1489 hcamcorder->camera = NULL;
1493 err = camera_start_preview(hcamcorder->camera);
1494 if (err != CAMERA_ERROR_NONE) {
1495 LOGE("start preview failed 0x%d", err);
1496 camera_destroy(hcamcorder->camera);
1497 hcamcorder->camera = NULL;
1501 err = recorder_create_videorecorder(hcamcorder->camera, &hcamcorder->recorder);
1502 if (err != RECORDER_ERROR_NONE) {
1503 LOGE("video recorder create failed 0x%d", err);
1504 camera_stop_preview(hcamcorder->camera);
1505 camera_destroy(hcamcorder->camera);
1506 hcamcorder->camera = NULL;
1513 hcamcorder->mode = MODE_AUDIO;
1514 err = recorder_create_audiorecorder(&hcamcorder->recorder);
1515 if (err != RECORDER_ERROR_NONE) {
1516 LOGE("audio recorder create failed 0x%x", err);
1520 err = recorder_attr_set_audio_device(hcamcorder->recorder, RECORDER_AUDIO_DEVICE_MIC);
1521 if (err != RECORDER_ERROR_NONE) {
1522 LOGE("set audio device failed 0x%x", err);
1523 recorder_destroy(hcamcorder->recorder);
1524 hcamcorder->recorder = NULL;
1531 hcamcorder->mode = MODE_AUDIO;
1532 err = recorder_create_audiorecorder(&hcamcorder->recorder);
1533 if (err != RECORDER_ERROR_NONE) {
1534 LOGE("audio recorder create failed 0x%d", err);
1538 recorder_attr_set_audio_device(hcamcorder->recorder, RECORDER_AUDIO_DEVICE_MODEM);
1539 if (err != RECORDER_ERROR_NONE) {
1540 LOGE("set audio device failed 0x%d", err);
1541 recorder_destroy(hcamcorder->recorder);
1542 hcamcorder->recorder = NULL;
1549 g_print("\t Quit Camcorder Testsuite!!\n");
1550 hcamcorder->mode = -1;
1551 if (g_main_loop_is_running(g_loop))
1552 g_main_loop_quit(g_loop);
1556 g_print("\t Invalid media type(%c)\n", media_type);
1561 g_timer_reset(timer);
1563 if (!init(hcamcorder->mode)) {
1564 LOGE("testsuite init() failed.");
1568 g_timer_reset(timer);
1570 err = recorder_prepare(hcamcorder->recorder);
1572 LOGD("recorder_start() : %12.6lfs", g_timer_elapsed(timer, NULL));
1574 if (err != RECORDER_ERROR_NONE) {
1575 LOGE("recorder_start = %x", err);
1579 g_get_current_time(¤t);
1580 timersub(¤t, &previous, &res);
1582 LOGD("Recorder Starting Time : %ld.%lds", res.tv_sec, res.tv_usec);
1589 * This function is the example main function for recorder API.
1593 * @return This function returns 0.
1595 * @see other functions
1597 int main(int argc, char **argv)
1601 #if !GLIB_CHECK_VERSION(2, 35, 0)
1602 if (!g_thread_supported())
1603 g_thread_init(NULL);
1606 timer = g_timer_new();
1608 elm_init(argc, argv);
1610 LOGD("elm_init() : %12.6lfs", g_timer_elapsed(timer, NULL));
1612 hcamcorder = (cam_handle_t *) g_malloc0(sizeof(cam_handle_t));
1614 Evas_Object *eo = NULL;
1615 eo = elm_win_add(NULL, "VIDEO OVERLAY", ELM_WIN_BASIC);
1616 elm_win_title_set(eo, "VIDEO oVERLAY");
1617 evas_object_resize(eo, 200, 200);
1618 evas_object_show(eo);
1619 display = (void *)eo;
1621 recorder_state = RECORDER_STATE_NONE;
1623 g_timer_reset(timer);
1625 bret = mode_change();
1631 g_loop = g_main_loop_new(NULL, FALSE);
1633 stdin_channel = g_io_channel_unix_new(fileno(stdin));/* read from stdin */
1634 g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)cmd_input, NULL);
1636 LOGD("RUN main loop");
1638 g_main_loop_run(g_loop);
1640 LOGD("STOP main loop");
1643 g_timer_stop(timer);
1644 g_timer_destroy(timer);
1647 /* g_print("\t Exit from the application.\n"); */
1649 g_main_loop_unref(g_loop);
1650 g_io_channel_unref(stdin_channel);