Update test package for headless target 16/283516/5 accepted/tizen/unified/20221102.020614
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 28 Oct 2022 02:11:22 +0000 (11:11 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 31 Oct 2022 02:09:19 +0000 (11:09 +0900)
- The package "capi-media-recorder-test" has been separated to 2 packages.
 : capi-media-recorder-test-headed
 : capi-media-recorder-test-headless

[Version] 0.3.35
[Issue Type] Clean up

Change-Id: I6bafa00a49e8f560c88de19e889f0d53040599be
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
capi-media-recorder-test-headed.manifest [moved from capi-media-recorder-test.manifest with 54% similarity]
capi-media-recorder-test-headless.manifest [new file with mode: 0644]
packaging/capi-media-recorder.spec
test/CMakeLists.txt
test/recorder_test.c
test/recorder_test.h [new file with mode: 0644]
test/recorder_test_headed.c [new file with mode: 0644]
test/recorder_test_headless.c [new file with mode: 0644]

similarity index 54%
rename from capi-media-recorder-test.manifest
rename to capi-media-recorder-test-headed.manifest
index a29d479..cebfb44 100644 (file)
@@ -3,6 +3,6 @@
                <domain name="_" />
        </request>
        <assign>
-               <filesystem path="/usr/bin/recorder_test" exec_label="System" />
+               <filesystem path="/usr/bin/recorder_test_headed" exec_label="System" />
        </assign>
 </manifest>
diff --git a/capi-media-recorder-test-headless.manifest b/capi-media-recorder-test-headless.manifest
new file mode 100644 (file)
index 0000000..7e3ea5f
--- /dev/null
@@ -0,0 +1,8 @@
+<manifest>
+       <request>
+               <domain name="_" />
+       </request>
+       <assign>
+               <filesystem path="/usr/bin/recorder_test_headless" exec_label="System" />
+       </assign>
+</manifest>
index 09747fc..1621d44 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-recorder
 Summary:    A Recorder API
-Version:    0.3.34
+Version:    0.3.35
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
@@ -39,12 +39,21 @@ Requires: %{name} = %{version}-%{release}
 Development related files for a Recorder library in Tizen Native API.
 
 
-%package test
-Summary:  A recorder API testsuite
+%package test-headed
+Summary:  A recorder API testsuite for headed target
 Requires: %{name} = %{version}-%{release}
 
-%description test
-Tizen Native recorder API testsuite.
+%description test-headed
+Tizen Native recorder API testsuite for headed target.
+
+
+%package test-headless
+Summary:  A recorder API testsuite for headless target
+Requires: %{name} = %{version}-%{release}
+
+%description test-headless
+Tizen Native recorder API testsuite for headless target.
+
 
 %if 0%{?gcov:1}
 %package gcov
@@ -92,15 +101,24 @@ find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';'
 %license LICENSE.APLv2
 %{_libdir}/libcapi-media-recorder.so.*
 
+
 %files devel
 %{_includedir}/media/recorder.h
 %{_libdir}/pkgconfig/*.pc
 %{_libdir}/libcapi-media-recorder.so
 
-%files test
-%manifest %{name}-test.manifest
+
+%files test-headed
+%manifest %{name}-test-headed.manifest
 %license LICENSE.APLv2
-%{_bindir}/recorder_test
+%{_bindir}/recorder_test_headed
+
+
+%files test-headless
+%manifest %{name}-test-headless.manifest
+%license LICENSE.APLv2
+%{_bindir}/recorder_test_headless
+
 
 %if 0%{?gcov:1}
 %files gcov
index d9c63c0..214bdc9 100644 (file)
@@ -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 "recorder_test.c")
 
-#INCLUDE_DIRECTORIES(../include)
-#link_directories(${CMAKE_SOURCE_DIR}/../)
+# recorder_test_headed
+SET(fw_test_headed "${fw_test}-headed")
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(${fw_test} REQUIRED elementary evas capi-media-sound-manager appcore-efl)
-FOREACH(flag ${${fw_test}_CFLAGS})
-    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+PKG_CHECK_MODULES(${fw_test_headed} REQUIRED elementary evas appcore-efl capi-media-sound-manager)
+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} ${EXTRA_CFLAGS_HEADED} -fPIC -pie -Wall")
+SET(EXEC_NAME_HEADED recorder_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)
 
+# recorder_test_headless
+SET(fw_test_headless "${fw_test}-headless")
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(${fw_test_headless} REQUIRED capi-media-sound-manager)
+FOREACH(flag ${${fw_test_headless}_CFLAGS})
+    SET(EXTRA_CFLAGS_HEADLESS "${EXTRA_CFLAGS_HEADLESS} ${flag}")
+    MESSAGE(${flag})
 ENDFOREACH()
+
+SET(EXEC_NAME_HEADLESS recorder_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)
+
index f53dbd7..243f369 100644 (file)
 /*=======================================================================================
   |  INCLUDE FILES                                                                        |
   =======================================================================================*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <glib.h>
-#include <sys/time.h>
-#include <camera.h>
-#include <recorder.h>
-#include <Elementary.h>
-#include <sound_manager.h>
-#include <appcore-efl.h>
+#include "recorder_test.h"
 
 /*-----------------------------------------------------------------------
-  |    GLOBAL VARIABLE DEFINITIONS:                                       |
+  |    GLOBAL VARIABLES:                                                  |
   -----------------------------------------------------------------------*/
-#define EXPORT_API __attribute__((__visibility__("default")))
-
-
-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 int recorder_state;
-static GTimer *timer = NULL;
+static int g_recorder_state;
+static GTimer *g_recorder_timer = NULL;
 static int g_recorder_device_changed_cb_id;
-static int ve_frame_count = 0;
-
-/*-----------------------------------------------------------------------
-  |    GLOBAL CONSTANT DEFINITIONS:                                       |
-  -----------------------------------------------------------------------*/
+static int g_recorder_ve_frame_count = 0;
+static cam_handle_t *g_cam_handle;
 
 
 /*-----------------------------------------------------------------------
-  |    IMPORTED VARIABLE DECLARATIONS:                                    |
-  -----------------------------------------------------------------------*/
-
-
-/*-----------------------------------------------------------------------
-  |    IMPORTED FUNCTION DECLARATIONS:                                    |
-  -----------------------------------------------------------------------*/
-
-
-/*-----------------------------------------------------------------------
-  |    LOCAL #defines:                                                    |
+  |    DEFINITIONS:                                                       |
   -----------------------------------------------------------------------*/
 #define SRC_VIDEO_FRAME_RATE_15         15    /* video input frame rate */
 #define SRC_VIDEO_FRAME_RATE_30         30    /* video input frame rate */
-
 #define TARGET_FILENAME_PATH            "/opt/usr/home/owner/media/"
 #define TARGET_FILENAME_VIDEO           TARGET_FILENAME_PATH"test_rec_video.mp4"
 #define TARGET_FILENAME_AUDIO           TARGET_FILENAME_PATH"test_rec_audio.m4a"
 #define TARGET_FILENAME_MUXED_CB        TARGET_FILENAME_PATH"muxed_stream_cb.mp4"
 #define TARGET_FILENAME_VE_DECISION_CB  TARGET_FILENAME_PATH"ve_decision_cb.data"
-
 #define AUDIO_SOURCE_SAMPLERATE_AAC     44100
 #define AUDIO_SOURCE_SAMPLERATE_AMR     8000
 #define AUDIO_SOURCE_CHANNEL_AAC        2
 #define AUDIO_SOURCE_CHANNEL_AMR        1
 #define VIDEO_ENCODE_BITRATE            40000000 /* bps */
-
 #define CHECK_MM_ERROR(expr) \
        do {\
                int ret = 0; \
@@ -103,23 +58,17 @@ static int ve_frame_count = 0;
                        return; \
                } \
        } while (0)
