[UTC][recorder][Non-ACR] Line coverage improvement 66/289466/6
authorJeongmo Yang <jm80.yang@samsung.com>
Wed, 8 Mar 2023 00:00:37 +0000 (09:00 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 14 Mar 2023 06:47:33 +0000 (15:47 +0900)
Change-Id: I17b641ab2ca399b26bf7a9744dc83a557e28a93b
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
src/utc/recorder/CMakeLists.txt
src/utc/recorder/utc_media_recorder.c
src/utc/recorder/utc_media_recorder_callback.c
src/utc/recorder/utc_media_recorder_lifecycle.c
src/utc/recorder/utc_media_recorder_util.c [new file with mode: 0644]
src/utc/recorder/utc_media_recorder_util.h [new file with mode: 0644]

index b96d8f7ea51509137a56b4a644f54835f6808fdc..20a9b9649be6bc741f3b231555cd9a4c96adac32 100644 (file)
@@ -5,6 +5,7 @@ SET(RPM_NAME "core-${PKG_NAME}-tests")
 
 SET(CAPI_LIB "capi-media-recorder")
 SET(TC_SOURCES
+    utc_media_recorder_util.c
     utc_media_recorder.c
     utc_media_recorder_callback.c
     utc_media_recorder_lifecycle.c
index eb2fb5a0288ac97d6d43c03d619b8b1e68285138..8ec878e06e0d380b8fafd8d0d3050b7692bb5b99 100644 (file)
 
 #include "assert.h"
 #include <media/recorder.h>
-#include <storage.h>
 #include <string.h>
 #include <system_info.h>
 #include <sound_manager.h>
+#include "utc_media_recorder_util.h"
 
-static char *media = ".test_record.amr";
-static char *media_path = NULL;
 static bool audio_recording_supported = false;
 static recorder_h recorder = NULL;
 static int startup_ret = RECORDER_ERROR_NONE;
@@ -30,96 +28,6 @@ static bool video_recording_supported = false;
 static camera_h camera = NULL;
 static int startup_ret_camera = CAMERA_ERROR_NONE;
 
-#define UTC_AUDIO_CODEC_NUM 5
-#define UTC_FILE_FORMAT_NUM 7
-
-enum {
-       USER_DATA_AUDIO_CODEC,
-       USER_DATA_FILE_FORMAT,
-       USER_DATA_MAX
-};
-
-static bool    audiocodec_fileformat_compatibility_table[UTC_AUDIO_CODEC_NUM][UTC_FILE_FORMAT_NUM] =
-{        /* 3GP MP4 AMR ADTS WAV OGG M2TS */
-/*AMR*/     {1,  0,  1,  0,   0,  0,  0},
-/*AAC*/     {1,  1,  0,  0,   0,  0,  1},
-/*VORBIS*/  {0,  0,  0,  0,   0,  1,  0},
-/*PCM*/     {0,  0,  0,  0,   1,  0,  0},
-/*MP3*/     {0,  1,  0,  0,   0,  0,  1}
-};
-
-static bool _audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
-{
-       if (user_data != NULL) {
-               *((recorder_audio_codec_e *)user_data) = codec;
-               return false;
-       }
-
-       return true;
-}
-
-static bool _file_format_cb(recorder_file_format_e format, void *user_data)
-{
-       int *l_user_data = NULL;
-
-       if (user_data != NULL) {
-               l_user_data = (int *)user_data;
-               if (audiocodec_fileformat_compatibility_table[l_user_data[USER_DATA_AUDIO_CODEC]][(int)format]) {
-                       l_user_data[USER_DATA_FILE_FORMAT] = (int)format;
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-static int _get_supported_audio_encoder_and_file_format(recorder_h recorder, int *audio_codec, int *file_format)
-{
-       int ret = RECORDER_ERROR_NONE;
-       int l_audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int l_file_format = -1;
-       int user_data[USER_DATA_MAX];
-
-       if (audio_codec == NULL || file_format == NULL)
-               return RECORDER_ERROR_INVALID_PARAMETER;
-
-       memset(user_data, 0, sizeof(int) * USER_DATA_MAX);
-       ret = recorder_foreach_supported_audio_encoder(recorder, _audio_encoder_cb, &l_audio_codec);
-       assert_eq(ret, RECORDER_ERROR_NONE);
-
-       if ((int)l_audio_codec >= 0 && (int)l_audio_codec < UTC_AUDIO_CODEC_NUM) {
-               user_data[USER_DATA_AUDIO_CODEC] = (int)l_audio_codec;
-               ret = recorder_foreach_supported_file_format(recorder, _file_format_cb, user_data);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               l_file_format = (recorder_file_format_e)user_data[USER_DATA_FILE_FORMAT];
-               if ((int)l_file_format >= 0 && (int)l_file_format < UTC_FILE_FORMAT_NUM) {
-                       *audio_codec = l_audio_codec;
-                       *file_format = l_file_format;
-
-                       return RECORDER_ERROR_NONE;
-               }
-       }
-
-       return RECORDER_ERROR_NOT_SUPPORTED;
-}
-
-static bool _storage_device_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
-{
-       int size_of_path = 0;
-
-       if (type == STORAGE_TYPE_INTERNAL) {
-               size_of_path = strlen(path) + strlen(media) + 2;
-               media_path = (char *)malloc(size_of_path);
-               if (media_path != NULL) {
-                       snprintf(media_path, size_of_path, "%s/%s", path, media);
-               }
-
-               return false;
-       }
-
-       return true;
-}
 
 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,
        sound_stream_focus_change_reason_e reason_for_change, int sound_behavior, const char *additional_info, void *user_data)
@@ -141,10 +49,7 @@ static void _sound_stream_focus_state_changed_cb(sound_stream_info_h stream_info
  */
 void utc_media_recorder_startup(void)
 {
-       storage_foreach_device_supported(_storage_device_cb, NULL);
-
-       system_info_get_platform_bool("http://tizen.org/feature/media.audio_recording", &audio_recording_supported);
-       system_info_get_platform_bool("http://tizen.org/feature/media.video_recording", &video_recording_supported);
+       utc_media_recorder_util_get_recording_supported(&audio_recording_supported, &video_recording_supported);
 
        startup_ret = recorder_create_audiorecorder(&recorder);
        startup_ret_camera = camera_create(CAMERA_DEVICE_CAMERA0, &camera);
@@ -1002,27 +907,15 @@ int utc_media_recorder_attr_get_video_encoder_bitrate_n2(void)
 int utc_media_recorder_attr_is_muted_p(void)
 {
        int ret=RECORDER_ERROR_NONE;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-       assert_eq(ret, RECORDER_ERROR_NONE);
-
-       if (audio_codec < 0 || file_format < 0) {
-               fprintf(stderr, "Audio codec(or file format) is not supported.\n");
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       if (ret != RECORDER_ERROR_NONE)
                return 1;
-       }
-
-       ret = recorder_set_audio_encoder(recorder, audio_codec);
-       ret |= recorder_set_file_format(recorder, file_format);
-       ret |= recorder_set_filename(recorder, media_path);
-       ret |= recorder_prepare(recorder);
-       assert_eq(ret, RECORDER_ERROR_NONE);
 
        ret = recorder_start(recorder);
        assert_eq(ret, RECORDER_ERROR_NONE);
@@ -2218,26 +2111,13 @@ int utc_media_recorder_get_audio_level_p(void)
 {
        double value = 0.0;
        int ret = RECORDER_ERROR_NONE;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-       assert_eq(ret, RECORDER_ERROR_NONE);
-
-       if (audio_codec < 0 || file_format < 0) {
-               fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-               return 1;
-       }
-
-       ret = recorder_set_audio_encoder(recorder, audio_codec);
-       ret |= recorder_set_file_format(recorder, file_format);
-       ret |= recorder_set_filename(recorder, media_path);
-       ret |= recorder_prepare(recorder);
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
        ret = recorder_start(recorder);
@@ -2577,13 +2457,20 @@ int utc_media_recorder_set_file_format_n(void)
 int utc_media_recorder_set_filename_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       char *media_path = NULL;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
+       utc_media_recorder_util_get_media_path(&media_path);
+       assert(media_path);
+
        ret = recorder_set_filename(recorder, media_path);
+
+       g_free(media_path);
+
        assert_eq(ret, RECORDER_ERROR_NONE);
 
        return 0;
@@ -2944,21 +2831,27 @@ int utc_media_recorder_set_video_resolution_n2(void)
 int utc_media_recorder_get_filename_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
-       char *f_name = NULL;
+       char *set_name = NULL;
+       char *get_name = NULL;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = recorder_set_filename(recorder, media_path);
+       utc_media_recorder_util_get_media_path(&set_name);
+       assert(set_name);
+
+       ret = recorder_set_filename(recorder, set_name);
+
        assert_eq(ret, RECORDER_ERROR_NONE);
 
-       ret = recorder_get_filename(recorder, &f_name);
-       if (f_name) {
-               free(f_name);
-               f_name = NULL;
-       }
+       ret = recorder_get_filename(recorder, &get_name);
+
+       assert_eq(strcmp(set_name, get_name), 0);
+
+       g_free(set_name);
+       free(get_name);
 
        assert_eq(ret, RECORDER_ERROR_NONE);
 
index 0ec021ab883b2a5ff9cbbde59ca1a798927ff351..b2e4a2aec8172c01169280ca4fb1c2c31d7dbd39 100644 (file)
@@ -17,6 +17,9 @@
 #include "assert.h"
 #include <media/recorder.h>
 #include <system_info.h>
+#include "utc_media_recorder_util.h"
+
+#define CALLBACK_CHECK_COUNT    10
 
 static recorder_h recorder = NULL;
 static camera_h camera = NULL;
@@ -37,9 +40,7 @@ static int startup_ret_camera = CAMERA_ERROR_NONE;
  */
 void utc_media_recorder_callback_startup(void)
 {
-       /* start of TC */
-       system_info_get_platform_bool("http://tizen.org/feature/media.audio_recording", &audio_recording_supported);
-       system_info_get_platform_bool("http://tizen.org/feature/media.video_recording", &video_recording_supported);
+       utc_media_recorder_util_get_recording_supported(&audio_recording_supported, &video_recording_supported);
 
        startup_ret = recorder_create_audiorecorder(&recorder);
        startup_ret_camera = camera_create(CAMERA_DEVICE_CAMERA0, &camera);
@@ -72,38 +73,41 @@ void utc_media_recorder_callback_cleanup(void)
        return;
 }
 
-static bool _audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
-{
-       return true;
-}
-
-static bool _file_format_cb(recorder_file_format_e format, void *user_data)
-{
-       return true;
-}
-
 static bool _video_encoder_cb(recorder_video_codec_e codec,  void *user_data)
 {
-       return true;
+       return false;
 }
 
 static bool _video_resolution_cb(int width, int height, void *user_data)
 {
-       return true;
+       return false;
 }
 
 static void _limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
 {
+       utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
-static void _recording_statis_cb(unsigned long long elapsed_time, unsigned long long file_size,  void *user_data)
+static void _recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size,  void *user_data)
 {
+       int *status_count = (int *)user_data;
+
+       if (!status_count)
+               return;
+
+       if ((*status_count)++ == CALLBACK_CHECK_COUNT)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
 static void _state_changed_cb(recorder_state_e previous, recorder_state_e current, bool by_asm,  void *user_data)
 {
+       if (current == RECORDER_STATE_READY)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
@@ -119,6 +123,14 @@ static void _interrupt_started_cb(recorder_policy_e policy, recorder_state_e sta
 
 static void _audio_stream_cb(void *stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data)
 {
+       int *buffer_count = (int *)user_data;
+
+       if (!buffer_count)
+               return;
+
+       if ((*buffer_count)++ == CALLBACK_CHECK_COUNT)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
@@ -129,16 +141,35 @@ static void _error_cb(recorder_error_e error, recorder_state_e current_state, vo
 
 static void _device_state_changed_cb(recorder_type_e type, recorder_device_state_e state, void *user_data)
 {
+       if (state == RECORDER_DEVICE_STATE_RECORDING)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
 static void _muxed_stream_cb(void *stream, int size, unsigned long long offset, void *user_data)
 {
+       int *buffer_count = (int *)user_data;
+
+       if (!buffer_count)
+               return;
+
+       if ((*buffer_count)++ == CALLBACK_CHECK_COUNT)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return;
 }
 
 static bool _video_encode_decision_cb(recorder_video_data_s *frame, void *user_data)
 {
+       int *buffer_count = (int *)user_data;
+
+       if (!buffer_count)
+               return true;
+
+       if ((*buffer_count)++ == CALLBACK_CHECK_COUNT)
+               utc_media_recorder_util_mainloop_quit(user_data);
+
        return true;
 }
 
@@ -333,6 +364,7 @@ int utc_media_recorder_foreach_supported_video_encoder_n(void)
 int utc_media_recorder_foreach_supported_video_resolution_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       recorder_h video_recorder = NULL;
 
        if (!video_recording_supported) {
                assert_eq(startup_ret_camera, CAMERA_ERROR_NOT_SUPPORTED);
@@ -344,9 +376,14 @@ int utc_media_recorder_foreach_supported_video_resolution_p(void)
                return 0;
        }
 
-       ret = recorder_foreach_supported_video_resolution(recorder, _video_resolution_cb, NULL);
+       ret = recorder_create_videorecorder(camera, &video_recorder);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = recorder_foreach_supported_video_resolution(video_recorder, _video_resolution_cb, NULL);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       recorder_destroy(video_recorder);
+
        return 0;
 }
 
@@ -407,6 +444,20 @@ int utc_media_recorder_set_recording_limit_reached_cb_p(void)
        ret = recorder_set_recording_limit_reached_cb(recorder, _limit_reached_cb, NULL);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = recorder_attr_set_time_limit(recorder, 2);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = recorder_start(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_cancel(recorder);
+       recorder_unprepare(recorder);
+
        return 0;
 }
 
@@ -453,15 +504,27 @@ int utc_media_recorder_set_recording_limit_reached_cb_n(void)
 int utc_media_recorder_set_recording_status_cb_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       int status_count = 0;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = recorder_set_recording_status_cb(recorder, _recording_statis_cb, NULL);
+       ret = recorder_set_recording_status_cb(recorder, _recording_status_cb, (void *)&status_count);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = recorder_start(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_cancel(recorder);
+       recorder_unprepare(recorder);
+
        return 0;
 }
 
@@ -516,6 +579,13 @@ int utc_media_recorder_set_state_changed_cb_p(void)
        ret = recorder_set_state_changed_cb(recorder, _state_changed_cb, NULL);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_unprepare(recorder);
+
        return 0;
 }
 
@@ -615,15 +685,27 @@ int utc_media_recorder_set_interrupted_cb_n(void)
 int utc_media_recorder_set_audio_stream_cb_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       int buffer_count = 0;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = recorder_set_audio_stream_cb(recorder, _audio_stream_cb, NULL);
+       ret = recorder_set_audio_stream_cb(recorder, _audio_stream_cb, (void *)&buffer_count);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = recorder_start(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_cancel(recorder);
+       recorder_unprepare(recorder);
+
        return 0;
 }
 
@@ -1050,20 +1132,28 @@ int utc_media_recorder_unset_error_cb_n(void)
 int utc_media_recorder_add_device_state_changed_cb_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
-       int check_ret = RECORDER_ERROR_NONE;
        int cb_id = 0;
 
        ret = recorder_add_device_state_changed_cb(_device_state_changed_cb, NULL, &cb_id);
 
-       if (audio_recording_supported)
-               check_ret = RECORDER_ERROR_NONE;
-       else
-               check_ret = RECORDER_ERROR_NOT_SUPPORTED;
+       if (audio_recording_supported) {
+               assert_eq(ret, RECORDER_ERROR_NONE);
+
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+               assert_eq(ret, RECORDER_ERROR_NONE);
+
+               ret = recorder_start(recorder);
+               assert_eq(ret, RECORDER_ERROR_NONE);
+
+               utc_media_recorder_util_mainloop_run();
 
-       if (cb_id > 0)
                recorder_remove_device_state_changed_cb(cb_id);
 
-       assert_eq(ret, check_ret);
+               recorder_cancel(recorder);
+               recorder_unprepare(recorder);
+       } else {
+               assert_eq(ret, RECORDER_ERROR_NOT_SUPPORTED);
+       }
 
        return 0;
 }
@@ -1237,15 +1327,27 @@ int utc_media_recorder_remove_device_state_changed_cb_n2(void)
 int utc_media_recorder_set_muxed_stream_cb_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       int buffer_count = 0;
 
        if (!audio_recording_supported) {
                assert_eq(startup_ret, RECORDER_ERROR_NOT_SUPPORTED);
                return 0;
        }
 
-       ret = recorder_set_muxed_stream_cb(recorder, _muxed_stream_cb, NULL);
+       ret = recorder_set_muxed_stream_cb(recorder, _muxed_stream_cb, (void *)&buffer_count);
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = recorder_start(recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_cancel(recorder);
+       recorder_unprepare(recorder);
+
        return 0;
 }
 
@@ -1348,6 +1450,9 @@ int utc_media_recorder_unset_muxed_stream_cb_n(void)
 int utc_media_recorder_set_video_encode_decision_cb_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
+       int buffer_count = 0;
+       char *media_path = NULL;
+       recorder_h video_recorder = NULL;
 
        if (!video_recording_supported) {
                assert_eq(startup_ret_camera, CAMERA_ERROR_NOT_SUPPORTED);
@@ -1359,9 +1464,31 @@ int utc_media_recorder_set_video_encode_decision_cb_p(void)
                return 0;
        }
 
-       ret = recorder_set_video_encode_decision_cb(recorder, _video_encode_decision_cb, NULL);
+       ret = recorder_create_videorecorder(camera, &video_recorder);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       ret = recorder_set_video_encode_decision_cb(video_recorder, _video_encode_decision_cb, (void *)&buffer_count);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       utc_media_recorder_util_get_media_path(&media_path);
+
+       ret = recorder_set_audio_encoder(video_recorder, RECORDER_AUDIO_CODEC_DISABLE);
+       ret |= recorder_set_video_encoder(video_recorder, RECORDER_VIDEO_CODEC_MPEG4);
+       ret |= recorder_set_file_format(video_recorder, RECORDER_FILE_FORMAT_3GP);
+       ret |= recorder_set_filename(video_recorder, media_path);
+       ret |= recorder_prepare(video_recorder);
+       ret |= recorder_start(video_recorder);
+
+       g_free(media_path);
+
        assert_eq(ret, RECORDER_ERROR_NONE);
 
+       utc_media_recorder_util_mainloop_run();
+
+       recorder_cancel(video_recorder);
+       recorder_unprepare(video_recorder);
+       recorder_destroy(video_recorder);
+
        return 0;
 }
 
index a65a49775cc7745ba7cb7b5fe19b926135130c22..4a1fd93aecb7806a285f1c7f4ac5686f24e0e37d 100644 (file)
 #include <string.h>
 #include <storage.h>
 #include <system_info.h>
+#include "utc_media_recorder_util.h"
+
 
-static char *media = ".test_record.amr";
-static char *media_path = NULL;
 static bool video_recording_supported = false;
 static bool audio_recording_supported = false;
 
-#define UTC_AUDIO_CODEC_NUM 5
-#define UTC_FILE_FORMAT_NUM 7
-
-enum {
-       USER_DATA_AUDIO_CODEC,
-       USER_DATA_FILE_FORMAT,
-       USER_DATA_MAX
-};
-
-static bool    audiocodec_fileformat_compatibility_table[UTC_AUDIO_CODEC_NUM][UTC_FILE_FORMAT_NUM] =
-{        /* 3GP MP4 AMR ADTS WAV OGG M2TS */
-/*AMR*/     {1,  0,  1,  0,   0,  0,  0},
-/*AAC*/     {1,  1,  0,  0,   0,  0,  1},
-/*VORBIS*/  {0,  0,  0,  0,   0,  1,  0},
-/*PCM*/     {0,  0,  0,  0,   1,  0,  0},
-/*MP3*/     {0,  1,  0,  0,   0,  0,  1}
-};
-
-static bool _audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
-{
-       if (user_data != NULL) {
-               *((recorder_audio_codec_e *)user_data) = codec;
-               return false;
-       }
-
-       return true;
-}
-
-static bool _file_format_cb(recorder_file_format_e format, void *user_data)
-{
-       int *l_user_data = NULL;
-
-       if (user_data != NULL) {
-               l_user_data = (int *)user_data;
-               if (audiocodec_fileformat_compatibility_table[l_user_data[USER_DATA_AUDIO_CODEC]][(int)format]) {
-                       l_user_data[USER_DATA_FILE_FORMAT] = (int)format;
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-static int _get_supported_audio_encoder_and_file_format(recorder_h recorder, int *audio_codec, int *file_format)
-{
-       int ret = RECORDER_ERROR_NONE;
-       int l_audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int l_file_format = -1;
-       int user_data[USER_DATA_MAX];
-
-       if (audio_codec == NULL || file_format == NULL)
-               return RECORDER_ERROR_INVALID_PARAMETER;
-
-       memset(user_data, 0, sizeof(int) * USER_DATA_MAX);
-       ret = recorder_foreach_supported_audio_encoder(recorder, _audio_encoder_cb, &l_audio_codec);
-       assert_eq(ret, RECORDER_ERROR_NONE);
-
-       if ((int)l_audio_codec >= 0 && (int)l_audio_codec < UTC_AUDIO_CODEC_NUM) {
-               user_data[USER_DATA_AUDIO_CODEC] = (int)l_audio_codec;
-               ret = recorder_foreach_supported_file_format(recorder, _file_format_cb, user_data);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               l_file_format = (recorder_file_format_e)user_data[USER_DATA_FILE_FORMAT];
-               if ((int)l_file_format >= 0 && (int)l_file_format < UTC_FILE_FORMAT_NUM) {
-                       *audio_codec = l_audio_codec;
-                       *file_format = l_file_format;
-
-                       return RECORDER_ERROR_NONE;
-               }
-       }
-
-       return RECORDER_ERROR_NOT_SUPPORTED;
-}
-
-static bool _storage_device_cb(int storage_id, storage_type_e type, storage_state_e state, const char* path, void* user_data)
-{
-       int size_of_path = 0;
-
-       if (type == STORAGE_TYPE_INTERNAL) {
-               size_of_path = strlen(path) + strlen(media) + 6;
-               media_path = (char *)malloc(size_of_path);
-               if (media_path != NULL) {
-                       snprintf(media_path, size_of_path, "%s/%s", path, media);
-               }
-
-               return false;
-       }
-
-       return true;
-}
 
 /**
  * @function            utc_media_recorder_lifecycle_startup
@@ -128,10 +38,7 @@ static bool _storage_device_cb(int storage_id, storage_type_e type, storage_stat
  */
 void utc_media_recorder_lifecycle_startup(void)
 {
-       storage_foreach_device_supported(_storage_device_cb, NULL);
-
-       system_info_get_platform_bool("http://tizen.org/feature/media.audio_recording", &audio_recording_supported);
-       system_info_get_platform_bool("http://tizen.org/feature/media.video_recording", &video_recording_supported);
+       utc_media_recorder_util_get_recording_supported(&audio_recording_supported, &video_recording_supported);
 
        return;
 }
@@ -212,29 +119,17 @@ int utc_media_recorder_cancel_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_set_filename(recorder, media_path);
-               ret |= recorder_prepare(recorder);
-               ret |= recorder_start(recorder);
-
+               ret = recorder_start(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
-               sleep(2);
+               sleep(1);
 
                ret = recorder_cancel(recorder);
 
@@ -272,24 +167,11 @@ int utc_media_recorder_cancel_n(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_prepare(recorder);
-
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
                ret = recorder_cancel(recorder);
@@ -331,24 +213,11 @@ int utc_media_recorder_commit_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_set_filename(recorder, media_path);
-               ret |= recorder_prepare(recorder);
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                ret |= recorder_start(recorder);
 
                assert_eq(ret, RECORDER_ERROR_NONE);
@@ -391,24 +260,11 @@ int utc_media_recorder_commit_n(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_prepare(recorder);
-
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
                ret = recorder_commit(recorder);
@@ -416,7 +272,7 @@ int utc_media_recorder_commit_n(void)
                recorder_unprepare(recorder);
                recorder_destroy(recorder);
 
-               assert_neq(ret, RECORDER_ERROR_NONE);
+               assert_eq(ret, RECORDER_ERROR_INVALID_STATE);
        } else {
                assert_eq(ret,RECORDER_ERROR_NOT_SUPPORTED);
        }
@@ -569,24 +425,11 @@ int utc_media_recorder_pause_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_set_filename(recorder, media_path);
-               ret |= recorder_prepare(recorder);
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                ret |= recorder_start(recorder);
 
                assert_eq(ret, RECORDER_ERROR_NONE);
@@ -630,24 +473,11 @@ int utc_media_recorder_pause_n(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder, file_format);
-               ret |= recorder_prepare(recorder);
-
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
                ret = recorder_pause(recorder);
@@ -685,27 +515,13 @@ int utc_media_recorder_prepare_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder,file_format);
-
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               ret = recorder_prepare(recorder);
-
                recorder_unprepare(recorder);
                recorder_destroy(recorder);
 
@@ -801,25 +617,11 @@ int utc_media_recorder_start_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder,file_format);
-               ret |= recorder_set_filename(recorder, media_path);
-               ret |= recorder_prepare(recorder);
-
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
                ret = recorder_start(recorder);
@@ -894,24 +696,11 @@ int utc_media_recorder_unprepare_p(void)
 {
        int ret = RECORDER_ERROR_NONE;
        recorder_h recorder = NULL;
-       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
-       int file_format = -1;
 
        ret = recorder_create_audiorecorder(&recorder);
 
        if (audio_recording_supported) {
-               ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
-               assert_eq(ret, RECORDER_ERROR_NONE);
-
-               if (audio_codec < 0 || file_format < 0) {
-                       fprintf(stderr, "Audio codec(or file format) is not supported.\n");
-                       return 1;
-               }
-
-               ret = recorder_set_audio_encoder(recorder, audio_codec);
-               ret |= recorder_set_file_format(recorder,file_format);
-               ret |= recorder_prepare(recorder);
-
+               ret = utc_media_recorder_util_prepare_audio_recorder(recorder);
                assert_eq(ret, RECORDER_ERROR_NONE);
 
                ret = recorder_unprepare(recorder);
diff --git a/src/utc/recorder/utc_media_recorder_util.c b/src/utc/recorder/utc_media_recorder_util.c
new file mode 100644 (file)
index 0000000..09c95e6
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * 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 for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <dlog.h>
+#include <storage.h>
+#include <recorder.h>
+#include "utc_media_recorder_util.h"
+
+
+#define RECORDER_AUDIO_CODEC_NUM    5
+#define RECORDER_FILE_FORMAT_NUM    7
+#define RECORDER_MEDIA_NAME         ".test_record"
+#define RECORDER_MAINLOOP_TIMEOUT   5000 /* milliseconds */
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "UTC_RECORDER_UTIL"
+
+
+static GMainLoop *g_recorder_mainloop;
+static guint g_recorder_timeout_id;
+
+
+enum {
+       USER_DATA_AUDIO_CODEC,
+       USER_DATA_FILE_FORMAT,
+       USER_DATA_MAX
+};
+
+static bool _storage_device_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
+{
+       char **media_path = (char **)user_data;
+
+       if (!media_path)
+               return false;
+
+       if (type != STORAGE_TYPE_INTERNAL)
+               return true;
+
+       *media_path = g_strdup_printf("%s/%s", path, RECORDER_MEDIA_NAME);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "recorder media path[%s]", *media_path);
+
+       return false;
+}
+
+static bool    audiocodec_fileformat_compatibility_table[RECORDER_AUDIO_CODEC_NUM][RECORDER_FILE_FORMAT_NUM] =
+{        /* 3GP MP4 AMR ADTS WAV OGG M2TS */
+/*AMR*/     {1,  0,  1,  0,   0,  0,  0},
+/*AAC*/     {1,  1,  0,  0,   0,  0,  1},
+/*VORBIS*/  {0,  0,  0,  0,   0,  1,  0},
+/*PCM*/     {0,  0,  0,  0,   1,  0,  0},
+/*MP3*/     {0,  1,  0,  0,   0,  0,  1}
+};
+
+bool _audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
+{
+       if (user_data) {
+               *((recorder_audio_codec_e *)user_data) = codec;
+               return false;
+       }
+
+       return true;
+}
+
+bool _file_format_cb(recorder_file_format_e format, void *user_data)
+{
+       int *l_user_data = NULL;
+
+       if (user_data) {
+               l_user_data = (int *)user_data;
+               if (audiocodec_fileformat_compatibility_table[l_user_data[USER_DATA_AUDIO_CODEC]][(int)format]) {
+                       l_user_data[USER_DATA_FILE_FORMAT] = (int)format;
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+static int _get_supported_audio_encoder_and_file_format(recorder_h recorder, int *audio_codec, int *file_format)
+{
+       int ret = RECORDER_ERROR_NONE;
+       int l_audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
+       int l_file_format = -1;
+       int user_data[USER_DATA_MAX];
+
+       if (audio_codec == NULL || file_format == NULL)
+               return RECORDER_ERROR_INVALID_PARAMETER;
+
+       memset(user_data, 0, sizeof(int) * USER_DATA_MAX);
+       ret = recorder_foreach_supported_audio_encoder(recorder, _audio_encoder_cb, &l_audio_codec);
+       assert_eq(ret, RECORDER_ERROR_NONE);
+
+       if ((int)l_audio_codec >= 0 && (int)l_audio_codec < RECORDER_AUDIO_CODEC_NUM) {
+               user_data[USER_DATA_AUDIO_CODEC] = (int)l_audio_codec;
+               ret = recorder_foreach_supported_file_format(recorder, _file_format_cb, user_data);
+               assert_eq(ret, RECORDER_ERROR_NONE);
+
+               l_file_format = (recorder_file_format_e)user_data[USER_DATA_FILE_FORMAT];
+               if ((int)l_file_format >= 0 && (int)l_file_format < RECORDER_FILE_FORMAT_NUM) {
+                       *audio_codec = l_audio_codec;
+                       *file_format = l_file_format;
+
+                       return RECORDER_ERROR_NONE;
+               }
+       }
+
+       return RECORDER_ERROR_NOT_SUPPORTED;
+}
+
+void utc_media_recorder_util_get_media_path(char **media_path)
+{
+       if (!media_path)
+               return;
+
+       storage_foreach_device_supported(_storage_device_cb, (void *)media_path);
+}
+
+int utc_media_recorder_util_prepare_audio_recorder(recorder_h recorder)
+{
+       int ret = RECORDER_ERROR_NONE;
+       int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
+       int file_format = -1;
+       char *media_path = NULL;
+
+       ret = _get_supported_audio_encoder_and_file_format(recorder, &audio_codec, &file_format);
+
+       if (ret != RECORDER_ERROR_NONE || audio_codec < 0 || file_format < 0) {
+               dlog_print(DLOG_INFO, LOG_TAG, "Audio recording not supported[0x%x,%d,%d]",
+                       ret, audio_codec, file_format);
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       utc_media_recorder_util_get_media_path(&media_path);
+
+       ret = recorder_set_audio_encoder(recorder, audio_codec);
+       ret |= recorder_set_file_format(recorder,file_format);
+       ret |= recorder_set_filename(recorder, media_path);
+       ret |= recorder_prepare(recorder);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "Prepare audio recorder ret[0x%x]", ret);
+
+       g_free(media_path);
+
+       return ret;
+}
+
+void utc_media_recorder_util_get_recording_supported(bool *audio_recording_supported, bool *video_recording_supported)
+{
+       if (audio_recording_supported) {
+               system_info_get_platform_bool("http://tizen.org/feature/media.audio_recording", audio_recording_supported);
+               dlog_print(DLOG_INFO, LOG_TAG, "Feature: Audio Recording [%d]", *audio_recording_supported);
+       }
+
+       if (video_recording_supported) {
+               system_info_get_platform_bool("http://tizen.org/feature/media.video_recording", video_recording_supported);
+               dlog_print(DLOG_INFO, LOG_TAG, "Feature: Video Recording [%d]", *video_recording_supported);
+       }
+}
+
+gboolean utc_media_recorder_util_mainloop_quit(gpointer user_data)
+{
+       if (!g_recorder_mainloop)
+               return FALSE;
+
+       dlog_print(DLOG_INFO, LOG_TAG, "QUIT MAINLOOP");
+
+       g_main_loop_quit(g_recorder_mainloop);
+
+       return FALSE;
+}
+
+void utc_media_recorder_util_mainloop_run(void)
+{
+       g_recorder_timeout_id = g_timeout_add(RECORDER_MAINLOOP_TIMEOUT, utc_media_recorder_util_mainloop_quit, NULL);
+       if (g_recorder_timeout_id == 0) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to add timer");
+               return;
+       }
+
+       g_recorder_mainloop = g_main_loop_new(NULL, FALSE);
+       if (!g_recorder_mainloop) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to get new mainloop");
+               g_source_remove(g_recorder_timeout_id);
+               g_recorder_timeout_id = 0;
+               return;
+       }
+
+       g_main_loop_run(g_recorder_mainloop);
+
+       if (g_main_context_find_source_by_id(NULL, g_recorder_timeout_id)) {
+               dlog_print(DLOG_INFO, LOG_TAG, "FOUND source[%u]", g_recorder_timeout_id);
+               g_source_remove(g_recorder_timeout_id);
+       } else {
+               dlog_print(DLOG_WARN, LOG_TAG, "NOT FOUND source[%u]", g_recorder_timeout_id);
+       }
+
+       g_recorder_timeout_id = 0;
+
+       g_main_loop_unref(g_recorder_mainloop);
+       g_recorder_mainloop = NULL;
+}
diff --git a/src/utc/recorder/utc_media_recorder_util.h b/src/utc/recorder/utc_media_recorder_util.h
new file mode 100644 (file)
index 0000000..b81f615
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * 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 for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __UTC_MEDIA_RECORDER_UTIL_H__
+#define __UTC_MEDIA_RECORDER_UTIL_H__
+
+#include <glib.h>
+
+bool _audio_encoder_cb(recorder_audio_codec_e codec, void *user_data);
+bool _file_format_cb(recorder_file_format_e format, void *user_data);
+
+int utc_media_recorder_util_prepare_audio_recorder(recorder_h recorder);
+void utc_media_recorder_util_get_media_path(char **media_path);
+void utc_media_recorder_util_get_recording_supported(bool *audio_recording_supported, bool *video_recording_supported);
+
+gboolean utc_media_recorder_util_mainloop_quit(gpointer user_data);
+void utc_media_recorder_util_mainloop_run(void);
+
+#endif /* __UTC_MEDIA_RECORDER_UTIL_H__ */