-
 #ifndef SAFE_FREE
 #define SAFE_FREE(x)       if (x) { g_free(x); x = NULL; }
 #endif
 
 
-static struct timeval previous;
-static struct timeval current;
-static struct timeval res;
-
-
 /*-----------------------------------------------------------------------
-  |    LOCAL CONSTANT DEFINITIONS:                                        |
+  |    ENUMS:                                                             |
   -----------------------------------------------------------------------*/
 enum {
        MODE_VIDEO_CAPTURE, /* recording and image capture mode */
-       MODE_AUDIO,     /* audio recording*/
+       MODE_AUDIO,         /* audio recording*/
        MODE_NUM,
 };
 
@@ -131,38 +80,26 @@ enum {
 };
 
 /*-----------------------------------------------------------------------
-  |    LOCAL DATA TYPE DEFINITIONS:                   |
+  |    DATA STRUCTURES:                                                   |
   -----------------------------------------------------------------------*/
-typedef struct _cam_handle {
-       camera_h camera;
-       recorder_h recorder;
-       int mode;                       /*video/audio(recording) mode */
-       int menu_state;
-       int fps;
-       bool isMute;
-       unsigned long long elapsed_time;
-} cam_handle_t;
-
 typedef struct {
        int width[20];
        int height[20];
        int count;
-} resolution_stack;
+} resolution_stack_t;
 
 
 /*---------------------------------------------------------------------------
-  |    LOCAL VARIABLE DEFINITIONS:                                            |
+  |    CONSTANT VARIABLES:                                                    |
   ---------------------------------------------------------------------------*/
-static cam_handle_t *hcamcorder;
-
-const char *video_codec[4] = {
+static const char *video_codec[] = {
        "H.263",
        "H.264",
        "MPEG4",
        "THEORA"
 };
 
-const char *audio_codec[5] = {
+static const char *audio_codec[] = {
        "AMR",
        "AAC",
        "VORBIS",
@@ -170,7 +107,7 @@ const char *audio_codec[5] = {
        "MP3"
 };
 
-const char *file_format[7] = {
+static const char *file_format[] = {
        "3GP",
        "MP4",
        "AMR",
@@ -180,7 +117,7 @@ const char *file_format[7] = {
        "M2TS"
 };
 
-const char *display_mode[6] = {
+static const char *display_mode[] = {
        "Letter Box mode",
        "Original Size mode",
        "Full Screen mode",
@@ -189,7 +126,7 @@ const char *display_mode[6] = {
        "ROI mode"
 };
 
-const char* strobe_mode[] = {
+static const char* strobe_mode[] = {
        "OFF",
        "ON",
        "Auto",
@@ -200,23 +137,22 @@ const char* strobe_mode[] = {
        "Permanent",
 };
 
-const char *vs_mode[] = {
+static const char *vs_mode[] = {
        "OFF",
        "ON",
 };
 
+
 /*---------------------------------------------------------------------------
-  |    LOCAL FUNCTION PROTOTYPES:                                             |
+  |    FUNCTION PROTOTYPES:                                                   |
   ---------------------------------------------------------------------------*/
-static void print_menu();
-static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data);
 static gboolean init(int type);
 static gboolean mode_change(gchar buf);
 
 
 static bool resolution_cb(int width, int height, void *user_data)
 {
-       resolution_stack *data = (resolution_stack*)user_data;
+       resolution_stack_t *data = (resolution_stack_t*)user_data;
 
        if (data == NULL) {
                g_print("NULL data\n");
@@ -387,7 +323,7 @@ static void _dump_video_frame(recorder_video_data_s *frame)
 
 static bool _recording_video_encode_decision_cb(recorder_video_data_s *frame, void *user_data)
 {
-       if (ve_frame_count == 0) {
+       if (g_recorder_ve_frame_count == 0) {
                g_print("==== VE decision cb : file[%s][fmt %d, %dx%d, plane %d] ====\n",
                        TARGET_FILENAME_VE_DECISION_CB,
                        frame->format, frame->width, frame->height, frame->num_of_planes);
@@ -395,7 +331,7 @@ static bool _recording_video_encode_decision_cb(recorder_video_data_s *frame, vo
                _dump_video_frame(frame);
        }
 
-       if ((ve_frame_count++ % 10) >= 5) {
+       if ((g_recorder_ve_frame_count++ % 10) >= 5) {
                g_print("-------- VE decision cb : [ret:false]\n");
                return false;
        } else {
@@ -405,7 +341,7 @@ static bool _recording_video_encode_decision_cb(recorder_video_data_s *frame, vo
 }
 
 
-static inline void flush_stdin()
+void flush_stdin()
 {
        int ch;
        while ((ch = getchar()) != EOF && ch != '\n');
@@ -416,9 +352,9 @@ static gboolean _release_idle_event_callback(void *data)
 {
        g_print("destroy recorder handle\n\n");
 
-       recorder_destroy(hcamcorder->recorder);
-       hcamcorder->recorder = NULL;
-       hcamcorder->menu_state = MENU_STATE_INIT;
+       recorder_destroy(g_cam_handle->recorder);
+       g_cam_handle->recorder = NULL;
+       g_cam_handle->menu_state = MENU_STATE_INIT;
        print_menu();
 
        return 0;
@@ -464,9 +400,9 @@ static int _recorder_set_muxed_stream_cb(void)
 
        switch (idx) {
        case 1:
-               return recorder_set_muxed_stream_cb(hcamcorder->recorder, _recording_muxed_stream_cb, NULL);
+               return recorder_set_muxed_stream_cb(g_cam_handle->recorder, _recording_muxed_stream_cb, NULL);
        case 2:
-               return recorder_unset_muxed_stream_cb(hcamcorder->recorder);
+               return recorder_unset_muxed_stream_cb(g_cam_handle->recorder);
        default:
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
@@ -483,11 +419,11 @@ static int _recorder_set_audio_encoder(void)
        flush_stdin();
 
        g_print("-1. DISABLE\n");
-       recorder_foreach_supported_audio_encoder(hcamcorder->recorder, audio_codec_cb, (void *)hcamcorder);
+       recorder_foreach_supported_audio_encoder(g_cam_handle->recorder, audio_codec_cb, (void *)g_cam_handle);
 
        err = scanf("%d", &encoder);
 
-       return recorder_set_audio_encoder(hcamcorder->recorder, encoder);
+       return recorder_set_audio_encoder(g_cam_handle->recorder, encoder);
 }
 
 
@@ -500,11 +436,11 @@ static int _recorder_set_file_format(void)
 
        flush_stdin();
 
-       recorder_foreach_supported_file_format(hcamcorder->recorder, file_format_cb, (void *)hcamcorder);
+       recorder_foreach_supported_file_format(g_cam_handle->recorder, file_format_cb, (void *)g_cam_handle);
 
        err = scanf("%d", &format);
 
-       return recorder_set_file_format(hcamcorder->recorder, format);
+       return recorder_set_file_format(g_cam_handle->recorder, format);
 }
 
 
@@ -521,7 +457,7 @@ static int _recorder_set_size_limit(void)
 
        err = scanf("%d", &limit);
 
-       return recorder_attr_set_size_limit(hcamcorder->recorder, limit);
+       return recorder_attr_set_size_limit(g_cam_handle->recorder, limit);
 }
 
 
@@ -538,7 +474,7 @@ static int _recorder_set_time_limit(void)
 
        err = scanf("%d", &limit);
 
-       return recorder_attr_set_time_limit(hcamcorder->recorder, limit);
+       return recorder_attr_set_time_limit(g_cam_handle->recorder, limit);
 }
 
 
@@ -555,7 +491,7 @@ static int _recorder_set_audio_samplerate(void)
 
        err = scanf("%d", &samplerate);
 
-       return recorder_attr_set_audio_samplerate(hcamcorder->recorder, samplerate);
+       return recorder_attr_set_audio_samplerate(g_cam_handle->recorder, samplerate);
 }
 
 
@@ -572,7 +508,7 @@ static int _recorder_set_audio_channel(void)
 
        err = scanf("%d", &channel);
 
-       return recorder_attr_set_audio_channel(hcamcorder->recorder, channel);
+       return recorder_attr_set_audio_channel(g_cam_handle->recorder, channel);
 }
 
 
@@ -592,9 +528,9 @@ static int _recorder_set_encoder_bitrate(void)
 
        switch (type) {
        case 1:
-               return recorder_attr_set_audio_encoder_bitrate(hcamcorder->recorder, bitrate);
+               return recorder_attr_set_audio_encoder_bitrate(g_cam_handle->recorder, bitrate);
        case 2:
-               return recorder_attr_set_video_encoder_bitrate(hcamcorder->recorder, bitrate);
+               return recorder_attr_set_video_encoder_bitrate(g_cam_handle->recorder, bitrate);
        default:
                g_print("invalid type [%d]", type);
                return -1;
@@ -602,9 +538,9 @@ static int _recorder_set_encoder_bitrate(void)
 }
 
 
-static void print_menu()
+void print_menu()
 {
-       switch (hcamcorder->menu_state) {
+       switch (g_cam_handle->menu_state) {
        case MENU_STATE_INIT:
                g_print("\n\t=======================================\n");
                g_print("\t   RECORDER_TESTSUIT\n");
@@ -621,20 +557,20 @@ static void print_menu()
                break;
        case MENU_STATE_MAIN:
                g_print("\n\t=======================================\n");
-               if (hcamcorder->mode == MODE_VIDEO_CAPTURE)
+               if (g_cam_handle->mode == MODE_VIDEO_CAPTURE)
                        g_print("\t   Video + Audio Recording\n");
                else
                        g_print("\t   Audio Recording\n");
                g_print("\t=======================================\n");
-               if (recorder_state <= RECORDER_STATE_NONE) {
+               if (g_recorder_state <= RECORDER_STATE_NONE) {
                        g_print("\t   '1' Start Recording\n");
                        g_print("\t   '2' Setting\n");
                        g_print("\t   'b' back\n");
-               } else if (recorder_state == RECORDER_STATE_RECORDING) {
+               } else if (g_recorder_state == RECORDER_STATE_RECORDING) {
                        g_print("\t   'p' Pause Recording\n");
                        g_print("\t   'c' Cancel\n");
                        g_print("\t   's' Save\n");
-               } else if (recorder_state == RECORDER_STATE_PAUSED) {
+               } else if (g_recorder_state == RECORDER_STATE_PAUSED) {
                        g_print("\t   'r' Resume Recording\n");
                        g_print("\t   'c' Cancel\n");
                        g_print("\t   's' Save\n");
@@ -643,7 +579,7 @@ static void print_menu()
                break;
 
        case MENU_STATE_SETTING:
-               if (hcamcorder->mode == MODE_VIDEO_CAPTURE) {
+               if (g_cam_handle->mode == MODE_VIDEO_CAPTURE) {
                        g_print("\n\t=======================================\n");
                        g_print("\t   Video + Audio recording > Setting\n");
                        g_print("\t=======================================\n");
@@ -666,7 +602,7 @@ static void print_menu()
                        g_print("\t  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [etc]\n");
                        g_print("\t     's' Strobe (Flash) \n");
                        g_print("\t     'z' Video-stabilization \n");
-                       g_print("\t     'm' Camcorder Motion Rate setting \n");
+                       g_print("\t     'm' Recording Motion Rate setting \n");
                        g_print("\t     'M' Set/Unset muxed stream callback \n");
                        g_print("\t     'E' Set/Unset video encode decision callback \n");
                        g_print("\t     'F' Set file name - %s\n", TARGET_FILENAME_VIDEO);
@@ -702,91 +638,91 @@ static void main_menu(gchar buf)
 {
        int err = 0;
 
-       if (hcamcorder->mode != MODE_VIDEO_CAPTURE && hcamcorder->mode != MODE_AUDIO) {
+       if (g_cam_handle->mode != MODE_VIDEO_CAPTURE && g_cam_handle->mode != MODE_AUDIO) {
                g_print("\t Invalid mode, back to upper menu \n");
-               hcamcorder->menu_state = MENU_STATE_INIT;
+               g_cam_handle->menu_state = MENU_STATE_INIT;
                return;
        }
 
-       if (recorder_state == RECORDER_STATE_NONE) {
+       if (g_recorder_state == RECORDER_STATE_NONE) {
                switch (buf) {
                case '1': /* Start Recording */
                        g_print("*Recording start!\n");
-                       hcamcorder->elapsed_time = 0;
-                       ve_frame_count = 0;
+                       g_cam_handle->elapsed_time = 0;
+                       g_recorder_ve_frame_count = 0;
 
-                       g_timer_reset(timer);
-                       err = recorder_start(hcamcorder->recorder);
+                       g_timer_reset(g_recorder_timer);
+                       err = recorder_start(g_cam_handle->recorder);
 
                        if (err != 0)
                                g_print("Rec start camcorder_record 0x%x\n", err);
 
-                       recorder_state = RECORDER_STATE_RECORDING;
+                       g_recorder_state = RECORDER_STATE_RECORDING;
                        break;
 
                case '2': /* Setting */
-                       hcamcorder->menu_state = MENU_STATE_SETTING;
+                       g_cam_handle->menu_state = MENU_STATE_SETTING;
                        break;
 
                case 'b': /* back */
-                       recorder_unprepare(hcamcorder->recorder);
-                       recorder_destroy(hcamcorder->recorder);
-                       hcamcorder->recorder = NULL;
+                       recorder_unprepare(g_cam_handle->recorder);
+                       recorder_destroy(g_cam_handle->recorder);
+                       g_cam_handle->recorder = NULL;
 
-                       if (hcamcorder->camera) {
-                               camera_destroy(hcamcorder->camera);
-                               hcamcorder->camera = NULL;
+                       if (g_cam_handle->camera) {
+                               camera_destroy(g_cam_handle->camera);
+                               g_cam_handle->camera = NULL;
                        }
 
-                       hcamcorder->menu_state = MENU_STATE_INIT;
+                       g_cam_handle->menu_state = MENU_STATE_INIT;
                        break;
 
                default:
                        g_print("\t Invalid input \n");
                        break;
                }
-       } else if (recorder_state == RECORDER_STATE_RECORDING || recorder_state == RECORDER_STATE_PAUSED) {
+       } else if (g_recorder_state == RECORDER_STATE_RECORDING || g_recorder_state == RECORDER_STATE_PAUSED) {
                switch (buf) {
                case 'p': /* Pause Recording */
                        g_print("*Pause!\n");
-                       err = recorder_pause(hcamcorder->recorder);
+                       err = recorder_pause(g_cam_handle->recorder);
 
                        if (err < 0)
                                g_print("Rec pause camcorder_pause  = %x\n", err);
 
-                       recorder_state = RECORDER_STATE_PAUSED;
+                       g_recorder_state = RECORDER_STATE_PAUSED;
                        break;
 
                case 'r': /* Resume Recording */
                        g_print("*Resume!\n");
-                       err = recorder_start(hcamcorder->recorder);
+                       err = recorder_start(g_cam_handle->recorder);
                        if (err < 0)
                                g_print("Rec start camcorder_record  = %x\n", err);
 
-                       recorder_state = RECORDER_STATE_RECORDING;
+                       g_recorder_state = RECORDER_STATE_RECORDING;
                        break;
 
                case 'c': /* Cancel */
                        g_print("*Cancel Recording !\n");
 
-                       err = recorder_cancel(hcamcorder->recorder);
+                       err = recorder_cancel(g_cam_handle->recorder);
 
                        if (err < 0)
                                g_print("Cancel recording camcorder_cancel  = %x\n", err);
 
-                       recorder_state = RECORDER_STATE_NONE;
+                       g_recorder_state = RECORDER_STATE_NONE;
                        break;
 
                case 's': /* Save */
                        g_print("*Save Recording!\n");
-                       g_timer_reset(timer);
+                       g_timer_reset(g_recorder_timer);
 
-                       err = recorder_commit(hcamcorder->recorder);
+                       err = recorder_commit(g_cam_handle->recorder);
 
                        if (err < 0)
                                g_print("Save recording recorder_commit  = %x\n", err);
 
-                       recorder_state = RECORDER_STATE_NONE;
+                       g_recorder_state = RECORDER_STATE_NONE;
                        break;
 
                default:
@@ -808,13 +744,13 @@ static void setting_menu(gchar buf)
        int result = 0;
        int bitrate = 0;
 
-       if (hcamcorder->mode == MODE_VIDEO_CAPTURE) {
+       if (g_cam_handle->mode == MODE_VIDEO_CAPTURE) {
                int x = 0;
                int y = 0;
                int width = 0;
                int height = 0;
                float motion_rate = 0.0;
-               resolution_stack resolution_list;
+               resolution_stack_t resolution_list;
 
                switch (buf) {
                /* Camera/Recorder setting */
@@ -824,7 +760,7 @@ static void setting_menu(gchar buf)
 
                        flush_stdin();
 
-                       camera_foreach_supported_preview_resolution(hcamcorder->camera,
+                       camera_foreach_supported_preview_resolution(g_cam_handle->camera,
                                resolution_cb, &resolution_list);
 
                        err = scanf("%d", &idx);
@@ -832,7 +768,7 @@ static void setting_menu(gchar buf)
                                g_print("----------------- SET %dx%d ---------------------\n",
                                        resolution_list.width[idx], resolution_list.height[idx]);
 
-                               result = camera_set_preview_resolution(hcamcorder->camera,
+                               result = camera_set_preview_resolution(g_cam_handle->camera,
                                        resolution_list.width[idx], resolution_list.height[idx]);
                        } else {
                                g_print("invalid input %d\n", idx);
@@ -848,7 +784,7 @@ static void setting_menu(gchar buf)
 
                        flush_stdin();
 
-                       recorder_foreach_supported_video_resolution(hcamcorder->recorder,
+                       recorder_foreach_supported_video_resolution(g_cam_handle->recorder,
                                resolution_cb, &resolution_list);
 
                        err = scanf("%d", &idx);
@@ -856,7 +792,7 @@ static void setting_menu(gchar buf)
                                g_print("----------------- SET %dx%d ---------------------\n",
                                        resolution_list.width[idx], resolution_list.height[idx]);
 
-                               result = recorder_set_video_resolution(hcamcorder->recorder,
+                               result = recorder_set_video_resolution(g_cam_handle->recorder,
                                        resolution_list.width[idx], resolution_list.height[idx]);
                        } else {
                                g_print("invalid input %d\n", idx);
@@ -871,11 +807,11 @@ static void setting_menu(gchar buf)
 
                        flush_stdin();
 
-                       recorder_foreach_supported_video_encoder(hcamcorder->recorder, video_codec_cb, (void *)hcamcorder);
+                       recorder_foreach_supported_video_encoder(g_cam_handle->recorder, video_codec_cb, (void *)g_cam_handle);
 
                        err = scanf("%d", &idx);
 
-                       result = recorder_set_video_encoder(hcamcorder->recorder, idx);
+                       result = recorder_set_video_encoder(g_cam_handle->recorder, idx);
                        break;
 
                case '3': /* Setting > Audio codec */
@@ -917,7 +853,7 @@ static void setting_menu(gchar buf)
 
                        err = scanf("%d", &idx);
 
-                       result = camera_set_display_visible(hcamcorder->camera, idx);
+                       result = camera_set_display_visible(g_cam_handle->camera, idx);
                        break;
 
                case 'd': /*  Setting > Display mode */
@@ -934,10 +870,10 @@ static void setting_menu(gchar buf)
                                err = scanf("%d %d %d %d", &x, &y, &width, &height);
                        }
 
-                       result = camera_set_display_mode(hcamcorder->camera, idx - 1);
+                       result = camera_set_display_mode(g_cam_handle->camera, idx - 1);
 
                        if (idx == CAMERA_DISPLAY_MODE_CUSTOM_ROI)
-                               result |= camera_attr_set_display_roi_area(hcamcorder->camera, x, y, width, height);
+                               result |= camera_attr_set_display_roi_area(g_cam_handle->camera, x, y, width, height);
                        break;
 
                case 'r': /* Setting > Display Rotate */
@@ -949,7 +885,7 @@ static void setting_menu(gchar buf)
 
                        err = scanf("%d", &idx);
 
-                       result = camera_set_display_rotation(hcamcorder->camera, idx);
+                       result = camera_set_display_rotation(g_cam_handle->camera, idx);
                        break;
 
                case 'f': /* Setting > Display Flip */
@@ -961,7 +897,7 @@ static void setting_menu(gchar buf)
 
                        err = scanf("%d", &idx);
 
-                       result = camera_set_display_flip(hcamcorder->camera, idx);
+                       result = camera_set_display_flip(g_cam_handle->camera, idx);
                        break;
 
                        /* ext. setting */
@@ -970,11 +906,11 @@ static void setting_menu(gchar buf)
 
                        flush_stdin();
 
-                       camera_attr_foreach_supported_flash_mode(hcamcorder->camera, strobe_mode_cb, NULL);
+                       camera_attr_foreach_supported_flash_mode(g_cam_handle->camera, strobe_mode_cb, NULL);
 
                        err = scanf("%d", &idx);
 
-                       result = camera_attr_set_flash_mode(hcamcorder->camera, idx);
+                       result = camera_attr_set_flash_mode(g_cam_handle->camera, idx);
                        break;
 
                case 'z': /* Setting > Video-stabilization */
@@ -990,25 +926,25 @@ static void setting_menu(gchar buf)
                        if (idx == 2) {
                                g_print("\n Restart preview with NV12 and 720p resolution\n");
 
-                               result = camera_stop_preview(hcamcorder->camera);
-                               result |= camera_set_preview_resolution(hcamcorder->camera, 1280, 720);
-                               result |= camera_set_preview_format(hcamcorder->camera, CAMERA_PIXEL_FORMAT_NV12);
+                               result = camera_stop_preview(g_cam_handle->camera);
+                               result |= camera_set_preview_resolution(g_cam_handle->camera, 1280, 720);
+                               result |= camera_set_preview_format(g_cam_handle->camera, CAMERA_PIXEL_FORMAT_NV12);
 
-                               result |= camera_attr_enable_video_stabilization(hcamcorder->camera, idx-1);
+                               result |= camera_attr_enable_video_stabilization(g_cam_handle->camera, idx-1);
 
                                if (result == 0)
-                                       result |= camera_start_preview(hcamcorder->camera);
+                                       result |= camera_start_preview(g_cam_handle->camera);
                        }
                        break;
 
                case 'm':
-                       g_print("*Camcorder Motion Rate setting! (should be bigger than zero)\n");
+                       g_print("*Recording Motion Rate setting! (should be bigger than zero)\n");
 
                        flush_stdin();
 
                        err = scanf("%f", &motion_rate);
 
-                       result = recorder_attr_set_recording_motion_rate(hcamcorder->recorder, motion_rate);
+                       result = recorder_attr_set_recording_motion_rate(g_cam_handle->recorder, motion_rate);
                        break;
 
                case 'M': /* Setting > muxed stream callback */
@@ -1025,20 +961,20 @@ static void setting_menu(gchar buf)
                        err = scanf("%d", &idx);
 
                        if (idx == 1)
-                               result = recorder_set_video_encode_decision_cb(hcamcorder->recorder, _recording_video_encode_decision_cb, NULL);
+                               result = recorder_set_video_encode_decision_cb(g_cam_handle->recorder, _recording_video_encode_decision_cb, NULL);
                        else if (idx == 2)
-                               result = recorder_unset_video_encode_decision_cb(hcamcorder->recorder);
+                               result = recorder_unset_video_encode_decision_cb(g_cam_handle->recorder);
                        else
                                result = RECORDER_ERROR_INVALID_PARAMETER;
 
                        break;
 
                case 'F': /* Set file name */
-                       result = recorder_set_filename(hcamcorder->recorder, TARGET_FILENAME_VIDEO);
+                       result = recorder_set_filename(g_cam_handle->recorder, TARGET_FILENAME_VIDEO);
                        break;
 
                case 'b': /* back */
-                       hcamcorder->menu_state = MENU_STATE_MAIN;
+                       g_cam_handle->menu_state = MENU_STATE_MAIN;
                        break;
 
                default:
@@ -1080,7 +1016,7 @@ static void setting_menu(gchar buf)
 
                        err = scanf("%d", &bitrate);
 
-                       result = recorder_attr_set_audio_encoder_bitrate(hcamcorder->recorder, bitrate);
+                       result = recorder_attr_set_audio_encoder_bitrate(g_cam_handle->recorder, bitrate);
                        break;
 
                case 'M': /* Setting > muxed stream callback */
@@ -1088,11 +1024,11 @@ static void setting_menu(gchar buf)
                        break;
 
                case 'F': /* Set file name */
-                       result = recorder_set_filename(hcamcorder->recorder, TARGET_FILENAME_AUDIO);
+                       result = recorder_set_filename(g_cam_handle->recorder, TARGET_FILENAME_AUDIO);
                        break;
 
                case 'b': /* back */
-                       hcamcorder->menu_state = MENU_STATE_MAIN;
+                       g_cam_handle->menu_state = MENU_STATE_MAIN;
                        break;
 
                default:
@@ -1112,16 +1048,7 @@ static void setting_menu(gchar buf)
 }
 
 
-/**
- * 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)
+gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data)
 {
        gchar *buf = NULL;
        gsize read_size;
@@ -1139,8 +1066,8 @@ static gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer
        if (buf) {
                g_strstrip(buf);
 
-               g_print("\n\tMenu Status : %d\n", hcamcorder->menu_state);
-               switch (hcamcorder->menu_state) {
+               g_print("\n\tMenu Status : %d\n", g_cam_handle->menu_state);
+               switch (g_cam_handle->menu_state) {
                case MENU_STATE_INIT:
                        mode_change(buf[0]);
                        break;
@@ -1169,36 +1096,36 @@ static gboolean init(int type)
 {
        int ret;
 
-       if (!hcamcorder || !hcamcorder->recorder) {
-               g_print("NULL handle[%p]\n", hcamcorder);
+       if (!g_cam_handle || !g_cam_handle->recorder) {
+               g_print("NULL handle[%p]\n", g_cam_handle);
                return FALSE;
        }
 
-       ret = recorder_set_file_format(hcamcorder->recorder, RECORDER_FILE_FORMAT_MP4);
+       ret = recorder_set_file_format(g_cam_handle->recorder, RECORDER_FILE_FORMAT_MP4);
        if (ret != RECORDER_ERROR_NONE) {
                g_print("recorder_set_file_format failed[0x%x]\n", ret);
                return FALSE;
        }
 
-       ret = recorder_attr_set_audio_device(hcamcorder->recorder, RECORDER_AUDIO_DEVICE_MIC);
+       ret = recorder_attr_set_audio_device(g_cam_handle->recorder, RECORDER_AUDIO_DEVICE_MIC);
        if (ret != RECORDER_ERROR_NONE) {
                g_print("recorder_attr_set_audio_device failed[0x%x]\n", ret);
                return FALSE;
        }
 
-       ret = recorder_set_audio_encoder(hcamcorder->recorder, RECORDER_AUDIO_CODEC_AAC);
+       ret = recorder_set_audio_encoder(g_cam_handle->recorder, RECORDER_AUDIO_CODEC_AAC);
        if (ret != RECORDER_ERROR_NONE) {
                g_print("recorder_set_audio_encoder failed[0x%x]\n", ret);
                return FALSE;
        }
 
-       ret = recorder_attr_set_audio_samplerate(hcamcorder->recorder, AUDIO_SOURCE_SAMPLERATE_AAC);
+       ret = recorder_attr_set_audio_samplerate(g_cam_handle->recorder, AUDIO_SOURCE_SAMPLERATE_AAC);
        if (ret != RECORDER_ERROR_NONE) {
                g_print("recorder_attr_set_audio_samplerate failed[0x%x]\n", ret);
                return FALSE;
        }
 
-       ret = recorder_attr_set_audio_channel(hcamcorder->recorder, AUDIO_SOURCE_CHANNEL_AAC);
+       ret = recorder_attr_set_audio_channel(g_cam_handle->recorder, AUDIO_SOURCE_CHANNEL_AAC);
        if (ret != RECORDER_ERROR_NONE) {
                g_print("recorder_attr_set_audio_channel failed[0x%x]\n", ret);
                return FALSE;
@@ -1208,13 +1135,13 @@ static gboolean init(int type)
                /*================================================================================
                  Video capture mode
                 *=================================================================================*/
-               ret = recorder_set_video_encoder(hcamcorder->recorder, RECORDER_VIDEO_CODEC_MPEG4);
+               ret = recorder_set_video_encoder(g_cam_handle->recorder, RECORDER_VIDEO_CODEC_MPEG4);
                if (ret != RECORDER_ERROR_NONE) {
                        g_print("recorder_set_video_encoder failed[0x%x]\n", ret);
                        return FALSE;
                }
 
-               ret = recorder_attr_set_video_encoder_bitrate(hcamcorder->recorder, VIDEO_ENCODE_BITRATE);
+               ret = recorder_attr_set_video_encoder_bitrate(g_cam_handle->recorder, VIDEO_ENCODE_BITRATE);
                if (ret != RECORDER_ERROR_NONE) {
                        g_print("recorder_attr_set_video_encoder_bitrate failed[0x%x]\n", ret);
                        return FALSE;
@@ -1223,39 +1150,41 @@ static gboolean init(int type)
                /*================================================================================
                  Audio mode
                 *=================================================================================*/
-               ret = recorder_attr_set_time_limit(hcamcorder->recorder, 360000);
+               ret = recorder_attr_set_time_limit(g_cam_handle->recorder, 360000);
                if (ret != RECORDER_ERROR_NONE) {
                        g_print("recorder_attr_set_time_limit failed[0x%x]\n", ret);
                        return FALSE;
                }
 
-               ret = recorder_attr_set_audio_encoder_bitrate(hcamcorder->recorder, 128000);
+               ret = recorder_attr_set_audio_encoder_bitrate(g_cam_handle->recorder, 128000);
                if (ret != RECORDER_ERROR_NONE) {
                        g_print("recorder_attr_set_audio_encoder_bitrate failed[0x%x]\n", ret);
                        return FALSE;
                }
        }
 
-       recorder_set_error_cb(hcamcorder->recorder, _recorder_error_cb, NULL);
-       recorder_set_state_changed_cb(hcamcorder->recorder, _state_changed_cb, NULL);
-       recorder_set_interrupted_cb(hcamcorder->recorder, _interrupted_cb, NULL);
-       recorder_set_recording_status_cb(hcamcorder->recorder, _recording_status_cb, NULL);
-       recorder_set_recording_limit_reached_cb(hcamcorder->recorder, _recording_limit_reached_cb, NULL);
+       recorder_set_error_cb(g_cam_handle->recorder, _recorder_error_cb, NULL);
+       recorder_set_state_changed_cb(g_cam_handle->recorder, _state_changed_cb, NULL);
+       recorder_set_interrupted_cb(g_cam_handle->recorder, _interrupted_cb, NULL);
+       recorder_set_recording_status_cb(g_cam_handle->recorder, _recording_status_cb, NULL);
+       recorder_set_recording_limit_reached_cb(g_cam_handle->recorder, _recording_limit_reached_cb, NULL);
 
        g_print("Init DONE.\n");
 
        return TRUE;
 }
 
-static gboolean init_handle()
+cam_handle_t *init_handle()
 {
-       hcamcorder->mode = MODE_VIDEO_CAPTURE;  /* image(capture)/video(recording) mode */
-       hcamcorder->menu_state = MENU_STATE_INIT;
-       hcamcorder->isMute = FALSE;
-       hcamcorder->elapsed_time = 0;
-       hcamcorder->fps = SRC_VIDEO_FRAME_RATE_15; /*SRC_VIDEO_FRAME_RATE_30;*/
+       g_cam_handle = g_new0(cam_handle_t, 1);
 
-       return TRUE;
+       g_cam_handle->mode = MODE_VIDEO_CAPTURE;  /* image(capture)/video(recording) mode */
+       g_cam_handle->menu_state = MENU_STATE_INIT;
+       g_cam_handle->isMute = FALSE;
+       g_cam_handle->elapsed_time = 0;
+       g_cam_handle->fps = SRC_VIDEO_FRAME_RATE_15; /*SRC_VIDEO_FRAME_RATE_30;*/
+
+       return g_cam_handle;
 }
 
 static void _sound_stream_focus_state_changed_cb(sound_stream_info_h stream_info, sound_stream_focus_mask_e focus_mask, sound_stream_focus_state_e focus_state,
@@ -1281,79 +1210,72 @@ static gboolean mode_change(gchar buf)
        int state = RECORDER_STATE_NONE;
        char media_type = '\0';
        bool check = FALSE;
+       struct timeval time_previous;
+       struct timeval time_current;
+       struct timeval time_result;
        recorder_device_state_e device_state = RECORDER_DEVICE_STATE_IDLE;
        sound_stream_info_h stream_info = NULL;
 
-       gettimeofday(&previous, NULL);
-       g_timer_reset(timer);
+       gettimeofday(&time_previous, NULL);
+       g_timer_reset(g_recorder_timer);
 
-       if (hcamcorder->recorder) {
-               err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
+       if (g_cam_handle->recorder) {
+               err = recorder_get_state(g_cam_handle->recorder, (recorder_state_e*)&state);
                if (state != RECORDER_STATE_NONE) {
                        if (state == RECORDER_STATE_RECORDING ||
                                        state == RECORDER_STATE_PAUSED) {
                                g_print("recorder_cancel\n");
-                               err = recorder_cancel(hcamcorder->recorder);
+                               err = recorder_cancel(g_cam_handle->recorder);
                                if (err != RECORDER_ERROR_NONE) {
                                        g_print("exit recorder_cancel failed 0x%x\n", err);
                                        return FALSE;
                                }
                        }
 
-                       err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
+                       err = recorder_get_state(g_cam_handle->recorder, (recorder_state_e*)&state);
                        if (state == RECORDER_STATE_READY) {
                                g_print("recorder_unprepare\n");
-                               recorder_unprepare(hcamcorder->recorder);
+                               recorder_unprepare(g_cam_handle->recorder);
                        }
 
-                       err = recorder_get_state(hcamcorder->recorder, (recorder_state_e*)&state);
+                       err = recorder_get_state(g_cam_handle->recorder, (recorder_state_e*)&state);
                        if (state == RECORDER_STATE_CREATED) {
                                g_print("recorder_destroy\n");
-                               err = recorder_destroy(hcamcorder->recorder);
+                               err = recorder_destroy(g_cam_handle->recorder);
                                if (err == RECORDER_ERROR_NONE) {
                                        g_print("recorder_destroy done\n");
-                                       hcamcorder->recorder = NULL;
+                                       g_cam_handle->recorder = NULL;
                                }
                        }
                }
        }
 
-       init_handle();
-
        switch (buf) {
        case '1':
-               hcamcorder->mode = MODE_VIDEO_CAPTURE;
-
-               g_print("camera_create\n");
+               g_cam_handle->mode = MODE_VIDEO_CAPTURE;
 
-               err = camera_create(CAMERA_DEVICE_CAMERA0, &hcamcorder->camera);
+               err = camera_create(CAMERA_DEVICE_CAMERA0, &g_cam_handle->camera);
                if (err != CAMERA_ERROR_NONE) {
                        g_print("camera create failed 0x%d\n", err);
                        return FALSE;
                }
 
-               err = camera_set_display(hcamcorder->camera, CAMERA_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(ad.win));
-               if (err != CAMERA_ERROR_NONE) {
-                       g_print("set display failed 0x%d\n", err);
-                       camera_destroy(hcamcorder->camera);
-                       hcamcorder->camera = NULL;
-                       return FALSE;
-               }
+               set_display(g_cam_handle);
 
-               err = recorder_create_videorecorder(hcamcorder->camera, &hcamcorder->recorder);
+               err = recorder_create_videorecorder(g_cam_handle->camera, &g_cam_handle->recorder);
                if (err != RECORDER_ERROR_NONE) {
                        g_print("video recorder create failed 0x%d\n", err);
-                       camera_stop_preview(hcamcorder->camera);
-                       camera_destroy(hcamcorder->camera);
-                       hcamcorder->camera = NULL;
+                       camera_stop_preview(g_cam_handle->camera);
+                       camera_destroy(g_cam_handle->camera);
+                       g_cam_handle->camera = NULL;
                        return FALSE;
                }
 
                check = TRUE;
                break;
        case '2':
-               hcamcorder->mode = MODE_AUDIO;
-               err = recorder_create_audiorecorder(&hcamcorder->recorder);
+               g_cam_handle->mode = MODE_AUDIO;
+               err = recorder_create_audiorecorder(&g_cam_handle->recorder);
                if (err != RECORDER_ERROR_NONE) {
                        g_print("audio recorder create failed 0x%x\n", err);
                        return FALSE;
@@ -1362,16 +1284,16 @@ static gboolean mode_change(gchar buf)
                check = TRUE;
                break;
        case '3':
-               hcamcorder->mode = MODE_AUDIO;
-               err = recorder_create_audiorecorder(&hcamcorder->recorder);
+               g_cam_handle->mode = MODE_AUDIO;
+               err = recorder_create_audiorecorder(&g_cam_handle->recorder);
                if (err != RECORDER_ERROR_NONE) {
                        g_print("audio recorder create failed 0x%d\n", err);
                        return FALSE;
                }
 
-               sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, _sound_stream_focus_state_changed_cb, hcamcorder, &stream_info);
+               sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, _sound_stream_focus_state_changed_cb, g_cam_handle, &stream_info);
                if (stream_info) {
-                       recorder_set_sound_stream_info(hcamcorder->recorder, stream_info);
+                       recorder_set_sound_stream_info(g_cam_handle->recorder, stream_info);
                        sound_manager_destroy_stream_information(stream_info);
                }
 
@@ -1398,166 +1320,35 @@ static gboolean mode_change(gchar buf)
                g_print("get result 0x%x - video state %d\n", err, device_state);
                return FALSE;
        case 'q':
-               g_print("\t Quit Camcorder Testsuite!!\n");
-               hcamcorder->mode = -1;
-               elm_exit();
+               g_print("\t Quit Recorder Testsuite!!\n");
+               g_cam_handle->mode = -1;
+               quit_test();
                return FALSE;
        default:
                g_print("\t Invalid media type(%c)\n", media_type);
                return FALSE;
        }
 
-       if (!init(hcamcorder->mode)) {
+       if (!init(g_cam_handle->mode)) {
                g_print("testsuite init() failed.\n");
                return FALSE;
        }
 
-       err = recorder_prepare(hcamcorder->recorder);
+       err = recorder_prepare(g_cam_handle->recorder);
 
-       g_print("recorder_prepare()  : %12.6lfs\n", g_timer_elapsed(timer, NULL));
+       g_print("recorder_prepare()  : %12.6lfs\n", g_timer_elapsed(g_recorder_timer, NULL));
 
        if (err != RECORDER_ERROR_NONE) {
                g_print("recorder_prepare  = %x\n", err);
                return FALSE;
        }
 
-       gettimeofday(&current, NULL);
-       timersub(&current, &previous, &res);
+       gettimeofday(&time_current, NULL);
+       timersub(&time_current, &time_previous, &time_result);
 
-       g_print("Recorder Preparing Time  : %ld.%lds\n", res.tv_sec, res.tv_usec);
+       g_print("Recorder Preparing Time  : %ld.%lds\n", time_result.tv_sec, time_result.tv_usec);
 
-       hcamcorder->menu_state = MENU_STATE_MAIN;
+       g_cam_handle->menu_state = MENU_STATE_MAIN;
 
        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));
-       recorder_state = RECORDER_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);
-
-       memset(&ad, 0x0, sizeof(appdata));
-       ops.data = &ad;
-
-       bret = appcore_efl_main("recorder_test", &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/recorder_test.h b/test/recorder_test.h
new file mode 100644 (file)
index 0000000..e200a7a
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * recorder_test
+ *
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * 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 __RECORDER_TEST_H__
+#define __RECORDER_TEST_H__
+
+/*=======================================================================================
+  |  INCLUDE FILES                                                                        |
+  =======================================================================================*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <sys/time.h>
+#include <camera.h>
+#include <recorder.h>
+#include <sound_manager.h>
+
+/*-----------------------------------------------------------------------
+  |    DATA TYPE DEFINITIONS:                   |
+  -----------------------------------------------------------------------*/
+typedef struct _cam_handle {
+       camera_h camera;
+       recorder_h recorder;
+       int mode;                       /*video/audio(recording) mode */
+       int menu_state;
+       int fps;
+       bool isMute;
+       unsigned long long elapsed_time;
+} cam_handle_t;
+
+/*---------------------------------------------------------------------------
+  |    LOCAL FUNCTION PROTOTYPES:                                             |
+  ---------------------------------------------------------------------------*/
+void set_display(cam_handle_t *cam_handle);
+void quit_test();
+gboolean cmd_input(GIOChannel *channel, GIOCondition condition, gpointer data);
+cam_handle_t *init_handle();
+void print_menu();
+void flush_stdin();
+
+
+#endif /* __RECORDER_TEST_H__ */
diff --git a/test/recorder_test_headed.c b/test/recorder_test_headed.c
new file mode 100644 (file)
index 0000000..bbd9c90
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * recorder_test_headed
+ *
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * 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 <Elementary.h>
+#include <appcore-efl.h>
+#include "recorder_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 *cam_handle)
+{
+       int err = 0;
+       int display_type = 0;
+
+       while (1) {
+               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");
+                       return;
+               }
+
+               switch (display_type) {
+               case 1:
+                       camera_set_display(cam_handle->camera, CAMERA_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(ad.win));
+                       return;
+               case 2:
+                       camera_set_display(cam_handle->camera, CAMERA_DISPLAY_TYPE_EVAS, GET_DISPLAY(ad.eo));
+                       return;
+               case 3:
+                       camera_set_display(cam_handle->camera, CAMERA_DISPLAY_TYPE_NONE, NULL);
+                       return;
+               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, "recorder_test_headed", ELM_WIN_BASIC);
+       if (!win) {
+               g_print("\n\tfailed to get window\n\n");
+               return 1;
+       }
+
+       elm_win_title_set(win, "recorder_test_headed");
+       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);
+
+       bg = elm_bg_add(win);
+       if (!bg) {
+               g_print("\n\tfailed to get elm bg\n\n");
+               return 1;
+       }
+
+       elm_win_resize_object_add(win, bg);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(bg);
+
+       rect = evas_object_rectangle_add(evas_object_evas_get(win));
+       if (!rect) {
+               g_print("\n\tfailed to get rectangle\n\n");
+               return 1;
+       }
+
+       evas_object_color_set(rect, 0, 0, 0, 0);
+       evas_object_render_op_set(rect, EVAS_RENDER_COPY);
+
+       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("recorder_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/recorder_test_headless.c b/test/recorder_test_headless.c
new file mode 100644 (file)
index 0000000..63176c3
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * recorder_test_headless
+ *
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * 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 "recorder_test.h"
+
+
+static GMainLoop *g_mainloop_recorder_test;
+
+
+void set_display(cam_handle_t *cam_handle)
+{
+       g_print("Display type : NULL for headless\n");
+       camera_set_display(cam_handle->camera, CAMERA_DISPLAY_TYPE_NONE, NULL);
+}
+
+
+void quit_test(void)
+{
+       g_main_loop_quit(g_mainloop_recorder_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);
+
+       print_menu();
+
+       g_mainloop_recorder_test = g_main_loop_new(NULL, FALSE);
+
+       g_main_loop_run(g_mainloop_recorder_test);
+
+       g_print("\n\treturn main loop\n\n");
+
+       g_main_loop_unref(g_mainloop_recorder_test);
+
+       g_free(handle);
+       g_io_channel_unref(stdin_channel);
+
+       return 0;
+}