Clean up the Makefiles, Add some descriptions 03/49003/1 submit/tizen/20151005.082535 submit/tizen/20151005.082555 submit/tizen/20151006.070518 submit/tizen/20151006.093657
authorsejong123.park <sejong123.park@samsung.com>
Mon, 5 Oct 2015 04:48:08 +0000 (13:48 +0900)
committersejong123.park <sejong123.park@samsung.com>
Mon, 5 Oct 2015 05:16:02 +0000 (14:16 +0900)
Change-Id:I1ae78b4a5ef5be17e75204821c590871b9f0b59c
Signed-off-by: sejong123.park <sejong123.park@samsung.com>
14 files changed:
CMakeLists.txt
include/mmsvc_recorder.h [deleted file]
include/mmsvc_recorder_private.h [deleted file]
legacy/CMakeLists.txt [new file with mode: 0644]
legacy/include/legacy_recorder.h [new file with mode: 0644]
legacy/include/legacy_recorder_private.h [new file with mode: 0644]
legacy/src/legacy_recorder.c [new file with mode: 0644]
muse/CMakeLists.txt
muse/include/muse_recorder.h
muse/include/muse_recorder_msg.h
muse/muse-recorder.pc.in [deleted file]
muse/src/muse_recorder_dispatcher.c
packaging/mmsvc-recorder.spec [changed mode: 0755->0644]
src/mmsvc_recorder.c [deleted file]

index 876e696298d0219a1a6c62615179759784a844b3..f008cd0cf2a5e85c1e93dafb9765ff0dc12447cc 100644 (file)
@@ -1,50 +1,20 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
-SET(Services
-        "application"
-        "base"
-        "content"
-        "location"
-        "media"
-        "messaging"
-        "network"
-        "social"
-        "telephony"
-        "system"
-   )
-
 # project
 SET(prefix "/usr")
-SET(version "0.0.1")
-SET(maintainer "Jeongmo Yang<jm80.yang>, Hyuntae Kim<ht1211.kim@samsung.com>, Sejong Park<sejong123.park@samsung.com>")
+SET(maintainer "Jeongmo Yang<jm80.yang>, Hyuntae Kim<ht1211.kim@samsung.com>, Seokhoon Lee<andy.shlee@samsung.com>, Taeyoung Chung <ty83.chung@samsung.com>, Sejong Park<sejong123.park@samsung.com>")
 SET(description "A Camera library in Tizen Native API")
 SET(service "mmsvc")
 SET(submodule "recorder")
-
-# for package file
-SET(dependents "dlog mm-camcorder mmsvc-camera capi-media-audio-io audio-session-mgr")
-SET(pc_dependents "capi-base-common mmsvc-camera capi-media-audio-io")
-
 SET(fw_name "${service}-${submodule}")
 
 PROJECT(${fw_name})
 
 SET(CMAKE_INSTALL_PREFIX ${prefix})
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(VERSION ${version})
 
-SET(INC_DIR include)
+SET(INC_DIR legacy/include)
 INCLUDE_DIRECTORIES(${INC_DIR})
-
-SET(MUSED_INC_DIR muse/include)
-INCLUDE_DIRECTORIES(${MUSED_INC_DIR})
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(${fw_name} REQUIRED ${dependents})
-FOREACH(flag ${${fw_name}_CFLAGS})
-    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Wextra -Wno-array-bounds -Wno-empty-body -Wno-ignored-qualifiers -Wno-unused-parameter -Wshadow -Wwrite-strings -Wswitch-default -Wno-unused-but-set-parameter -Wno-unused-but-set-variable")
 SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
 
@@ -53,33 +23,6 @@ IF("${ARCH}" STREQUAL "arm")
 ENDIF("${ARCH}" STREQUAL "arm")
 
 ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
-ADD_DEFINITIONS("-DTIZEN_DEBUG")
-
-SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}")
-
-aux_source_directory(src SOURCES)
-ADD_LIBRARY(${fw_name} SHARED ${SOURCES})
-
-TARGET_LINK_LIBRARIES(${fw_name} ${${fw_name}_LDFLAGS})
-
-SET_TARGET_PROPERTIES(${fw_name}
-     PROPERTIES
-     VERSION ${FULLVER}
-     SOVERSION ${MAJORVER}
-     CLEAN_DIRECT_OUTPUT 1
-)
-
-INSTALL(TARGETS ${fw_name} DESTINATION ${LIB_INSTALL_DIR})
-INSTALL(
-        DIRECTORY ${INC_DIR}/ DESTINATION include/media
-        FILES_MATCHING
-        PATTERN "*_private.h" EXCLUDE
-        PATTERN "${INC_DIR}/*.h"
-        )
-
-SET(PC_NAME ${fw_name})
-SET(PC_REQUIRED ${pc_dependents})
-SET(PC_LDFLAGS -l${fw_name})
 
 CONFIGURE_FILE(
     ${fw_name}.pc.in
@@ -88,7 +31,7 @@ CONFIGURE_FILE(
 )
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
 
-#ADD_SUBDIRECTORY(test)
+ADD_SUBDIRECTORY(legacy)
 ADD_SUBDIRECTORY(muse)
 
 IF(UNIX)
diff --git a/include/mmsvc_recorder.h b/include/mmsvc_recorder.h
deleted file mode 100644 (file)
index dff65d4..0000000
+++ /dev/null
@@ -1,1449 +0,0 @@
-/*
-* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-*
-* 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 __TIZEN_MULTIMEDIA_RECORDER_H__
-#define __TIZEN_MULTIMEDIA_RECORDER_H__
-#include <tizen.h>
-#include <mmsvc_camera.h>
-#include <audio_io.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define RECORDER_ERROR_CLASS        TIZEN_ERROR_RECORDER | 0x10
-
-/**
- * @file recorder.h
- * @brief This file contains the Recorder API.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief The Media recorder handle.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef struct recorder_s *recorder_h;
-
-/**
- * @brief Enumeration for error code of the media recorder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_ERROR_NONE                  = TIZEN_ERROR_NONE,                /**< Successful */
-       RECORDER_ERROR_INVALID_PARAMETER     = TIZEN_ERROR_INVALID_PARAMETER,   /**< Invalid parameter */
-       RECORDER_ERROR_INVALID_STATE         = RECORDER_ERROR_CLASS | 0x02,     /**< Invalid state */
-       RECORDER_ERROR_OUT_OF_MEMORY         = TIZEN_ERROR_OUT_OF_MEMORY ,      /**< Out of memory */
-       RECORDER_ERROR_DEVICE                = RECORDER_ERROR_CLASS | 0x04,     /**< Device error */
-       RECORDER_ERROR_INVALID_OPERATION     = TIZEN_ERROR_INVALID_OPERATION,   /**< Internal error */
-       RECORDER_ERROR_SOUND_POLICY          = RECORDER_ERROR_CLASS | 0x06,     /**< Blocked by Audio Session Manager */
-       RECORDER_ERROR_SECURITY_RESTRICTED   = RECORDER_ERROR_CLASS | 0x07,     /**< Restricted by security system policy */
-       RECORDER_ERROR_SOUND_POLICY_BY_CALL  = RECORDER_ERROR_CLASS | 0x08,     /**< Blocked by Audio Session Manager - CALL */
-       RECORDER_ERROR_SOUND_POLICY_BY_ALARM = RECORDER_ERROR_CLASS | 0x09,     /**< Blocked by Audio Session Manager - ALARM */
-       RECORDER_ERROR_ESD                   = RECORDER_ERROR_CLASS | 0x0a,     /**< ESD situation */
-       RECORDER_ERROR_OUT_OF_STORAGE        = RECORDER_ERROR_CLASS | 0x0b,     /**< Out of storage */
-       RECORDER_ERROR_PERMISSION_DENIED     = TIZEN_ERROR_PERMISSION_DENIED,   /**< The access to the resources can not be granted */
-       RECORDER_ERROR_NOT_SUPPORTED         = TIZEN_ERROR_NOT_SUPPORTED,       /**< The feature is not supported */
-} recorder_error_e;
-
-/**
- * @brief Enumeration for recorder states.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_STATE_NONE,      /**< Recorder is not created */
-       RECORDER_STATE_CREATED,   /**< Recorder is created, but not prepared */
-       RECORDER_STATE_READY,     /**< Recorder is ready to record \n In case of video recorder, preview display will be shown */
-       RECORDER_STATE_RECORDING, /**< Recorder is recording media */
-       RECORDER_STATE_PAUSED,    /**< Recorder is paused while recording media */
-} recorder_state_e;
-
-/**
- * @brief Enumeration for the recording limit.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_RECORDING_LIMIT_TIME,        /**< Time limit (second) of recording file */
-       RECORDER_RECORDING_LIMIT_SIZE,        /**< Size limit (kilo bytes [KB]) of recording file */
-       RECORDER_RECORDING_LIMIT_FREE_SPACE,  /**< No free space in storage */
-} recorder_recording_limit_type_e;
-
-/**
- * @brief Enumeration for the file container format.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_FILE_FORMAT_3GP,    /**< 3GP file format */
-       RECORDER_FILE_FORMAT_MP4,    /**< MP4 file format */
-       RECORDER_FILE_FORMAT_AMR,    /**< AMR file format */
-       RECORDER_FILE_FORMAT_ADTS,   /**< ADTS file format */
-       RECORDER_FILE_FORMAT_WAV,    /**< WAV file format */
-       RECORDER_FILE_FORMAT_OGG,    /**< OGG file format */
-} recorder_file_format_e;
-
-/**
- * @brief Enumeration for the audio codec.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_AUDIO_CODEC_DISABLE = -1, /**< Disable audio track */
-       RECORDER_AUDIO_CODEC_AMR = 0,      /**< AMR codec */
-       RECORDER_AUDIO_CODEC_AAC,          /**< AAC codec */
-       RECORDER_AUDIO_CODEC_VORBIS,       /**< Vorbis codec */
-       RECORDER_AUDIO_CODEC_PCM           /**< PCM codec */
-} recorder_audio_codec_e;
-
-/**
- * @brief Enumeration for the video codec.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_VIDEO_CODEC_H263,    /**< H263 codec */
-       RECORDER_VIDEO_CODEC_H264,    /**< H264 codec */
-       RECORDER_VIDEO_CODEC_MPEG4,   /**< MPEG4 codec */
-       RECORDER_VIDEO_CODEC_THEORA   /**< Theora codec */
-} recorder_video_codec_e;
-
-/**
- * @brief Enumeration for audio capture devices.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_AUDIO_DEVICE_MIC,      /**< Mic device */
-       RECORDER_AUDIO_DEVICE_MODEM,    /**< Modem */
-} recorder_audio_device_e;
-
-/**
- * @brief Enumeration for the recorder rotation type.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_ROTATION_NONE, /**< No rotation */
-       RECORDER_ROTATION_90,   /**< 90 degree rotation */
-       RECORDER_ROTATION_180,  /**< 180 degree rotation */
-       RECORDER_ROTATION_270,  /**< 270 degree rotation */
-} recorder_rotation_e;
-
-/**
- * @brief Enumeration for the recorder policy.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum
-{
-       RECORDER_POLICY_NONE = 0,       /**< None */
-       RECORDER_POLICY_SOUND,          /**< Sound policy */
-       RECORDER_POLICY_SOUND_BY_CALL,  /**< Sound policy by CALL */
-       RECORDER_POLICY_SOUND_BY_ALARM, /**< Sound policy by ALARM */
-       RECORDER_POLICY_SECURITY        /**< Security policy */
-} recorder_policy_e;
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Called when limitation error occurs while recording.
- * @details The callback function is possible to receive three types of limits: time, size and no-space.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks After being called, recording data is discarded and not written in the recording file. Also the state of recorder is not changed.
- * @param[in] type The imitation type
- * @param[in] user_data The user data passed from the callback registration function
- * @pre You have to register a callback using recorder_set_recording_limit_reached_cb().
- * @see recorder_set_recording_status_cb()
- * @see recorder_set_recording_limit_reached_cb()
- * @see recorder_unset_recording_limit_reached_cb()
- */
-typedef void (*recorder_recording_limit_reached_cb)(recorder_recording_limit_type_e type, void *user_data);
-
-/**
- * @brief Called to indicate the recording status.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This callback function is repeatedly invoked during the #RECORDER_STATE_RECORDING state.
- * @param[in] elapsed_time  The time of the recording (milliseconds)
- * @param[in] file_size     The size of the recording file (KB)
- * @param[in] user_data     The user data passed from the callback registration function
- * @pre recorder_start() will invoke this callback if you register it using recorder_set_recording_status_cb().
- * @see        recorder_set_recording_status_cb()
- * @see        recorder_unset_recording_status_cb()
- * @see        recorder_start()
- */
-typedef void (*recorder_recording_status_cb)(unsigned long long elapsed_time, unsigned long long file_size, void *user_data);
-
-/**
- * @brief Called when the record state is changed.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] previous The previous state of the recorder
- * @param[in] current  The current state of the recorder
- * @param[in] by_policy     @c true if the state is changed by policy, otherwise @c false if the state is not changed
- * @param[in] user_data        The user data passed from the callback registration function
- * @pre This function is required to register a callback using recorder_set_state_changed_cb().
- * @see        recorder_set_state_changed_cb()
- * @see        recorder_prepare()
- * @see        recorder_unprepare()
- * @see        recorder_start()
- * @see        recorder_pause()
- * @see        recorder_commit()
- * @see        recorder_cancel()
- */
-typedef void (*recorder_state_changed_cb)(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data);
-
-/**
- * @brief Called when the recorder is interrupted by a policy.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] policy        The policy that is interrupting the recorder
- * @param[in] previous      The previous state of the recorder
- * @param[in] current       The current state of the recorder
- * @param[in] user_data     The user data passed from the callback registration function
- * @see        recorder_set_interrupted_cb()
- */
-typedef void (*recorder_interrupted_cb)(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *user_data);
-
-/**
- * @brief Called when audio stream data was being delivered just before storing in the recorded file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks The callback function holds the same buffer that will be recorded. \n
- *          So if the user changes the buffer, the result file will contain the buffer.
- * @remarks The callback is called via internal thread of Frameworks, therefore do not invoke UI API, recorder_unprepare(), recorder_commit() and recorder_cancel() in callback.
- * @param[in] stream The audio stream data
- * @param[in] size The size of the stream data
- * @param[in] format The audio format
- * @param[in] channel The number of the channel
- * @param[in] timestamp The timestamp of the stream buffer (in msec)
- * @param[in] user_data The user data passed from the callback registration function
- * @see recorder_set_audio_stream_cb()
- */
-typedef void (*recorder_audio_stream_cb)(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data);
-
-/**
- * @brief Called once for each supported video resolution.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] width         The video image width
- * @param[in] height        The video image height
- * @param[in] user_data     The user data passed from the foreach function
- * @return    @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
- * @pre        recorder_foreach_supported_video_resolution() will invoke this callback.
- * @see        recorder_foreach_supported_video_resolution()
- */
-typedef bool (*recorder_supported_video_resolution_cb)(int width, int height, void *user_data);
-
-/**
- * @brief Called when the error occurred.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This callback informs about the critical error situation. \n
- *          When being invoked, user should release the resource and terminate the application. \n
- *          This error code will be reported.
- *          #RECORDER_ERROR_DEVICE \n
- *          #RECORDER_ERROR_INVALID_OPERATION \n
- *          #RECORDER_ERROR_OUT_OF_MEMORY.
- * @param[in] error          The error code
- * @param[in] current_state  The current state of the recorder
- * @param[in] user_data      The user data passed from the callback registration function
- * @pre        This callback function is invoked if you register this callback using recorder_set_error_cb().
- * @see        recorder_set_error_cb()
- * @see        recorder_unset_error_cb()
- */
-typedef void (*recorder_error_cb)(recorder_error_e error, recorder_state_e current_state, void *user_data);
-
- /**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
- * @{
- */
-
-/**
- * @brief Called iteratively to notify about the supported file formats.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] format   The format of recording files
- * @param[in] user_data        The user data passed from the foreach function
- * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
- * @pre recorder_foreach_supported_file_format() will invoke this callback.
- * @see        recorder_foreach_supported_file_format()
- */
-typedef bool (*recorder_supported_file_format_cb)(recorder_file_format_e format, void *user_data);
-
-/**
- * @brief Called iteratively to notify about the supported audio encoders.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] codec    The codec of audio encoder
- * @param[in] user_data        The user data passed from the foreach function
- * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
- * @pre recorder_foreach_supported_audio_encoder() will invoke this callback.
- * @see        recorder_foreach_supported_audio_encoder()
- */
-typedef bool (*recorder_supported_audio_encoder_cb)(recorder_audio_codec_e codec, void *user_data);
-
-/**
- * @brief Called iteratively to notify about the supported video encoders.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] codec    The codec of video encoder
- * @param[in] user_data        The user data passed from the foreach function
- * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
- * @pre recorder_foreach_supported_video_encoder() will invoke this callback.
- * @see        recorder_foreach_supported_video_encoder()
- */
-typedef bool (*recorder_supported_video_encoder_cb)(recorder_video_codec_e codec, void *user_data);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Creates a recorder handle to record a video.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks You must release @a recorder using recorder_destroy(). \n
- * The @a camera handle also could be used for capturing images. \n
- * If the camera state was #CAMERA_STATE_CREATED, the preview format will be changed to the recommended preview format for recording.
- * @remarks The created recorder state will be different according to camera state : \n
- * #CAMERA_STATE_CREATED -> #RECORDER_STATE_CREATED\n
- * #CAMERA_STATE_PREVIEW -> #RECORDER_STATE_READY\n
- * #CAMERA_STATE_CAPTURED -> #RECORDER_STATE_READY
- * @param[in]   camera The handle to the camera
- * @param[out]  recorder       A handle to the recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see camera_create()
- * @see camera_stop_preview()
- * @see recorder_destroy()
- */
-int mmsvc_recorder_create_videorecorder(camera_h camera, recorder_h *recorder);
-
-/**
- * @brief Creates a recorder handle to record an audio.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks You must release @a recorder using recorder_destroy().
- * @param[out]  recorder  A handle to the recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post The recorder state will be #RECORDER_STATE_CREATED.
- * @see recorder_destroy()
- */
-int mmsvc_recorder_create_audiorecorder(recorder_h *recorder);
-
-
-/**
- * @brief Destroys the recorder handle.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks The video recorder's camera handle is not released by this function.
- * @param[in]  recorder    The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre  The recorder state should be #RECORDER_STATE_CREATED.
- * @post The recorder state will be #RECORDER_STATE_NONE.
- * @see        camera_destroy()
- * @see        recorder_create_videorecorder()
- * @see        recorder_create_audiorecorder()
- */
-int mmsvc_recorder_destroy(recorder_h recorder);
-
-/**
- * @brief Prepares the media recorder for recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks Before calling the function, it is required to properly set audio encoder (recorder_set_audio_encoder()),
- *          video encoder(recorder_set_video_encoder()) and file format (recorder_set_file_format()).
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre  The recorder state should be #RECORDER_STATE_CREATED by mmsvc_recorder_create_videorecorder(), mmsvc_recorder_create_audiorecorder() or mmsvc_recorder_unprepare().
- * @post The recorder state will be #RECORDER_STATE_READY.
- * @post If recorder handle is created by mmsvc_recorder_create_videorecorder(), the camera state will be changed to #CAMERA_STATE_PREVIEW.
- * @see        recorder_create_videorecorder()
- * @see        recorder_create_audiorecorder()
- * @see        recorder_unprepare()
- * @see        recorder_set_audio_encoder()
- * @see        recorder_set_video_encoder()
- * @see        recorder_set_file_format()
- */
-int mmsvc_recorder_prepare(recorder_h recorder);
-
-/**
- * @brief Resets the media recorder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre  The recorder state should be #RECORDER_STATE_READY set by mmsvc_recorder_prepare(), mmsvc_recorder_cancel() or mmsvc_recorder_commit().
- * @post The recorder state will be #RECORDER_STATE_CREATED.
- * @post If the recorder handle is created by mmsvc_recorder_create_videorecorder(), camera state will be changed to #CAMERA_STATE_CREATED.
- * @see        recorder_prepare()
- * @see        recorder_cancel()
- * @see        recorder_commit()
- */
-int mmsvc_recorder_unprepare(recorder_h recorder);
-
-/**
- * @brief Starts the recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks If file path has been set to an existing file, this file is removed automatically and updated by new one. \n
- *          In the video recorder, some preview format does not support record mode. It will return #RECORDER_ERROR_INVALID_OPERATION error. \n
- *          You should use default preview format or #CAMERA_PIXEL_FORMAT_NV12 in the record mode. \n
- *          When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
- *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
- *          If you want to save contents to external storage, you should add externalstorage privilege. \n
- *          The filename should be set before this function is invoked.
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_READY by mmsvc_recorder_prepare() or #RECORDER_STATE_PAUSED by mmsvc_recorder_pause(). \n
- *      The filename should be set by mmsvc_recorder_set_filename().
- * @post The recorder state will be #RECORDER_STATE_RECORDING.
- * @see        recorder_pause()
- * @see        recorder_commit()
- * @see        recorder_cancel()
- * @see        recorder_set_audio_encoder()
- * @see        recorder_set_filename()
- * @see        recorder_set_file_format()
- * @see        recorder_recording_status_cb()
- * @see        recorder_set_filename()
- */
-int mmsvc_recorder_start(recorder_h recorder);
-
-/**
- * @brief Pauses the recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks Recording can be resumed with mmsvc_recorder_start().
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_RECORDING.
- * @post The recorder state will be #RECORDER_STATE_PAUSED.
- * @see mmsvc_recorder_pause()
- * @see mmsvc_recorder_commit()
- * @see mmsvc_recorder_cancel()
- */
-int mmsvc_recorder_pause(recorder_h recorder);
-
-/**
- * @brief Stops recording and saves the result.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
- *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
- *          If you want to save contents to external storage, you should add externalstorage privilege.
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_RECORDING set by mmsvc_recorder_start() or #RECORDER_STATE_PAUSED by mmsvc_recorder_pause().
- * @post The recorder state will be #RECORDER_STATE_READY.
- * @see mmsvc_recorder_pause()
- * @see mmsvc_recorder_cancel()
- * @see mmsvc_recorder_set_filename()
- * @see        recorder_start()
- */
-int mmsvc_recorder_commit(recorder_h recorder);
-
-/**
- * @brief Cancels the recording.
- * @details The recording data is discarded and not written in the recording file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/recorder
- * @remarks When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
- *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
- *          If you want to save contents to external storage, you should add externalstorage privilege.
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_RECORDING set by mmsvc_recorder_start() or #RECORDER_STATE_PAUSED by mmsvc_recorder_pause().
- * @post The recorder state will be #RECORDER_STATE_READY.
- * @see mmsvc_recorder_pause()
- * @see mmsvc_recorder_commit()
- * @see mmsvc_recorder_cancel()
- * @see mmsvc_recorder_start()
- */
-int mmsvc_recorder_cancel(recorder_h recorder);
-
-/**
- * @brief Gets the recorder's current state.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder The handle to the media recorder
- * @param[out] state  The current state of the recorder
- * @return  @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- */
-int mmsvc_recorder_get_state(recorder_h recorder, recorder_state_e *state);
-
-/**
- * @brief Gets the peak audio input level that was sampled since the last call to this function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks @c 0 dB indicates maximum input level, @c -300 dB indicates minimum input level.
- * @param[in]  recorder The handle to the media recorder
- * @param[out] dB  The audio input level in dB
- * @return  @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_RECORDING or #RECORDER_STATE_PAUSED.
- */
-int mmsvc_recorder_get_audio_level(recorder_h recorder, double *dB);
-
-/**
- * @brief Sets the file path to record.
- * @details This function sets file path which defines where newly recorded data should be stored.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks If the same file already exists in the file system, then old file will be overwritten.
- * @param[in]  recorder        The handle to the media recorder
- * @param[in]  path The recording file path
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_get_filename()
- */
-int mmsvc_recorder_set_filename(recorder_h recorder, const char *path);
-
-/**
- * @brief Gets the file path to record.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks You must release @a path using free().
- * @param[in]  recorder    The handle to the media recorder
- * @param[out] path    The recording file path
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_filename()
- */
-int mmsvc_recorder_get_filename(recorder_h recorder, char **path);
-
-/**
- * @brief Sets the file format for recording media stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks Since 2.3.1, it could be returned #RECORDER_ERROR_INVALID_OPERATION \n
- *          when it's audio recorder and its state is #RECORDER_STATE_READY \n
- *          because of checking codec compatibility with current encoder.
- * @param[in] recorder The handle to the media recorder
- * @param[in] format   The media file format
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation (Since 2.3.1)
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
- *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
- * @see mmsvc_recorder_get_file_format()
- * @see mmsvc_recorder_foreach_supported_file_format()
- */
-int mmsvc_recorder_set_file_format(recorder_h recorder, recorder_file_format_e format);
-
-
-/**
- * @brief Gets the file format for recording media stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[out] format   The media file format
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see mmsvc_recorder_set_file_format()
- * @see mmsvc_recorder_foreach_supported_file_format()
- */
-int mmsvc_recorder_get_file_format(recorder_h recorder, recorder_file_format_e *format);
-
-
- /**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
- * @{
- */
-
-/**
- * @brief Retrieves all supported file formats by invoking a specific callback for each supported file format.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[in] callback The iteration callback
- * @param[in] user_data        The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_supported_file_format_cb() will be invoked.
- * @see mmsvc_recorder_get_file_format()
- * @see mmsvc_recorder_set_file_format()
- * @see mmsvc_recorder_supported_file_format_cb()
- */
-int mmsvc_recorder_foreach_supported_file_format(recorder_h recorder, recorder_supported_file_format_cb callback, void *user_data);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Sets the audio codec for encoding an audio stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks You can get available audio encoders by using recorder_foreach_supported_audio_encoder(). \n
- *          If set to #RECORDER_AUDIO_CODEC_DISABLE, the audio track is not created in recording files.\n
- *          Since 2.3.1, it could be returned #RECORDER_ERROR_INVALID_OPERATION \n
- *          when it's audio recorder and its state is #RECORDER_STATE_READY \n
- *          because of checking codec compatibility with current file format.
- * @param[in] recorder The handle to the media recorder
- * @param[in] codec    The audio codec
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation (Since 2.3.1)
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_get_audio_encoder()
- * @see mmsvc_recorder_foreach_supported_audio_encoder()
- */
-int mmsvc_recorder_set_audio_encoder(recorder_h recorder, recorder_audio_codec_e codec);
-
-/**
- * @brief Gets the audio codec for encoding an audio stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[out] codec   The audio codec
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_audio_encoder()
- * @see mmsvc_recorder_foreach_supported_audio_encoder()
- */
-int mmsvc_recorder_get_audio_encoder(recorder_h recorder, recorder_audio_codec_e *codec);
-
- /**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
- * @{
- */
-
-/**
- * @brief Retrieves all supported audio encoders by invoking a specific callback for each supported audio encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[in] callback The iteration callback
- * @param[in] user_data        The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_supported_audio_encoder_cb() will be invoked.
- * @see        recorder_set_audio_encoder()
- * @see        recorder_get_audio_encoder()
- * @see        recorder_supported_audio_encoder_cb()
- */
-int mmsvc_recorder_foreach_supported_audio_encoder(recorder_h recorder, recorder_supported_audio_encoder_cb callback, void *user_data);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Sets the resolution of the video recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This function should be called before recording (recorder_start()).
- * @param[in] recorder The handle to the media recorder
- * @param[in] width    The preview width
- * @param[in] height   The preview height
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre    The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_start()
- * @see        recorder_get_video_resolution()
- * @see        recorder_foreach_supported_video_resolution()
- */
-int mmsvc_recorder_set_video_resolution(recorder_h recorder, int width, int height);
-
-/**
- * @brief Gets the resolution of the video recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[out] width   The video width
- * @param[out] height  The video height
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_video_resolution()
- * @see        recorder_foreach_supported_video_resolution()
- */
-int mmsvc_recorder_get_video_resolution(recorder_h recorder, int *width, int *height);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
- * @{
- */
-
-/**
- * @brief Retrieves all supported video resolutions by invoking callback function once for each supported video resolution.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[in] foreach_cb       The callback function to be invoked
- * @param[in] user_data        The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post       This function invokes mmsvc_recorder_supported_video_resolution_cb() repeatedly to retrieve each supported video resolution.
- * @see        recorder_set_video_resolution()
- * @see        recorder_get_video_resolution()
- * @see        recorder_supported_video_resolution_cb()
- */
-int mmsvc_recorder_foreach_supported_video_resolution(recorder_h recorder,
-                                                recorder_supported_video_resolution_cb foreach_cb, void *user_data);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Sets the video codec for encoding video stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks You can get available video encoders by using recorder_foreach_supported_video_encoder().
- * @param[in] recorder The handle to the media recorder
- * @param[in] codec    The video codec
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see recorder_get_video_encoder()
- * @see mmsvc_recorder_foreach_supported_video_encoder()
- */
-int mmsvc_recorder_set_video_encoder(recorder_h recorder, recorder_video_codec_e codec);
-
-/**
- * @brief Gets the video codec for encoding video stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[out] codec   The video codec
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see mmsvc_recorder_set_video_encoder()
- * @see mmsvc_recorder_foreach_supported_video_encoder()
- */
-int mmsvc_recorder_get_video_encoder(recorder_h recorder, recorder_video_codec_e *codec);
-
-/**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
- * @{
- */
-
-/**
- * @brief Retrieves all supported video encoders by invoking a specific callback for each supported video encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[in] callback The iteration callback
- * @param[in] user_data        The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_supported_video_encoder_cb() will be invoked.
- * @see mmsvc_recorder_set_video_encoder()
- * @see mmsvc_recorder_get_video_encoder()
- * @see        recorder_supported_video_encoder_cb()
- */
-int mmsvc_recorder_foreach_supported_video_encoder(recorder_h recorder, recorder_supported_video_encoder_cb callback, void *user_data);
-
- /**
- * @}
-*/
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_MODULE
- * @{
- */
-
-/**
- * @brief Registers the callback function that will be invoked when the recorder state changes.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[in] callback The function pointer of user callback
- * @param[in] user_data The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_state_changed_cb() will be invoked.
- * @see mmsvc_recorder_unset_state_changed_cb()
- * @see mmsvc_recorder_state_changed_cb()
- */
-int mmsvc_recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb callback, void *user_data);
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see mmsvc_recorder_set_state_changed_cb()
- */
-int mmsvc_recorder_unset_state_changed_cb(recorder_h recorder);
-
-/**
- * @brief Registers a callback function to be called when the media recorder is interrupted according to a policy.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[in] callback   The callback function to register
- * @param[in] user_data   The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_unset_interrupted_cb()
- * @see        recorder_interrupted_cb()
- */
-int mmsvc_recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb callback,
-           void *user_data);
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_interrupted_cb()
- */
-int mmsvc_recorder_unset_interrupted_cb(recorder_h recorder);
-
-/**
- * @brief Registers a callback function to be called when audio stream data is being delivered.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This callback function holds the same buffer that will be recorded. \n
- *          Therefore if an user changes the buffer, the result file will have the buffer. \n
- * @remarks The callback is called via internal thread of Frameworks. Therefore do not invoke UI API, mmsvc_recorder_unprepare(), mmsvc_recorder_commit() and mmsvc_recorder_cancel() in callback.\n
- *          This callback function to be called in #RECORDER_STATE_RECORDING and #RECORDER_STATE_PAUSED state.
- *
- * @param[in] recorder    The handle to the recorder
- * @param[in] callback    The callback function to register
- * @param[in] user_data   The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre        The recorder state should be #RECORDER_STATE_READY or #RECORDER_STATE_CREATED.
- * @see        recorder_unset_audio_stream_cb()
- * @see        recorder_audio_stream_cb()
- */
-int mmsvc_recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb callback, void* user_data);
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see     mmsvc_recorder_set_audio_stream_cb()
- */
-int mmsvc_recorder_unset_audio_stream_cb(recorder_h recorder);
-
-/**
- * @brief Registers a callback function to be invoked when the recording information changes.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder   The handle to the media recorder
- * @param[in]  callback   The function pointer of user callback
- * @param[in]  user_data  The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_recording_status_cb() will be invoked.
- * @see        recorder_unset_recording_status_cb()
- * @see        recorder_recording_status_cb()
- */
-int mmsvc_recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_status_cb callback, void *user_data);
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder    The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_recording_status_cb()
- */
-int mmsvc_recorder_unset_recording_status_cb(recorder_h recorder);
-
-/**
- * @brief Registers the callback function to be run when reached the recording limit.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to media recorder
- * @param[in]  callback        The function pointer of user callback
- * @param[in]  user_data       The user data to be passed to the callback function
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post  mmsvc_recorder_recording_limit_reached_cb() will be invoked.
- * @see        recorder_unset_recording_limit_reached_cb()
- * @see        recorder_attr_set_size_limit()
- * @see        recorder_attr_set_time_limit()
- * @see        recorder_recording_limit_reached_cb()
- */
-int mmsvc_recorder_set_recording_limit_reached_cb(recorder_h recorder, recorder_recording_limit_reached_cb callback, void *user_data);
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder  The handle to the media recorder
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_recording_limit_reached_cb()
- */
-int mmsvc_recorder_unset_recording_limit_reached_cb(recorder_h recorder);
-
-/**
- * @brief Registers a callback function to be called when an asynchronous operation error occurred.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This callback informs critical error situation.\n
- *          When this callback is invoked, user should release the resource and terminate the application. \n
- *          These error codes will occur. \n
- *          #RECORDER_ERROR_DEVICE \n
- *          #RECORDER_ERROR_INVALID_OPERATION \n
- *          #RECORDER_ERROR_OUT_OF_MEMORY
- * @param[in]  recorder        The handle to the recorder
- * @param[in]  callback        The callback function to register
- * @param[in]  user_data       The user data to be passed to the callback function
- * @return  @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @post       This function will invoke mmsvc_recorder_error_cb() when an asynchronous operation error occur.
- * @see        recorder_unset_error_cb()
- * @see        recorder_error_cb()
- */
-int mmsvc_recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void *user_data);
-
-
-/**
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to the recorder
- * @return  @c on success, otherwise a negative error value
- * @retval    #RECORDER_ERROR_NONE Successful
- * @retval    #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_set_error_cb()
- */
-int mmsvc_recorder_unset_error_cb(recorder_h recorder);
-
-
-/**
- * @}
- */
-
-/**
- * @addtogroup CAPI_MEDIA_RECORDER_ATTRIBUTES_MODULE
- * @{
- */
-
-
-/**
- * @brief Sets the maximum size of a recording file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks After reaching the limitation, the recording data is discarded and not written in the recording file.
- * @param[in] recorder The handle to the media recorder
- * @param[in] kbyte    The maximum size of the recording file(KB) \n
- *                     @c 0 means unlimited recording size.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_attr_get_size_limit()
- * @see        recorder_attr_set_time_limit()
- */
-int mmsvc_recorder_attr_set_size_limit(recorder_h recorder, int kbyte);
-
-/**
- * @brief Gets the maximum size of a recording file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder The handle to the media recorder
- * @param[out] kbyte    The maximum size of recording file (KB) \n
- *                      @c 0 means unlimited recording size.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_size_limit()
- * @see        recorder_attr_get_time_limit()
- */
-int mmsvc_recorder_attr_get_size_limit(recorder_h recorder, int *kbyte);
-
-/**
- * @brief Sets the time limit of a recording file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks After reaching the limitation, the recording data is discarded and not written in the recording file.
- * @param[in] recorder The handle to the media recorder
- * @param[in] second   The time limit of the recording file (in seconds) \n
- *                     @c 0 means unlimited recording size.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_attr_get_time_limit()
- * @see        recorder_attr_set_size_limit()
- */
-int mmsvc_recorder_attr_set_time_limit(recorder_h recorder, int second);
-
-
-/**
- * @brief Gets the time limit of a recording file.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder  The handle to the media recorder
- * @param[out] second    The time limit of the recording file (in seconds) \n
- *                       @c 0 means unlimited recording time.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_time_limit()
- * @see        recorder_attr_get_size_limit()
- */
-int mmsvc_recorder_attr_get_time_limit(recorder_h recorder, int *second);
-
-/**
- * @brief Sets the audio device for recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @param[in] device   The type of an audio device
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
- *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
- * @see        recorder_attr_get_audio_device()
- */
-int mmsvc_recorder_attr_set_audio_device(recorder_h recorder, recorder_audio_device_e device);
-
-/**
- * @brief Gets the audio device for recording.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[out] device The type of an audio device
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_audio_device()
- */
-int mmsvc_recorder_attr_get_audio_device(recorder_h recorder, recorder_audio_device_e *device);
-
-/**
- * @brief Sets the sampling rate of an audio stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder    The handle to the media recorder
- * @param[in] samplerate The sample rate in Hertz
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
- *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
- * @see        recorder_attr_get_audio_samplerate()
- */
-int mmsvc_recorder_attr_set_audio_samplerate(recorder_h recorder, int samplerate);
-
-/**
- * @brief Gets the sampling rate of an audio stream.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder    The handle to the media recorder
- * @param[out] samplerate  The sample rate in Hertz
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_audio_samplerate()
- */
-int mmsvc_recorder_attr_get_audio_samplerate(recorder_h recorder, int *samplerate);
-
-/**
- * @brief Sets the bitrate of an audio encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[in] bitrate   The bitrate (for mms : 12200[bps], normal : 288000[bps])
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_attr_get_audio_encoder_bitrate()
- */
-int mmsvc_recorder_attr_set_audio_encoder_bitrate(recorder_h recorder, int bitrate);
-
-/**
- * @brief Sets the bitrate of a video encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[in] bitrate   The bitrate in bits per second
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_attr_get_video_encoder_bitrate()
- */
-int mmsvc_recorder_attr_set_video_encoder_bitrate(recorder_h recorder, int bitrate);
-
-/**
- * @brief Gets the bitrate of an audio encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder  The handle to the media recorder
- * @param[out] bitrate   The bitrate in bits per second
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_audio_encoder_bitrate()
- */
-int mmsvc_recorder_attr_get_audio_encoder_bitrate(recorder_h recorder, int *bitrate);
-
-/**
- * @brief Gets the bitrate of a video encoder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder  The handle to the media recorder
- * @param[out] bitrate   The bitrate in bits per second
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_audio_encoder_bitrate()
- */
-int mmsvc_recorder_attr_get_video_encoder_bitrate(recorder_h recorder, int *bitrate);
-
-/**
- * @brief Sets the mute state of a recorder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[in] enable The mute state
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_is_muted()
- */
-int mmsvc_recorder_attr_set_mute(recorder_h recorder, bool enable);
-
-/**
- * @brief Gets the mute state of a recorder.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder The handle to the media recorder
- * @remarks The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section.
- * @return  @c true if the recorder is not recording any sound,
- *          otherwise @c false if the recorder is recording
- * @exception #RECORDER_ERROR_NONE Successful
- * @exception #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @exception #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @exception #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_mute()
- */
-bool mmsvc_recorder_attr_is_muted(recorder_h recorder);
-
-/**
- * @brief Sets the recording motion rate.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This attribute is valid only in a video recorder. \n
- *          If the rate bigger than @c 0 and smaller than @c 1, video is recorded in a slow motion mode. \n
- *          If the rate bigger than @c 1, video is recorded in a fast motion mode (time lapse recording).
- * @remarks Audio data is not recorded. \n
- *          To reset slow motion recording, set the rate to @c 1.
- * @param[in] recorder The handle to the media recorder
- * @param[in] rate     The recording motion rate \n
- *                     It is computed with fps. (@c 0<rate<@c 1 for slow motion, @c 1<rate for fast motion(time lapse recording), @c 1 to reset).
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
- * @see        recorder_attr_get_recording_motion_rate()
- */
-int mmsvc_recorder_attr_set_recording_motion_rate(recorder_h recorder , double rate);
-
-/**
- * @brief Gets the recording motion rate.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This attribute is valid only in a video recorder. \n
- *          If the rate bigger than @c 0 and smaller than @c 1, video is recorded in a slow motion mode. \n
- *          If the rate bigger than @c 1, video is recorded in a fast motion mode (time lapse recording).
- * @remarks Audio data is not recorded. \n
- *          To reset slow motion recording, set the rate to @c 1.
- * @param[in]  recorder The handle to the media recorder
- * @param[out] rate     The recording motion rate \n
- *                      It is computed with fps.
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_recording_motion_rate()
- */
-int mmsvc_recorder_attr_get_recording_motion_rate(recorder_h recorder , double *rate);
-
-/**
- * @brief Sets the number of the audio channel.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @remarks This attribute is applied only in RECORDER_STATE_CREATED state. \n
- *          For mono recording, setting channel to @c 1. \n
- *          For stereo recording, setting channel to @c 2.
- * @param[in] recorder       The handle to the media recorder
- * @param[in] channel_count  The number of the audio channel
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
- *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
- * @see        recorder_attr_get_audio_channel()
- */
-int mmsvc_recorder_attr_set_audio_channel(recorder_h recorder, int channel_count);
-
-/**
- * @brief Gets the number of the audio channel.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in] recorder  The handle to the media recorder
- * @param[out] channel_count  The number of the audio channel
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_audio_channel()
- */
-int mmsvc_recorder_attr_get_audio_channel(recorder_h recorder, int *channel_count);
-
-
-/**
- * @brief Sets the video orientation in a video metadata tag.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to a media recorder
- * @param[in]  orientation     The information of the video orientation
- * @return @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_get_orientation_tag()
- */
-int mmsvc_recorder_attr_set_orientation_tag(recorder_h recorder,  recorder_rotation_e orientation);
-
-/**
- * @brief Gets the video orientation in a video metadata tag.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @param[in]  recorder        The handle to a media recorder
- * @param[out]  orientation    The information of the video orientation
- * @return  @c 0 on success, otherwise a negative error value
- * @retval #RECORDER_ERROR_NONE Successful
- * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
- * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
- * @see        recorder_attr_set_orientation_tag()
- */
-int mmsvc_recorder_attr_get_orientation_tag(recorder_h recorder, recorder_rotation_e *orientation);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TIZEN_MULTIMEDIA_RECORDER_H__ */
-
diff --git a/include/mmsvc_recorder_private.h b/include/mmsvc_recorder_private.h
deleted file mode 100644 (file)
index 9630754..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-*
-* 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 __TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
-#define        __TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
-#include <mmsvc_camera.h>
-#include <mm_camcorder.h>
-#include <mmsvc_recorder.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef union _mediaSource{
-       camera_h camera;
-}mediasource;
-
-
-typedef enum {
-       _RECORDER_EVENT_TYPE_STATE_CHANGE,
-       _RECORDER_EVENT_TYPE_RECORDING_LIMITED,
-       _RECORDER_EVENT_TYPE_RECORDING_STATUS,
-       _RECORDER_EVENT_TYPE_INTERRUPTED,
-       _RECORDER_EVENT_TYPE_AUDIO_STREAM,
-       _RECORDER_EVENT_TYPE_ERROR,
-       _RECORDER_EVENT_TYPE_NUM
-}_recorder_event_e;
-
-typedef enum {
-       _RECORDER_TYPE_AUDIO = 0,
-       _RECORDER_TYPE_VIDEO
-}_recorder_type_e;
-
-typedef enum {
-       _RECORDER_SOURCE_TYPE_UNKNOWN,
-       _RECORDER_SOURCE_TYPE_CAMERA,
-}_recorder_source_type_e;
-
-typedef struct _recorder_s{
-       MMHandleType mm_handle;
-       mediasource mm_source;
-       void* user_cb[_RECORDER_EVENT_TYPE_NUM];
-       void* user_data[_RECORDER_EVENT_TYPE_NUM];
-       unsigned int state;
-       int camera_device_count;
-       _recorder_type_e type;
-       _recorder_source_type_e src_type;
-       int origin_preview_format;
-       int changed_preview_format;
-       double last_max_input_level;
-} recorder_s;
-
-int __convert_recorder_error_code(const char *func, int code);
-#ifdef __cplusplus
-}
-#endif
-
-#endif //__TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
-
-
diff --git a/legacy/CMakeLists.txt b/legacy/CMakeLists.txt
new file mode 100644 (file)
index 0000000..39b8ea5
--- /dev/null
@@ -0,0 +1,60 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(service "legacy")
+SET(submodule "recorder")
+
+# for package file
+SET(dependents "dlog mm-camcorder capi-media-audio-io audio-session-mgr")
+SET(pc_dependents "capi-base-common capi-media-audio-io")
+
+SET(fw_name "${service}-${submodule}")
+
+PROJECT(${fw_name})
+
+SET(CMAKE_INSTALL_PREFIX /usr)
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+
+SET(INC_DIR include)
+INCLUDE_DIRECTORIES(${INC_DIR})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(${fw_name} REQUIRED ${dependents})
+FOREACH(flag ${${fw_name}_CFLAGS})
+    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Wextra -Wno-array-bounds -Wno-empty-body -Wno-ignored-qualifiers -Wno-unused-parameter -Wshadow -Wwrite-strings -Wswitch-default -Wno-unused-but-set-parameter -Wno-unused-but-set-variable")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+
+IF("${ARCH}" STREQUAL "arm")
+    ADD_DEFINITIONS("-DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DTIZEN_DEBUG")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}")
+
+aux_source_directory(src LEGACY_SOURCES)
+ADD_LIBRARY(${fw_name} SHARED ${LEGACY_SOURCES})
+
+TARGET_LINK_LIBRARIES(${fw_name} ${${fw_name}_LDFLAGS})
+
+SET_TARGET_PROPERTIES(${fw_name}
+     PROPERTIES
+     VERSION ${FULLVER}
+     SOVERSION ${MAJORVER}
+     CLEAN_DIRECT_OUTPUT 1
+)
+
+INSTALL(TARGETS ${fw_name} DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(
+        DIRECTORY ${INC_DIR}/ DESTINATION include/media
+        FILES_MATCHING
+        PATTERN "*_private.h" EXCLUDE
+        PATTERN "${INC_DIR}/*.h"
+        )
+
+SET(PC_NAME ${fw_name})
+SET(PC_REQUIRED ${pc_dependents})
+SET(PC_LDFLAGS -l${fw_name})
diff --git a/legacy/include/legacy_recorder.h b/legacy/include/legacy_recorder.h
new file mode 100644 (file)
index 0000000..e603008
--- /dev/null
@@ -0,0 +1,1449 @@
+/*
+* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 __TIZEN_MULTIMEDIA_RECORDER_H__
+#define __TIZEN_MULTIMEDIA_RECORDER_H__
+#include <tizen.h>
+#include <legacy_camera.h>
+#include <audio_io.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RECORDER_ERROR_CLASS        TIZEN_ERROR_RECORDER | 0x10
+
+/**
+ * @file recorder.h
+ * @brief This file contains the Recorder API.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief The Media recorder handle.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef struct recorder_s *recorder_h;
+
+/**
+ * @brief Enumeration for error code of the media recorder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_ERROR_NONE                  = TIZEN_ERROR_NONE,                /**< Successful */
+       RECORDER_ERROR_INVALID_PARAMETER     = TIZEN_ERROR_INVALID_PARAMETER,   /**< Invalid parameter */
+       RECORDER_ERROR_INVALID_STATE         = RECORDER_ERROR_CLASS | 0x02,     /**< Invalid state */
+       RECORDER_ERROR_OUT_OF_MEMORY         = TIZEN_ERROR_OUT_OF_MEMORY ,      /**< Out of memory */
+       RECORDER_ERROR_DEVICE                = RECORDER_ERROR_CLASS | 0x04,     /**< Device error */
+       RECORDER_ERROR_INVALID_OPERATION     = TIZEN_ERROR_INVALID_OPERATION,   /**< Internal error */
+       RECORDER_ERROR_SOUND_POLICY          = RECORDER_ERROR_CLASS | 0x06,     /**< Blocked by Audio Session Manager */
+       RECORDER_ERROR_SECURITY_RESTRICTED   = RECORDER_ERROR_CLASS | 0x07,     /**< Restricted by security system policy */
+       RECORDER_ERROR_SOUND_POLICY_BY_CALL  = RECORDER_ERROR_CLASS | 0x08,     /**< Blocked by Audio Session Manager - CALL */
+       RECORDER_ERROR_SOUND_POLICY_BY_ALARM = RECORDER_ERROR_CLASS | 0x09,     /**< Blocked by Audio Session Manager - ALARM */
+       RECORDER_ERROR_ESD                   = RECORDER_ERROR_CLASS | 0x0a,     /**< ESD situation */
+       RECORDER_ERROR_OUT_OF_STORAGE        = RECORDER_ERROR_CLASS | 0x0b,     /**< Out of storage */
+       RECORDER_ERROR_PERMISSION_DENIED     = TIZEN_ERROR_PERMISSION_DENIED,   /**< The access to the resources can not be granted */
+       RECORDER_ERROR_NOT_SUPPORTED         = TIZEN_ERROR_NOT_SUPPORTED,       /**< The feature is not supported */
+} recorder_error_e;
+
+/**
+ * @brief Enumeration for recorder states.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_STATE_NONE,      /**< Recorder is not created */
+       RECORDER_STATE_CREATED,   /**< Recorder is created, but not prepared */
+       RECORDER_STATE_READY,     /**< Recorder is ready to record \n In case of video recorder, preview display will be shown */
+       RECORDER_STATE_RECORDING, /**< Recorder is recording media */
+       RECORDER_STATE_PAUSED,    /**< Recorder is paused while recording media */
+} recorder_state_e;
+
+/**
+ * @brief Enumeration for the recording limit.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_RECORDING_LIMIT_TIME,        /**< Time limit (second) of recording file */
+       RECORDER_RECORDING_LIMIT_SIZE,        /**< Size limit (kilo bytes [KB]) of recording file */
+       RECORDER_RECORDING_LIMIT_FREE_SPACE,  /**< No free space in storage */
+} recorder_recording_limit_type_e;
+
+/**
+ * @brief Enumeration for the file container format.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_FILE_FORMAT_3GP,    /**< 3GP file format */
+       RECORDER_FILE_FORMAT_MP4,    /**< MP4 file format */
+       RECORDER_FILE_FORMAT_AMR,    /**< AMR file format */
+       RECORDER_FILE_FORMAT_ADTS,   /**< ADTS file format */
+       RECORDER_FILE_FORMAT_WAV,    /**< WAV file format */
+       RECORDER_FILE_FORMAT_OGG,    /**< OGG file format */
+} recorder_file_format_e;
+
+/**
+ * @brief Enumeration for the audio codec.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_AUDIO_CODEC_DISABLE = -1, /**< Disable audio track */
+       RECORDER_AUDIO_CODEC_AMR = 0,      /**< AMR codec */
+       RECORDER_AUDIO_CODEC_AAC,          /**< AAC codec */
+       RECORDER_AUDIO_CODEC_VORBIS,       /**< Vorbis codec */
+       RECORDER_AUDIO_CODEC_PCM           /**< PCM codec */
+} recorder_audio_codec_e;
+
+/**
+ * @brief Enumeration for the video codec.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_VIDEO_CODEC_H263,    /**< H263 codec */
+       RECORDER_VIDEO_CODEC_H264,    /**< H264 codec */
+       RECORDER_VIDEO_CODEC_MPEG4,   /**< MPEG4 codec */
+       RECORDER_VIDEO_CODEC_THEORA   /**< Theora codec */
+} recorder_video_codec_e;
+
+/**
+ * @brief Enumeration for audio capture devices.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_AUDIO_DEVICE_MIC,      /**< Mic device */
+       RECORDER_AUDIO_DEVICE_MODEM,    /**< Modem */
+} recorder_audio_device_e;
+
+/**
+ * @brief Enumeration for the recorder rotation type.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_ROTATION_NONE, /**< No rotation */
+       RECORDER_ROTATION_90,   /**< 90 degree rotation */
+       RECORDER_ROTATION_180,  /**< 180 degree rotation */
+       RECORDER_ROTATION_270,  /**< 270 degree rotation */
+} recorder_rotation_e;
+
+/**
+ * @brief Enumeration for the recorder policy.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       RECORDER_POLICY_NONE = 0,       /**< None */
+       RECORDER_POLICY_SOUND,          /**< Sound policy */
+       RECORDER_POLICY_SOUND_BY_CALL,  /**< Sound policy by CALL */
+       RECORDER_POLICY_SOUND_BY_ALARM, /**< Sound policy by ALARM */
+       RECORDER_POLICY_SECURITY        /**< Security policy */
+} recorder_policy_e;
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Called when limitation error occurs while recording.
+ * @details The callback function is possible to receive three types of limits: time, size and no-space.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks After being called, recording data is discarded and not written in the recording file. Also the state of recorder is not changed.
+ * @param[in] type The imitation type
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre You have to register a callback using recorder_set_recording_limit_reached_cb().
+ * @see recorder_set_recording_status_cb()
+ * @see recorder_set_recording_limit_reached_cb()
+ * @see recorder_unset_recording_limit_reached_cb()
+ */
+typedef void (*recorder_recording_limit_reached_cb)(recorder_recording_limit_type_e type, void *user_data);
+
+/**
+ * @brief Called to indicate the recording status.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This callback function is repeatedly invoked during the #RECORDER_STATE_RECORDING state.
+ * @param[in] elapsed_time  The time of the recording (milliseconds)
+ * @param[in] file_size     The size of the recording file (KB)
+ * @param[in] user_data     The user data passed from the callback registration function
+ * @pre recorder_start() will invoke this callback if you register it using recorder_set_recording_status_cb().
+ * @see        recorder_set_recording_status_cb()
+ * @see        recorder_unset_recording_status_cb()
+ * @see        recorder_start()
+ */
+typedef void (*recorder_recording_status_cb)(unsigned long long elapsed_time, unsigned long long file_size, void *user_data);
+
+/**
+ * @brief Called when the record state is changed.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] previous The previous state of the recorder
+ * @param[in] current  The current state of the recorder
+ * @param[in] by_policy     @c true if the state is changed by policy, otherwise @c false if the state is not changed
+ * @param[in] user_data        The user data passed from the callback registration function
+ * @pre This function is required to register a callback using recorder_set_state_changed_cb().
+ * @see        recorder_set_state_changed_cb()
+ * @see        recorder_prepare()
+ * @see        recorder_unprepare()
+ * @see        recorder_start()
+ * @see        recorder_pause()
+ * @see        recorder_commit()
+ * @see        recorder_cancel()
+ */
+typedef void (*recorder_state_changed_cb)(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data);
+
+/**
+ * @brief Called when the recorder is interrupted by a policy.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] policy        The policy that is interrupting the recorder
+ * @param[in] previous      The previous state of the recorder
+ * @param[in] current       The current state of the recorder
+ * @param[in] user_data     The user data passed from the callback registration function
+ * @see        recorder_set_interrupted_cb()
+ */
+typedef void (*recorder_interrupted_cb)(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *user_data);
+
+/**
+ * @brief Called when audio stream data was being delivered just before storing in the recorded file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks The callback function holds the same buffer that will be recorded. \n
+ *          So if the user changes the buffer, the result file will contain the buffer.
+ * @remarks The callback is called via internal thread of Frameworks, therefore do not invoke UI API, recorder_unprepare(), recorder_commit() and recorder_cancel() in callback.
+ * @param[in] stream The audio stream data
+ * @param[in] size The size of the stream data
+ * @param[in] format The audio format
+ * @param[in] channel The number of the channel
+ * @param[in] timestamp The timestamp of the stream buffer (in msec)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see recorder_set_audio_stream_cb()
+ */
+typedef void (*recorder_audio_stream_cb)(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data);
+
+/**
+ * @brief Called once for each supported video resolution.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] width         The video image width
+ * @param[in] height        The video image height
+ * @param[in] user_data     The user data passed from the foreach function
+ * @return    @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
+ * @pre        recorder_foreach_supported_video_resolution() will invoke this callback.
+ * @see        recorder_foreach_supported_video_resolution()
+ */
+typedef bool (*recorder_supported_video_resolution_cb)(int width, int height, void *user_data);
+
+/**
+ * @brief Called when the error occurred.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This callback informs about the critical error situation. \n
+ *          When being invoked, user should release the resource and terminate the application. \n
+ *          This error code will be reported.
+ *          #RECORDER_ERROR_DEVICE \n
+ *          #RECORDER_ERROR_INVALID_OPERATION \n
+ *          #RECORDER_ERROR_OUT_OF_MEMORY.
+ * @param[in] error          The error code
+ * @param[in] current_state  The current state of the recorder
+ * @param[in] user_data      The user data passed from the callback registration function
+ * @pre        This callback function is invoked if you register this callback using recorder_set_error_cb().
+ * @see        recorder_set_error_cb()
+ * @see        recorder_unset_error_cb()
+ */
+typedef void (*recorder_error_cb)(recorder_error_e error, recorder_state_e current_state, void *user_data);
+
+ /**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Called iteratively to notify about the supported file formats.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] format   The format of recording files
+ * @param[in] user_data        The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
+ * @pre recorder_foreach_supported_file_format() will invoke this callback.
+ * @see        recorder_foreach_supported_file_format()
+ */
+typedef bool (*recorder_supported_file_format_cb)(recorder_file_format_e format, void *user_data);
+
+/**
+ * @brief Called iteratively to notify about the supported audio encoders.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] codec    The codec of audio encoder
+ * @param[in] user_data        The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
+ * @pre recorder_foreach_supported_audio_encoder() will invoke this callback.
+ * @see        recorder_foreach_supported_audio_encoder()
+ */
+typedef bool (*recorder_supported_audio_encoder_cb)(recorder_audio_codec_e codec, void *user_data);
+
+/**
+ * @brief Called iteratively to notify about the supported video encoders.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] codec    The codec of video encoder
+ * @param[in] user_data        The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop, \n otherwise @c false to break out of the loop
+ * @pre recorder_foreach_supported_video_encoder() will invoke this callback.
+ * @see        recorder_foreach_supported_video_encoder()
+ */
+typedef bool (*recorder_supported_video_encoder_cb)(recorder_video_codec_e codec, void *user_data);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Creates a recorder handle to record a video.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks You must release @a recorder using recorder_destroy(). \n
+ * The @a camera handle also could be used for capturing images. \n
+ * If the camera state was #CAMERA_STATE_CREATED, the preview format will be changed to the recommended preview format for recording.
+ * @remarks The created recorder state will be different according to camera state : \n
+ * #CAMERA_STATE_CREATED -> #RECORDER_STATE_CREATED\n
+ * #CAMERA_STATE_PREVIEW -> #RECORDER_STATE_READY\n
+ * #CAMERA_STATE_CAPTURED -> #RECORDER_STATE_READY
+ * @param[in]   camera The handle to the camera
+ * @param[out]  recorder       A handle to the recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see camera_create()
+ * @see camera_stop_preview()
+ * @see recorder_destroy()
+ */
+int legacy_recorder_create_videorecorder(camera_h camera, recorder_h *recorder);
+
+/**
+ * @brief Creates a recorder handle to record an audio.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks You must release @a recorder using recorder_destroy().
+ * @param[out]  recorder  A handle to the recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post The recorder state will be #RECORDER_STATE_CREATED.
+ * @see recorder_destroy()
+ */
+int legacy_recorder_create_audiorecorder(recorder_h *recorder);
+
+
+/**
+ * @brief Destroys the recorder handle.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks The video recorder's camera handle is not released by this function.
+ * @param[in]  recorder    The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre  The recorder state should be #RECORDER_STATE_CREATED.
+ * @post The recorder state will be #RECORDER_STATE_NONE.
+ * @see        camera_destroy()
+ * @see        recorder_create_videorecorder()
+ * @see        recorder_create_audiorecorder()
+ */
+int legacy_recorder_destroy(recorder_h recorder);
+
+/**
+ * @brief Prepares the media recorder for recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks Before calling the function, it is required to properly set audio encoder (recorder_set_audio_encoder()),
+ *          video encoder(recorder_set_video_encoder()) and file format (recorder_set_file_format()).
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_SOUND_POLICY Sound policy error
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre  The recorder state should be #RECORDER_STATE_CREATED by legacy_recorder_create_videorecorder(), legacy_recorder_create_audiorecorder() or legacy_recorder_unprepare().
+ * @post The recorder state will be #RECORDER_STATE_READY.
+ * @post If recorder handle is created by legacy_recorder_create_videorecorder(), the camera state will be changed to #CAMERA_STATE_PREVIEW.
+ * @see        recorder_create_videorecorder()
+ * @see        recorder_create_audiorecorder()
+ * @see        recorder_unprepare()
+ * @see        recorder_set_audio_encoder()
+ * @see        recorder_set_video_encoder()
+ * @see        recorder_set_file_format()
+ */
+int legacy_recorder_prepare(recorder_h recorder);
+
+/**
+ * @brief Resets the media recorder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre  The recorder state should be #RECORDER_STATE_READY set by legacy_recorder_prepare(), legacy_recorder_cancel() or legacy_recorder_commit().
+ * @post The recorder state will be #RECORDER_STATE_CREATED.
+ * @post If the recorder handle is created by legacy_recorder_create_videorecorder(), camera state will be changed to #CAMERA_STATE_CREATED.
+ * @see        recorder_prepare()
+ * @see        recorder_cancel()
+ * @see        recorder_commit()
+ */
+int legacy_recorder_unprepare(recorder_h recorder);
+
+/**
+ * @brief Starts the recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks If file path has been set to an existing file, this file is removed automatically and updated by new one. \n
+ *          In the video recorder, some preview format does not support record mode. It will return #RECORDER_ERROR_INVALID_OPERATION error. \n
+ *          You should use default preview format or #CAMERA_PIXEL_FORMAT_NV12 in the record mode. \n
+ *          When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
+ *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
+ *          If you want to save contents to external storage, you should add externalstorage privilege. \n
+ *          The filename should be set before this function is invoked.
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_READY by legacy_recorder_prepare() or #RECORDER_STATE_PAUSED by legacy_recorder_pause(). \n
+ *      The filename should be set by legacy_recorder_set_filename().
+ * @post The recorder state will be #RECORDER_STATE_RECORDING.
+ * @see        recorder_pause()
+ * @see        recorder_commit()
+ * @see        recorder_cancel()
+ * @see        recorder_set_audio_encoder()
+ * @see        recorder_set_filename()
+ * @see        recorder_set_file_format()
+ * @see        recorder_recording_status_cb()
+ * @see        recorder_set_filename()
+ */
+int legacy_recorder_start(recorder_h recorder);
+
+/**
+ * @brief Pauses the recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks Recording can be resumed with legacy_recorder_start().
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_RECORDING.
+ * @post The recorder state will be #RECORDER_STATE_PAUSED.
+ * @see legacy_recorder_pause()
+ * @see legacy_recorder_commit()
+ * @see legacy_recorder_cancel()
+ */
+int legacy_recorder_pause(recorder_h recorder);
+
+/**
+ * @brief Stops recording and saves the result.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
+ *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
+ *          If you want to save contents to external storage, you should add externalstorage privilege.
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_RECORDING set by legacy_recorder_start() or #RECORDER_STATE_PAUSED by legacy_recorder_pause().
+ * @post The recorder state will be #RECORDER_STATE_READY.
+ * @see legacy_recorder_pause()
+ * @see legacy_recorder_cancel()
+ * @see legacy_recorder_set_filename()
+ * @see        recorder_start()
+ */
+int legacy_recorder_commit(recorder_h recorder);
+
+/**
+ * @brief Cancels the recording.
+ * @details The recording data is discarded and not written in the recording file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ * @remarks When you want to record audio or video file, you need to add privilege according to rules below additionally. \n
+ *          If you want to save contents to internal storage, you should add mediastorage privilege. \n
+ *          If you want to save contents to external storage, you should add externalstorage privilege.
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_RECORDING set by legacy_recorder_start() or #RECORDER_STATE_PAUSED by legacy_recorder_pause().
+ * @post The recorder state will be #RECORDER_STATE_READY.
+ * @see legacy_recorder_pause()
+ * @see legacy_recorder_commit()
+ * @see legacy_recorder_cancel()
+ * @see legacy_recorder_start()
+ */
+int legacy_recorder_cancel(recorder_h recorder);
+
+/**
+ * @brief Gets the recorder's current state.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder The handle to the media recorder
+ * @param[out] state  The current state of the recorder
+ * @return  @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ */
+int legacy_recorder_get_state(recorder_h recorder, recorder_state_e *state);
+
+/**
+ * @brief Gets the peak audio input level that was sampled since the last call to this function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks @c 0 dB indicates maximum input level, @c -300 dB indicates minimum input level.
+ * @param[in]  recorder The handle to the media recorder
+ * @param[out] dB  The audio input level in dB
+ * @return  @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_RECORDING or #RECORDER_STATE_PAUSED.
+ */
+int legacy_recorder_get_audio_level(recorder_h recorder, double *dB);
+
+/**
+ * @brief Sets the file path to record.
+ * @details This function sets file path which defines where newly recorded data should be stored.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks If the same file already exists in the file system, then old file will be overwritten.
+ * @param[in]  recorder        The handle to the media recorder
+ * @param[in]  path The recording file path
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_get_filename()
+ */
+int legacy_recorder_set_filename(recorder_h recorder, const char *path);
+
+/**
+ * @brief Gets the file path to record.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You must release @a path using free().
+ * @param[in]  recorder    The handle to the media recorder
+ * @param[out] path    The recording file path
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_filename()
+ */
+int legacy_recorder_get_filename(recorder_h recorder, char **path);
+
+/**
+ * @brief Sets the file format for recording media stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks Since 2.3.1, it could be returned #RECORDER_ERROR_INVALID_OPERATION \n
+ *          when it's audio recorder and its state is #RECORDER_STATE_READY \n
+ *          because of checking codec compatibility with current encoder.
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] format   The media file format
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation (Since 2.3.1)
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
+ *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
+ * @see legacy_recorder_get_file_format()
+ * @see legacy_recorder_foreach_supported_file_format()
+ */
+int legacy_recorder_set_file_format(recorder_h recorder, recorder_file_format_e format);
+
+
+/**
+ * @brief Gets the file format for recording media stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[out] format   The media file format
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see legacy_recorder_set_file_format()
+ * @see legacy_recorder_foreach_supported_file_format()
+ */
+int legacy_recorder_get_file_format(recorder_h recorder, recorder_file_format_e *format);
+
+
+ /**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Retrieves all supported file formats by invoking a specific callback for each supported file format.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[in] callback The iteration callback
+ * @param[in] user_data        The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_supported_file_format_cb() will be invoked.
+ * @see legacy_recorder_get_file_format()
+ * @see legacy_recorder_set_file_format()
+ * @see legacy_recorder_supported_file_format_cb()
+ */
+int legacy_recorder_foreach_supported_file_format(recorder_h recorder, recorder_supported_file_format_cb callback, void *user_data);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Sets the audio codec for encoding an audio stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You can get available audio encoders by using recorder_foreach_supported_audio_encoder(). \n
+ *          If set to #RECORDER_AUDIO_CODEC_DISABLE, the audio track is not created in recording files.\n
+ *          Since 2.3.1, it could be returned #RECORDER_ERROR_INVALID_OPERATION \n
+ *          when it's audio recorder and its state is #RECORDER_STATE_READY \n
+ *          because of checking codec compatibility with current file format.
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] codec    The audio codec
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @retval #RECORDER_ERROR_INVALID_OPERATION Invalid operation (Since 2.3.1)
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_get_audio_encoder()
+ * @see legacy_recorder_foreach_supported_audio_encoder()
+ */
+int legacy_recorder_set_audio_encoder(recorder_h recorder, recorder_audio_codec_e codec);
+
+/**
+ * @brief Gets the audio codec for encoding an audio stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[out] codec   The audio codec
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_audio_encoder()
+ * @see legacy_recorder_foreach_supported_audio_encoder()
+ */
+int legacy_recorder_get_audio_encoder(recorder_h recorder, recorder_audio_codec_e *codec);
+
+ /**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Retrieves all supported audio encoders by invoking a specific callback for each supported audio encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[in] callback The iteration callback
+ * @param[in] user_data        The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_supported_audio_encoder_cb() will be invoked.
+ * @see        recorder_set_audio_encoder()
+ * @see        recorder_get_audio_encoder()
+ * @see        recorder_supported_audio_encoder_cb()
+ */
+int legacy_recorder_foreach_supported_audio_encoder(recorder_h recorder, recorder_supported_audio_encoder_cb callback, void *user_data);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Sets the resolution of the video recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This function should be called before recording (recorder_start()).
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] width    The preview width
+ * @param[in] height   The preview height
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre    The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_start()
+ * @see        recorder_get_video_resolution()
+ * @see        recorder_foreach_supported_video_resolution()
+ */
+int legacy_recorder_set_video_resolution(recorder_h recorder, int width, int height);
+
+/**
+ * @brief Gets the resolution of the video recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[out] width   The video width
+ * @param[out] height  The video height
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_video_resolution()
+ * @see        recorder_foreach_supported_video_resolution()
+ */
+int legacy_recorder_get_video_resolution(recorder_h recorder, int *width, int *height);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Retrieves all supported video resolutions by invoking callback function once for each supported video resolution.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] foreach_cb       The callback function to be invoked
+ * @param[in] user_data        The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post       This function invokes legacy_recorder_supported_video_resolution_cb() repeatedly to retrieve each supported video resolution.
+ * @see        recorder_set_video_resolution()
+ * @see        recorder_get_video_resolution()
+ * @see        recorder_supported_video_resolution_cb()
+ */
+int legacy_recorder_foreach_supported_video_resolution(recorder_h recorder,
+                                                recorder_supported_video_resolution_cb foreach_cb, void *user_data);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Sets the video codec for encoding video stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You can get available video encoders by using recorder_foreach_supported_video_encoder().
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] codec    The video codec
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see recorder_get_video_encoder()
+ * @see legacy_recorder_foreach_supported_video_encoder()
+ */
+int legacy_recorder_set_video_encoder(recorder_h recorder, recorder_video_codec_e codec);
+
+/**
+ * @brief Gets the video codec for encoding video stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[out] codec   The video codec
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see legacy_recorder_set_video_encoder()
+ * @see legacy_recorder_foreach_supported_video_encoder()
+ */
+int legacy_recorder_get_video_encoder(recorder_h recorder, recorder_video_codec_e *codec);
+
+/**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_CAPABILITY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Retrieves all supported video encoders by invoking a specific callback for each supported video encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] callback The iteration callback
+ * @param[in] user_data        The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_supported_video_encoder_cb() will be invoked.
+ * @see legacy_recorder_set_video_encoder()
+ * @see legacy_recorder_get_video_encoder()
+ * @see        recorder_supported_video_encoder_cb()
+ */
+int legacy_recorder_foreach_supported_video_encoder(recorder_h recorder, recorder_supported_video_encoder_cb callback, void *user_data);
+
+ /**
+ * @}
+*/
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Registers the callback function that will be invoked when the recorder state changes.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] callback The function pointer of user callback
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_state_changed_cb() will be invoked.
+ * @see legacy_recorder_unset_state_changed_cb()
+ * @see legacy_recorder_state_changed_cb()
+ */
+int legacy_recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb callback, void *user_data);
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see legacy_recorder_set_state_changed_cb()
+ */
+int legacy_recorder_unset_state_changed_cb(recorder_h recorder);
+
+/**
+ * @brief Registers a callback function to be called when the media recorder is interrupted according to a policy.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] callback   The callback function to register
+ * @param[in] user_data   The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_unset_interrupted_cb()
+ * @see        recorder_interrupted_cb()
+ */
+int legacy_recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb callback,
+           void *user_data);
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_interrupted_cb()
+ */
+int legacy_recorder_unset_interrupted_cb(recorder_h recorder);
+
+/**
+ * @brief Registers a callback function to be called when audio stream data is being delivered.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This callback function holds the same buffer that will be recorded. \n
+ *          Therefore if an user changes the buffer, the result file will have the buffer. \n
+ * @remarks The callback is called via internal thread of Frameworks. Therefore do not invoke UI API, legacy_recorder_unprepare(), legacy_recorder_commit() and legacy_recorder_cancel() in callback.\n
+ *          This callback function to be called in #RECORDER_STATE_RECORDING and #RECORDER_STATE_PAUSED state.
+ *
+ * @param[in] recorder    The handle to the recorder
+ * @param[in] callback    The callback function to register
+ * @param[in] user_data   The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre        The recorder state should be #RECORDER_STATE_READY or #RECORDER_STATE_CREATED.
+ * @see        recorder_unset_audio_stream_cb()
+ * @see        recorder_audio_stream_cb()
+ */
+int legacy_recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb callback, void* user_data);
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see     legacy_recorder_set_audio_stream_cb()
+ */
+int legacy_recorder_unset_audio_stream_cb(recorder_h recorder);
+
+/**
+ * @brief Registers a callback function to be invoked when the recording information changes.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder   The handle to the media recorder
+ * @param[in]  callback   The function pointer of user callback
+ * @param[in]  user_data  The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_recording_status_cb() will be invoked.
+ * @see        recorder_unset_recording_status_cb()
+ * @see        recorder_recording_status_cb()
+ */
+int legacy_recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_status_cb callback, void *user_data);
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder    The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_recording_status_cb()
+ */
+int legacy_recorder_unset_recording_status_cb(recorder_h recorder);
+
+/**
+ * @brief Registers the callback function to be run when reached the recording limit.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to media recorder
+ * @param[in]  callback        The function pointer of user callback
+ * @param[in]  user_data       The user data to be passed to the callback function
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post  legacy_recorder_recording_limit_reached_cb() will be invoked.
+ * @see        recorder_unset_recording_limit_reached_cb()
+ * @see        recorder_attr_set_size_limit()
+ * @see        recorder_attr_set_time_limit()
+ * @see        recorder_recording_limit_reached_cb()
+ */
+int legacy_recorder_set_recording_limit_reached_cb(recorder_h recorder, recorder_recording_limit_reached_cb callback, void *user_data);
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder  The handle to the media recorder
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_recording_limit_reached_cb()
+ */
+int legacy_recorder_unset_recording_limit_reached_cb(recorder_h recorder);
+
+/**
+ * @brief Registers a callback function to be called when an asynchronous operation error occurred.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This callback informs critical error situation.\n
+ *          When this callback is invoked, user should release the resource and terminate the application. \n
+ *          These error codes will occur. \n
+ *          #RECORDER_ERROR_DEVICE \n
+ *          #RECORDER_ERROR_INVALID_OPERATION \n
+ *          #RECORDER_ERROR_OUT_OF_MEMORY
+ * @param[in]  recorder        The handle to the recorder
+ * @param[in]  callback        The callback function to register
+ * @param[in]  user_data       The user data to be passed to the callback function
+ * @return  @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @post       This function will invoke legacy_recorder_error_cb() when an asynchronous operation error occur.
+ * @see        recorder_unset_error_cb()
+ * @see        recorder_error_cb()
+ */
+int legacy_recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void *user_data);
+
+
+/**
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to the recorder
+ * @return  @c on success, otherwise a negative error value
+ * @retval    #RECORDER_ERROR_NONE Successful
+ * @retval    #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_set_error_cb()
+ */
+int legacy_recorder_unset_error_cb(recorder_h recorder);
+
+
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup CAPI_MEDIA_RECORDER_ATTRIBUTES_MODULE
+ * @{
+ */
+
+
+/**
+ * @brief Sets the maximum size of a recording file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks After reaching the limitation, the recording data is discarded and not written in the recording file.
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] kbyte    The maximum size of the recording file(KB) \n
+ *                     @c 0 means unlimited recording size.
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_size_limit()
+ * @see        recorder_attr_set_time_limit()
+ */
+int legacy_recorder_attr_set_size_limit(recorder_h recorder, int kbyte);
+
+/**
+ * @brief Gets the maximum size of a recording file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder The handle to the media recorder
+ * @param[out] kbyte    The maximum size of recording file (KB) \n
+ *                      @c 0 means unlimited recording size.
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_size_limit()
+ * @see        recorder_attr_get_time_limit()
+ */
+int legacy_recorder_attr_get_size_limit(recorder_h recorder, int *kbyte);
+
+/**
+ * @brief Sets the time limit of a recording file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks After reaching the limitation, the recording data is discarded and not written in the recording file.
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] second   The time limit of the recording file (in seconds) \n
+ *                     @c 0 means unlimited recording size.
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_time_limit()
+ * @see        recorder_attr_set_size_limit()
+ */
+int legacy_recorder_attr_set_time_limit(recorder_h recorder, int second);
+
+
+/**
+ * @brief Gets the time limit of a recording file.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder  The handle to the media recorder
+ * @param[out] second    The time limit of the recording file (in seconds) \n
+ *                       @c 0 means unlimited recording time.
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_time_limit()
+ * @see        recorder_attr_get_size_limit()
+ */
+int legacy_recorder_attr_get_time_limit(recorder_h recorder, int *second);
+
+/**
+ * @brief Sets the audio device for recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] device   The type of an audio device
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
+ *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_audio_device()
+ */
+int legacy_recorder_attr_set_audio_device(recorder_h recorder, recorder_audio_device_e device);
+
+/**
+ * @brief Gets the audio device for recording.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[out] device The type of an audio device
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_audio_device()
+ */
+int legacy_recorder_attr_get_audio_device(recorder_h recorder, recorder_audio_device_e *device);
+
+/**
+ * @brief Sets the sampling rate of an audio stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder    The handle to the media recorder
+ * @param[in] samplerate The sample rate in Hertz
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
+ *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_audio_samplerate()
+ */
+int legacy_recorder_attr_set_audio_samplerate(recorder_h recorder, int samplerate);
+
+/**
+ * @brief Gets the sampling rate of an audio stream.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder    The handle to the media recorder
+ * @param[out] samplerate  The sample rate in Hertz
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_audio_samplerate()
+ */
+int legacy_recorder_attr_get_audio_samplerate(recorder_h recorder, int *samplerate);
+
+/**
+ * @brief Sets the bitrate of an audio encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[in] bitrate   The bitrate (for mms : 12200[bps], normal : 288000[bps])
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_audio_encoder_bitrate()
+ */
+int legacy_recorder_attr_set_audio_encoder_bitrate(recorder_h recorder, int bitrate);
+
+/**
+ * @brief Sets the bitrate of a video encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[in] bitrate   The bitrate in bits per second
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_INVALID_STATE Invalid state
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_video_encoder_bitrate()
+ */
+int legacy_recorder_attr_set_video_encoder_bitrate(recorder_h recorder, int bitrate);
+
+/**
+ * @brief Gets the bitrate of an audio encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder  The handle to the media recorder
+ * @param[out] bitrate   The bitrate in bits per second
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_audio_encoder_bitrate()
+ */
+int legacy_recorder_attr_get_audio_encoder_bitrate(recorder_h recorder, int *bitrate);
+
+/**
+ * @brief Gets the bitrate of a video encoder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder  The handle to the media recorder
+ * @param[out] bitrate   The bitrate in bits per second
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_audio_encoder_bitrate()
+ */
+int legacy_recorder_attr_get_video_encoder_bitrate(recorder_h recorder, int *bitrate);
+
+/**
+ * @brief Sets the mute state of a recorder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[in] enable The mute state
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_is_muted()
+ */
+int legacy_recorder_attr_set_mute(recorder_h recorder, bool enable);
+
+/**
+ * @brief Gets the mute state of a recorder.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder The handle to the media recorder
+ * @remarks The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section.
+ * @return  @c true if the recorder is not recording any sound,
+ *          otherwise @c false if the recorder is recording
+ * @exception #RECORDER_ERROR_NONE Successful
+ * @exception #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @exception #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @exception #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_mute()
+ */
+bool legacy_recorder_attr_is_muted(recorder_h recorder);
+
+/**
+ * @brief Sets the recording motion rate.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This attribute is valid only in a video recorder. \n
+ *          If the rate bigger than @c 0 and smaller than @c 1, video is recorded in a slow motion mode. \n
+ *          If the rate bigger than @c 1, video is recorded in a fast motion mode (time lapse recording).
+ * @remarks Audio data is not recorded. \n
+ *          To reset slow motion recording, set the rate to @c 1.
+ * @param[in] recorder The handle to the media recorder
+ * @param[in] rate     The recording motion rate \n
+ *                     It is computed with fps. (@c 0<rate<@c 1 for slow motion, @c 1<rate for fast motion(time lapse recording), @c 1 to reset).
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_recording_motion_rate()
+ */
+int legacy_recorder_attr_set_recording_motion_rate(recorder_h recorder , double rate);
+
+/**
+ * @brief Gets the recording motion rate.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This attribute is valid only in a video recorder. \n
+ *          If the rate bigger than @c 0 and smaller than @c 1, video is recorded in a slow motion mode. \n
+ *          If the rate bigger than @c 1, video is recorded in a fast motion mode (time lapse recording).
+ * @remarks Audio data is not recorded. \n
+ *          To reset slow motion recording, set the rate to @c 1.
+ * @param[in]  recorder The handle to the media recorder
+ * @param[out] rate     The recording motion rate \n
+ *                      It is computed with fps.
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_recording_motion_rate()
+ */
+int legacy_recorder_attr_get_recording_motion_rate(recorder_h recorder , double *rate);
+
+/**
+ * @brief Sets the number of the audio channel.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks This attribute is applied only in RECORDER_STATE_CREATED state. \n
+ *          For mono recording, setting channel to @c 1. \n
+ *          For stereo recording, setting channel to @c 2.
+ * @param[in] recorder       The handle to the media recorder
+ * @param[in] channel_count  The number of the audio channel
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY (for video recorder only).\n
+ *      Since 2.3.1, this API also works for audio recorder when its state is #RECORDER_STATE_READY.
+ * @see        recorder_attr_get_audio_channel()
+ */
+int legacy_recorder_attr_set_audio_channel(recorder_h recorder, int channel_count);
+
+/**
+ * @brief Gets the number of the audio channel.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] recorder  The handle to the media recorder
+ * @param[out] channel_count  The number of the audio channel
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_audio_channel()
+ */
+int legacy_recorder_attr_get_audio_channel(recorder_h recorder, int *channel_count);
+
+
+/**
+ * @brief Sets the video orientation in a video metadata tag.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to a media recorder
+ * @param[in]  orientation     The information of the video orientation
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_get_orientation_tag()
+ */
+int legacy_recorder_attr_set_orientation_tag(recorder_h recorder,  recorder_rotation_e orientation);
+
+/**
+ * @brief Gets the video orientation in a video metadata tag.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in]  recorder        The handle to a media recorder
+ * @param[out]  orientation    The information of the video orientation
+ * @return  @c 0 on success, otherwise a negative error value
+ * @retval #RECORDER_ERROR_NONE Successful
+ * @retval #RECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #RECORDER_ERROR_PERMISSION_DENIED The access to the resources can not be granted
+ * @retval #RECORDER_ERROR_NOT_SUPPORTED The feature is not supported
+ * @see        recorder_attr_set_orientation_tag()
+ */
+int legacy_recorder_attr_get_orientation_tag(recorder_h recorder, recorder_rotation_e *orientation);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TIZEN_MULTIMEDIA_RECORDER_H__ */
+
diff --git a/legacy/include/legacy_recorder_private.h b/legacy/include/legacy_recorder_private.h
new file mode 100644 (file)
index 0000000..37a2b00
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 __TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
+#define        __TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
+#include <mm_camcorder.h>
+#include <legacy_recorder.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef union _mediaSource{
+       camera_h camera;
+}mediasource;
+
+
+typedef enum {
+       _RECORDER_EVENT_TYPE_STATE_CHANGE,
+       _RECORDER_EVENT_TYPE_RECORDING_LIMITED,
+       _RECORDER_EVENT_TYPE_RECORDING_STATUS,
+       _RECORDER_EVENT_TYPE_INTERRUPTED,
+       _RECORDER_EVENT_TYPE_AUDIO_STREAM,
+       _RECORDER_EVENT_TYPE_ERROR,
+       _RECORDER_EVENT_TYPE_NUM
+}_recorder_event_e;
+
+typedef enum {
+       _RECORDER_TYPE_AUDIO = 0,
+       _RECORDER_TYPE_VIDEO
+}_recorder_type_e;
+
+typedef enum {
+       _RECORDER_SOURCE_TYPE_UNKNOWN,
+       _RECORDER_SOURCE_TYPE_CAMERA,
+}_recorder_source_type_e;
+
+typedef struct _recorder_s{
+       MMHandleType mm_handle;
+       mediasource mm_source;
+       void* user_cb[_RECORDER_EVENT_TYPE_NUM];
+       void* user_data[_RECORDER_EVENT_TYPE_NUM];
+       unsigned int state;
+       int camera_device_count;
+       _recorder_type_e type;
+       _recorder_source_type_e src_type;
+       int origin_preview_format;
+       int changed_preview_format;
+       double last_max_input_level;
+} recorder_s;
+
+int __convert_recorder_error_code(const char *func, int code);
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__TIZEN_MULTIMEDIA_RECORDER_PRIVATE_H__
+
+
diff --git a/legacy/src/legacy_recorder.c b/legacy/src/legacy_recorder.c
new file mode 100644 (file)
index 0000000..1fff8e1
--- /dev/null
@@ -0,0 +1,2008 @@
+/*
+* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mm.h>
+#include <audio-session-manager-types.h>
+#include <mm_camcorder.h>
+#include <mm_types.h>
+#include <math.h>
+#include <legacy_camera.h>
+#include <legacy_recorder_private.h>
+#include <dlog.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "TIZEN_N_RECORDER"
+
+#define LOWSET_DECIBEL -300.0
+#define RECORDER_PATH_RECORDER_RESOURCE    "/usr/share/sounds/mm-camcorder/recorder_resource"
+
+
+/*
+ * camera_private function
+*/
+int _camera_get_mm_handle(camera_h camera , MMHandleType *handle);
+int _camera_set_relay_mm_message_callback(camera_h camera, MMMessageCallback callback, void *user_data);
+int _camera_set_use(camera_h camera, bool used);
+bool _camera_is_used(camera_h camera);
+/*
+ * end of camera_private function
+ */
+
+static int __mm_audio_stream_cb(MMCamcorderAudioStreamDataType *stream, void *user_param);
+static int __mm_recorder_msg_cb(int message, void *param, void *user_data);
+
+
+static int __convert_error_code_camera_to_recorder(int code)
+{
+       int new_code = code;
+
+       switch (code) {
+       case CAMERA_ERROR_INVALID_STATE :
+               new_code = RECORDER_ERROR_INVALID_STATE;
+               break;
+       case CAMERA_ERROR_DEVICE:
+               new_code = RECORDER_ERROR_DEVICE;
+               break;
+       case CAMERA_ERROR_SOUND_POLICY:
+               new_code = RECORDER_ERROR_SOUND_POLICY;
+               break;
+       case CAMERA_ERROR_SECURITY_RESTRICTED:
+               new_code = RECORDER_ERROR_SECURITY_RESTRICTED;
+               break;
+       default:
+               break;
+       }
+
+       return new_code;
+}
+
+
+int __convert_recorder_error_code(const char *func, int code)
+{
+       int ret = RECORDER_ERROR_INVALID_OPERATION;
+       const char *errorstr = NULL;
+
+       switch (code) {
+       case RECORDER_ERROR_INVALID_PARAMETER:
+               ret = RECORDER_ERROR_INVALID_PARAMETER;
+               errorstr = "INVALID_PARAMETER";
+               break;
+       case MM_ERROR_NONE:
+               ret = RECORDER_ERROR_NONE;
+               errorstr = "ERROR_NONE";
+               break;
+       case MM_ERROR_CAMCORDER_INVALID_ARGUMENT :
+       case MM_ERROR_COMMON_INVALID_ATTRTYPE :
+               ret = RECORDER_ERROR_INVALID_PARAMETER;
+               errorstr = "INVALID_PARAMETER";
+               break;
+       case MM_ERROR_COMMON_INVALID_PERMISSION :
+               ret = RECORDER_ERROR_PERMISSION_DENIED;
+               errorstr = "ERROR_PERMISSION_DENIED";
+               break;
+       case MM_ERROR_CAMCORDER_NOT_INITIALIZED :
+       case MM_ERROR_CAMCORDER_INVALID_STATE :
+               ret = RECORDER_ERROR_INVALID_STATE;
+               errorstr = "INVALID_STATE";
+               break;
+       case MM_ERROR_CAMCORDER_DEVICE :
+       case MM_ERROR_CAMCORDER_DEVICE_NOT_FOUND :
+       case MM_ERROR_CAMCORDER_DEVICE_BUSY :
+       case MM_ERROR_CAMCORDER_DEVICE_OPEN :
+       case MM_ERROR_CAMCORDER_DEVICE_IO :
+       case MM_ERROR_CAMCORDER_DEVICE_TIMEOUT :
+       case MM_ERROR_CAMCORDER_DEVICE_WRONG_JPEG :
+       case MM_ERROR_CAMCORDER_DEVICE_LACK_BUFFER :
+               ret = RECORDER_ERROR_DEVICE;
+               errorstr = "ERROR_DEVICE";
+               break;
+       case MM_ERROR_CAMCORDER_GST_CORE :
+       case MM_ERROR_CAMCORDER_GST_LIBRARY :
+       case MM_ERROR_CAMCORDER_GST_RESOURCE :
+       case MM_ERROR_CAMCORDER_GST_STREAM :
+       case MM_ERROR_CAMCORDER_GST_STATECHANGE :
+       case MM_ERROR_CAMCORDER_GST_NEGOTIATION :
+       case MM_ERROR_CAMCORDER_GST_LINK :
+       case MM_ERROR_CAMCORDER_GST_FLOW_ERROR :
+       case MM_ERROR_CAMCORDER_ENCODER :
+       case MM_ERROR_CAMCORDER_ENCODER_BUFFER :
+       case MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE :
+       case MM_ERROR_CAMCORDER_ENCODER_WORKING :
+       case MM_ERROR_CAMCORDER_INTERNAL :
+       case MM_ERROR_CAMCORDER_RESPONSE_TIMEOUT :
+       case MM_ERROR_CAMCORDER_CMD_IS_RUNNING :
+       case MM_ERROR_CAMCORDER_DSP_FAIL :
+       case MM_ERROR_CAMCORDER_AUDIO_EMPTY :
+       case MM_ERROR_CAMCORDER_CREATE_CONFIGURE :
+       case MM_ERROR_CAMCORDER_FILE_SIZE_OVER :
+       case MM_ERROR_CAMCORDER_DISPLAY_DEVICE_OFF :
+       case MM_ERROR_CAMCORDER_INVALID_CONDITION :
+               ret = RECORDER_ERROR_INVALID_OPERATION;
+               errorstr = "INVALID_OPERATION";
+               break;
+       case MM_ERROR_CAMCORDER_RESOURCE_CREATION :
+       case MM_ERROR_COMMON_OUT_OF_MEMORY:
+               ret = RECORDER_ERROR_OUT_OF_MEMORY;
+               errorstr = "OUT_OF_MEMORY";
+               break;
+       case MM_ERROR_POLICY_BLOCKED:
+               ret = RECORDER_ERROR_SOUND_POLICY;
+               errorstr = "ERROR_SOUND_POLICY";
+               break;
+       case MM_ERROR_POLICY_BLOCKED_BY_CALL:
+               ret = RECORDER_ERROR_SOUND_POLICY_BY_CALL;
+               errorstr = "ERROR_SOUND_POLICY_BY_CALL";
+               break;
+       case MM_ERROR_POLICY_BLOCKED_BY_ALARM:
+               ret = RECORDER_ERROR_SOUND_POLICY_BY_ALARM;
+               errorstr = "ERROR_SOUND_POLICY_BY_ALARM";
+               break;
+       case MM_ERROR_POLICY_RESTRICTED:
+               ret = RECORDER_ERROR_SECURITY_RESTRICTED;
+               errorstr = "ERROR_RESTRICTED";
+               break;
+       case MM_ERROR_CAMCORDER_DEVICE_REG_TROUBLE:
+               ret = RECORDER_ERROR_ESD;
+               errorstr = "ERROR_ESD";
+               break;
+       case MM_ERROR_OUT_OF_STORAGE:
+               ret = RECORDER_ERROR_OUT_OF_STORAGE;
+               errorstr = "OUT_OF_STORAGE";
+               break;
+       case MM_ERROR_COMMON_OUT_OF_ARRAY:
+       case MM_ERROR_COMMON_OUT_OF_RANGE:
+       case MM_ERROR_COMMON_ATTR_NOT_EXIST:
+       case MM_ERROR_CAMCORDER_NOT_SUPPORTED:
+               ret = RECORDER_ERROR_NOT_SUPPORTED;
+               errorstr = "NOT_SUPPORTED";
+               break;
+       default:
+               ret = RECORDER_ERROR_INVALID_OPERATION;
+               errorstr = "INVALID_OPERATION";
+               break;
+       }
+
+       LOGE("[%s] %s(0x%08x) : core frameworks error code(0x%08x)", func, errorstr, ret, code);
+
+       return ret;
+}
+
+
+static recorder_state_e __recorder_state_convert(MMCamcorderStateType mm_state)
+{
+       recorder_state_e state = RECORDER_STATE_NONE;
+       switch (mm_state) {
+       case MM_CAMCORDER_STATE_NONE:
+               state = RECORDER_STATE_NONE;
+               break;
+       case MM_CAMCORDER_STATE_NULL:
+               state = RECORDER_STATE_CREATED;
+               break;
+       case MM_CAMCORDER_STATE_READY:
+               state = RECORDER_STATE_CREATED;
+               break;
+       case MM_CAMCORDER_STATE_PREPARE:
+               state = RECORDER_STATE_READY;
+               break;
+       case MM_CAMCORDER_STATE_CAPTURING:
+               state = RECORDER_STATE_READY;
+               break;
+       case MM_CAMCORDER_STATE_RECORDING:
+               state = RECORDER_STATE_RECORDING;
+               break;
+       case MM_CAMCORDER_STATE_PAUSED:
+               state = RECORDER_STATE_PAUSED;
+               break;
+       default:
+               state = RECORDER_STATE_NONE;
+               break;
+       }
+
+       return state;
+}
+
+
+static int __mm_recorder_msg_cb(int message, void *param, void *user_data)
+{
+       recorder_s * handle = (recorder_s *)user_data;
+       MMMessageParamType *m = (MMMessageParamType *)param;
+       recorder_state_e previous_state;
+       recorder_recording_limit_type_e type;
+       int recorder_error = 0;
+
+       switch (message) {
+       case MM_MESSAGE_READY_TO_RESUME:
+               LOGW("not supported message");
+               break;
+       case MM_MESSAGE_CAMCORDER_STATE_CHANGED:
+       case MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_ASM:
+       case MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY:
+               previous_state = handle->state;
+               handle->state = __recorder_state_convert(m->state.current);
+               recorder_policy_e policy = RECORDER_POLICY_NONE;
+               if (message == MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_ASM) {
+                       switch (m->state.code) {
+                       case ASM_EVENT_SOURCE_CALL_START:
+                       case ASM_EVENT_SOURCE_CALL_END:
+                               policy = RECORDER_POLICY_SOUND_BY_CALL;
+                               LOGE("RECORDER_POLICY_SOUND_BY_CALL");
+                               break;
+                       case ASM_EVENT_SOURCE_ALARM_START:
+                       case ASM_EVENT_SOURCE_ALARM_END:
+                               policy = RECORDER_POLICY_SOUND_BY_ALARM;
+                               LOGE("RECORDER_POLICY_SOUND_BY_ALARM");
+                               break;
+                       default:
+                               policy = RECORDER_POLICY_SOUND;
+                               LOGE("RECORDER_POLICY_SOUND");
+                               break;
+                       }
+               } else if (message == MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY) {
+                       policy = RECORDER_POLICY_SECURITY;
+                       LOGE("RECORDER_POLICY_SECURITY");
+               }
+
+               if (previous_state != handle->state && handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE]) {
+                       ((recorder_state_changed_cb)handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE])(previous_state, handle->state, policy, handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE]);
+               }
+
+               /* should change intermediate state MM_CAMCORDER_STATE_READY is not valid in capi , change to NULL state */
+               if (policy != RECORDER_POLICY_NONE &&
+                   (m->state.current == MM_CAMCORDER_STATE_PAUSED || m->state.current == MM_CAMCORDER_STATE_NULL)) {
+                       if (handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED]) {
+                               ((recorder_interrupted_cb)handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED])(policy, previous_state, handle->state, handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED]);
+                       } else {
+                               LOGW("_RECORDER_EVENT_TYPE_INTERRUPTED cb is NULL");
+                       }
+               }
+               break;
+       case MM_MESSAGE_CAMCORDER_MAX_SIZE:
+       case MM_MESSAGE_CAMCORDER_NO_FREE_SPACE:
+       case MM_MESSAGE_CAMCORDER_TIME_LIMIT:
+               if (MM_MESSAGE_CAMCORDER_MAX_SIZE == message) {
+                       type = RECORDER_RECORDING_LIMIT_SIZE;
+               } else if (MM_MESSAGE_CAMCORDER_NO_FREE_SPACE == message) {
+                       type = RECORDER_RECORDING_LIMIT_FREE_SPACE;
+               } else {
+                       type = RECORDER_RECORDING_LIMIT_TIME;
+               }
+               if (handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED]) {
+                       ((recorder_recording_limit_reached_cb)handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED])(type, handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED]);
+               }
+               break;
+       case MM_MESSAGE_CAMCORDER_RECORDING_STATUS:
+               if (handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS]) {
+                       ((recorder_recording_status_cb)handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS])(m->recording_status.elapsed, m->recording_status.filesize, handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS]);
+               }
+               break;
+       case MM_MESSAGE_CAMCORDER_ERROR:
+               switch (m->code) {
+               case MM_ERROR_CAMCORDER_DEVICE:
+               case MM_ERROR_CAMCORDER_DEVICE_TIMEOUT:
+               case MM_ERROR_CAMCORDER_DEVICE_WRONG_JPEG:
+                       recorder_error = RECORDER_ERROR_DEVICE;
+                       break;
+               case MM_ERROR_CAMCORDER_GST_CORE:
+               case MM_ERROR_CAMCORDER_GST_LIBRARY:
+               case MM_ERROR_CAMCORDER_GST_RESOURCE:
+               case MM_ERROR_CAMCORDER_GST_STREAM:
+               case MM_ERROR_CAMCORDER_GST_NEGOTIATION:
+               case MM_ERROR_CAMCORDER_GST_FLOW_ERROR:
+               case MM_ERROR_CAMCORDER_ENCODER:
+               case MM_ERROR_CAMCORDER_ENCODER_BUFFER:
+               case MM_ERROR_CAMCORDER_ENCODER_WORKING:
+               case MM_ERROR_CAMCORDER_MNOTE_CREATION:
+               case MM_ERROR_CAMCORDER_MNOTE_ADD_ENTRY:
+               case MM_ERROR_CAMCORDER_INTERNAL:
+               case MM_ERROR_FILE_NOT_FOUND:
+               case MM_ERROR_FILE_READ:
+                       recorder_error = RECORDER_ERROR_INVALID_OPERATION;
+                       break;
+               case MM_ERROR_CAMCORDER_LOW_MEMORY:
+               case MM_ERROR_CAMCORDER_MNOTE_MALLOC:
+                       recorder_error = RECORDER_ERROR_OUT_OF_MEMORY;
+                       break;
+               case MM_ERROR_CAMCORDER_DEVICE_REG_TROUBLE:
+                       recorder_error = RECORDER_ERROR_ESD;
+                       break;
+               case MM_ERROR_OUT_OF_STORAGE:
+                       recorder_error = RECORDER_ERROR_OUT_OF_STORAGE;
+                       break;
+               default:
+                       recorder_error = RECORDER_ERROR_INVALID_OPERATION;
+                       break;
+               }
+
+               if (recorder_error != 0 && handle->user_cb[_RECORDER_EVENT_TYPE_ERROR]) {
+                       ((recorder_error_cb)handle->user_cb[_RECORDER_EVENT_TYPE_ERROR])(recorder_error, handle->state, handle->user_data[_RECORDER_EVENT_TYPE_ERROR]);
+               }
+               break;
+       case MM_MESSAGE_CAMCORDER_CURRENT_VOLUME:
+               if (handle->last_max_input_level < m->rec_volume_dB) {
+                       handle->last_max_input_level = m->rec_volume_dB;
+               }
+               break;
+       default:
+               break;
+       }
+
+       return 1;
+}
+
+
+static int __mm_audio_stream_cb(MMCamcorderAudioStreamDataType *stream, void *user_param)
+{
+       if (user_param == NULL || stream == NULL) {
+               return 0;
+       }
+
+       recorder_s *handle = (recorder_s *)user_param;
+       audio_sample_type_e format = AUDIO_SAMPLE_TYPE_U8;
+
+       if (stream->format == MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE) {
+               format = AUDIO_SAMPLE_TYPE_S16_LE;
+       }
+
+       if( handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] ){
+               ((recorder_audio_stream_cb)(handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM]))(stream->data, stream->length, format,
+                                                                                                stream->channel, stream->timestamp,
+                                                                                                handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM]);
+       }
+
+       return 1;
+}
+
+
+static int _recorder_check_and_set_attribute(recorder_h recorder, const char *attribute_name, int set_value)
+{
+       bool reset_pipeline = false;
+       bool restore_set = false;
+       int ret = MM_ERROR_NONE;
+       int ret2 = MM_ERROR_NONE;
+       int current_value = -1;
+       int current_audio_disable = 0;
+
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamcorderStateType mmstate = MM_CAMCORDER_STATE_NONE;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       mm_camcorder_get_state(handle->mm_handle, &mmstate);
+       if (mmstate >= MM_CAMCORDER_STATE_RECORDING) {
+               LOGE("invalid state %d", mmstate);
+               return RECORDER_ERROR_INVALID_STATE;
+       }
+
+       if (handle->type == _RECORDER_TYPE_AUDIO && mmstate == MM_CAMCORDER_STATE_PREPARE) {
+               mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                           MMCAM_AUDIO_DISABLE, &current_audio_disable,
+                                           attribute_name, &current_value,
+                                           NULL);
+
+               if (current_value != set_value) {
+                       LOGD("try to reset pipeline");
+
+                       ret = mm_camcorder_stop(handle->mm_handle);
+                       if (ret != MM_ERROR_NONE) {
+                               LOGE("mm_camcorder_stop failed 0x%x", ret);
+                               return __convert_recorder_error_code(attribute_name, ret);
+                       }
+
+                       ret = mm_camcorder_unrealize(handle->mm_handle);
+                       if (ret != MM_ERROR_NONE) {
+                               LOGE("mm_camcorder_unrealize failed 0x%x", ret);
+                               mm_camcorder_start(handle->mm_handle);
+                               return __convert_recorder_error_code(attribute_name, ret);
+                       }
+
+                       reset_pipeline = true;
+               }
+       }
+
+       if (!strcmp(attribute_name, MMCAM_AUDIO_ENCODER)) {
+               if (set_value == RECORDER_AUDIO_CODEC_DISABLE) {
+                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                         MMCAM_AUDIO_DISABLE, true,
+                                                         NULL);
+               } else {
+                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                         MMCAM_AUDIO_DISABLE, false,
+                                                         MMCAM_AUDIO_ENCODER, set_value,
+                                                         NULL);
+               }
+       } else {
+               ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                 attribute_name, set_value,
+                                                 NULL);
+       }
+
+       if (ret != MM_ERROR_NONE) {
+               LOGE("set [%s] failed 0x%x", attribute_name, ret);
+       }
+
+       if (reset_pipeline) {
+               ret2 = mm_camcorder_realize(handle->mm_handle);
+               if (ret2 == MM_ERROR_NONE) {
+                       ret2 = mm_camcorder_start(handle->mm_handle);
+                       if (ret2 == MM_ERROR_NONE) {
+                               LOGW("restart pipeline done.");
+                       } else {
+                               LOGE("mm_camcorder_start failed 0x%x", ret2);
+                               mm_camcorder_unrealize(handle->mm_handle);
+                       }
+               } else {
+                       LOGE("mm_camcorder_realize failed 0x%x", ret2);
+               }
+
+               if (ret2 != MM_ERROR_NONE) {
+                       restore_set = true;
+                       /* determine return value */
+                       if (ret == MM_ERROR_NONE) {
+                               ret = ret2;
+                       }
+               }
+       }
+
+       if (restore_set) {
+               ret2 = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                  MMCAM_AUDIO_DISABLE, current_audio_disable,
+                                                  attribute_name, current_value,
+                                                  NULL);
+               LOGW("restore attribute set : 0x%x", ret2);
+
+               ret2 = mm_camcorder_realize(handle->mm_handle);
+               LOGW("restore mm_camcorder_realize : 0x%x", ret2);
+
+               ret2 = mm_camcorder_start(handle->mm_handle);
+               LOGW("restore mm_camcorder_realize : 0x%x", ret2);
+               if (ret2 != MM_ERROR_NONE) {
+                       ret2 = mm_camcorder_unrealize(handle->mm_handle);
+                       LOGW("restore mm_camcorder_unrealize : 0x%x", ret2);
+               }
+       }
+
+       return __convert_recorder_error_code(attribute_name, ret);
+}
+
+
+int legacy_recorder_create_videorecorder(camera_h camera, recorder_h *recorder)
+{
+       int ret = MM_ERROR_NONE;
+       int resource_fd = -1;
+       recorder_s *handle = NULL;
+       int preview_format = MM_PIXEL_FORMAT_NV12;
+       int camera_device_count = 0;
+
+       if (camera == NULL) {
+               LOGE("NULL pointer camera handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (recorder == NULL) {
+               LOGE("NULL pointer recorder handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       /* Check already used in another recorder */
+       if (_camera_is_used(camera)) {
+               LOGE("[%s] camera is using in another recorder.", __func__);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       resource_fd = open(RECORDER_PATH_RECORDER_RESOURCE, O_RDONLY);
+       if (resource_fd < 0) {
+               LOGE("failed to open recorder resource : errno [%d]", errno);
+               if (errno == EPERM || errno == EACCES) {
+                       LOGE("permission denied");
+                       return RECORDER_ERROR_PERMISSION_DENIED;
+               } else {
+                       LOGE("invalid operation");
+                       return RECORDER_ERROR_INVALID_OPERATION;
+               }
+       }
+
+       close(resource_fd);
+       resource_fd = -1;
+
+       LOGW("permission check done");
+
+       handle = (recorder_s*)malloc( sizeof(recorder_s) );
+       if(handle == NULL){
+               LOGE("[%s] malloc error", __func__);
+               return RECORDER_ERROR_OUT_OF_MEMORY;
+       }
+
+       memset(handle, 0 , sizeof(recorder_s));
+       handle->src_type = _RECORDER_SOURCE_TYPE_CAMERA;
+       handle->last_max_input_level = LOWSET_DECIBEL;
+       handle->changed_preview_format = -1;
+       handle->mm_source.camera = camera;
+
+       _camera_get_mm_handle(camera, &handle->mm_handle);
+       _camera_set_relay_mm_message_callback(camera, __mm_recorder_msg_cb , (void*)handle);
+       handle->type = _RECORDER_TYPE_VIDEO;
+       legacy_recorder_get_state((recorder_h)handle, (recorder_state_e*)&handle->state);
+
+       mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                   MMCAM_CAMERA_FORMAT, &preview_format,
+                                   NULL);
+       handle->origin_preview_format = preview_format;
+       mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                   MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_RECORDING, &preview_format,
+                                   NULL);
+       ret = mm_camcorder_get_attributes(handle->mm_handle ,NULL,
+                                   MMCAM_CAMERA_DEVICE_COUNT, &camera_device_count,
+                                   NULL);
+       if (ret != MM_ERROR_NONE) {
+               free(handle);
+               handle = NULL;
+               LOGE("get device count error");
+               return __convert_recorder_error_code(__func__, ret);
+       }
+       if (camera_device_count == 0) {
+               free(handle);
+               handle = NULL;
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       } else {
+               handle->camera_device_count = camera_device_count;
+       }
+
+       _camera_set_use(camera, true);
+       if (handle->state == RECORDER_STATE_CREATED) {
+               ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                 MMCAM_CAMERA_FORMAT, preview_format,
+                                                 NULL);
+               if (ret == MM_ERROR_NONE) {
+                       handle->changed_preview_format = preview_format;
+               }
+       }
+       *recorder = (recorder_h)handle;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_create_audiorecorder(recorder_h *recorder)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = NULL;
+       MMCamPreset info;
+       int camera_device_count = 0;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       info.videodev_type = MM_VIDEO_DEVICE_NONE;
+
+       handle = (recorder_s *)malloc(sizeof(recorder_s));
+       if (handle == NULL) {
+               LOGE("OUT_OF_MEMORY(0x%08x)", RECORDER_ERROR_OUT_OF_MEMORY);
+               return RECORDER_ERROR_OUT_OF_MEMORY;
+       }
+
+       memset(handle, 0, sizeof(recorder_s));
+
+       handle->last_max_input_level = LOWSET_DECIBEL;
+
+       ret = mm_camcorder_create(&handle->mm_handle, &info);
+       if (ret != MM_ERROR_NONE) {
+               free(handle);
+               handle = NULL;
+               LOGE("mm_camcorder_create fail");
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
+                                         NULL);
+
+       if (ret != MM_ERROR_NONE) {
+               mm_camcorder_destroy(handle->mm_handle);
+               free(handle);
+               handle = NULL;
+               LOGE("AUDIO mode setting fail");
+               return __convert_recorder_error_code(__func__, ret);
+       }
+       ret = mm_camcorder_get_attributes(handle->mm_handle ,NULL,
+                                   MMCAM_CAMERA_DEVICE_COUNT, &camera_device_count, NULL);
+       if (ret != MM_ERROR_NONE) {
+               mm_camcorder_destroy(handle->mm_handle);
+               free(handle);
+               handle = NULL;
+               LOGE("get device count error");
+               return __convert_recorder_error_code(__func__, ret);
+       } else {
+               handle->camera_device_count = camera_device_count;
+       }
+       handle->state = RECORDER_STATE_CREATED;
+       handle->mm_source.camera = NULL;
+       handle->type = _RECORDER_TYPE_AUDIO;
+
+       mm_camcorder_set_message_callback(handle->mm_handle, __mm_recorder_msg_cb, (void*)handle);
+
+       *recorder = (recorder_h)handle;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_get_state(recorder_h recorder, recorder_state_e *state)
+{
+       int ret = MM_ERROR_NONE;
+       MMCamcorderStateType mmstate;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (state == NULL) {
+               LOGE("NULL pointer state");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       recorder_s *handle = (recorder_s*)recorder;
+
+       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
+       if (ret != MM_ERROR_NONE) {
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       *state = __recorder_state_convert(mmstate);
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_destroy(recorder_h recorder)
+{
+       recorder_s *handle = NULL;
+       int ret = MM_ERROR_NONE;
+       int preview_format;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle = (recorder_s *)recorder;
+
+       if (handle->type == _RECORDER_TYPE_VIDEO) {
+               /* set to unsed */
+               _camera_set_use(handle->mm_source.camera, false);
+               ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                                 MMCAM_CAMERA_FORMAT, &preview_format,
+                                                 NULL);
+
+               /* preview format was changed? */
+               if (ret == MM_ERROR_NONE && preview_format == handle->changed_preview_format) {
+                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                                         MMCAM_CAMERA_FORMAT, handle->origin_preview_format,
+                                                         NULL);
+               }
+
+               if (ret == MM_ERROR_NONE) {
+                       _camera_set_relay_mm_message_callback(handle->mm_source.camera, NULL, NULL);
+               }
+       } else {
+               ret = mm_camcorder_destroy(handle->mm_handle);
+       }
+
+       if (ret == MM_ERROR_NONE) {
+               free(handle);
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_prepare(recorder_h recorder)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamcorderStateType mmstate;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handle->type == _RECORDER_TYPE_VIDEO) {
+               return __convert_error_code_camera_to_recorder(legacy_camera_start_preview(handle->mm_source.camera));
+       }
+
+       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
+
+       if (ret == MM_ERROR_NONE && mmstate < MM_CAMCORDER_STATE_READY) {
+               ret = mm_camcorder_realize(handle->mm_handle);
+               if (ret != MM_ERROR_NONE) {
+                       LOGE("mm_camcorder_realize fail");
+                       return __convert_recorder_error_code(__func__, ret);
+               }
+       }
+
+       ret = mm_camcorder_start(handle->mm_handle);
+       if (ret != MM_ERROR_NONE) {
+               LOGE("mm_camcorder_start fail");
+               mm_camcorder_unrealize(handle->mm_handle);
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unprepare(recorder_h recorder)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamcorderStateType mmstate;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
+       if (ret == MM_ERROR_NONE && mmstate == MM_CAMCORDER_STATE_PREPARE) {
+               ret = mm_camcorder_stop(handle->mm_handle);
+               if( ret != MM_ERROR_NONE){
+                       LOGE("mm_camcorder_stop fail");
+               }
+       }
+
+       if (ret == MM_ERROR_NONE) {
+               ret = mm_camcorder_unrealize(handle->mm_handle);
+               if (ret != MM_ERROR_NONE) {
+                       LOGE("mm_camcorder_unrealize fail");
+                       mm_camcorder_start(handle->mm_handle);
+               }
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_start(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return __convert_recorder_error_code(__func__, mm_camcorder_record(handle->mm_handle));
+}
+
+
+int legacy_recorder_pause(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return __convert_recorder_error_code(__func__, mm_camcorder_pause(handle->mm_handle));
+}
+
+
+int legacy_recorder_commit(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return __convert_recorder_error_code(__func__, mm_camcorder_commit(handle->mm_handle));
+}
+
+
+int legacy_recorder_cancel(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return __convert_recorder_error_code(__func__, mm_camcorder_cancel(handle->mm_handle));
+}
+
+
+int legacy_recorder_set_video_resolution(recorder_h recorder, int width, int height)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s*)recorder;
+       recorder_state_e state;
+
+       if (handle == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       legacy_recorder_get_state(recorder, &state);
+       if (state > RECORDER_STATE_READY) {
+               LOGE("RECORDER_ERROR_INVALID_STATE (state:%d)", state);
+               return RECORDER_ERROR_INVALID_STATE;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_WIDTH, width,
+                                         MMCAM_VIDEO_HEIGHT, height,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_get_video_resolution(recorder_h recorder, int *width, int *height)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s*)recorder;
+
+       if (!handle) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       if (!width || !height) {
+               LOGE("NULL pointer width = [%p], height = [%p]", width, height);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_WIDTH, width,
+                                         MMCAM_VIDEO_HEIGHT, height,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_foreach_supported_video_resolution(recorder_h recorder,
+                                                recorder_supported_video_resolution_cb foreach_cb, void *user_data)
+{
+       int i = 0;
+       int ret = MM_ERROR_NONE;
+       recorder_s * handle = (recorder_s*)recorder;
+       MMCamAttrsInfo video_width;
+       MMCamAttrsInfo video_height;
+
+       if (!handle) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       if (!foreach_cb) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_WIDTH, &video_width);
+       ret |= mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_HEIGHT, &video_height);
+
+       if (ret != MM_ERROR_NONE ) {
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       for (i = 0 ; i < video_width.int_array.count ; i++) {
+               if (!foreach_cb(video_width.int_array.array[i], video_height.int_array.array[i], user_data)) {
+                       break;
+               }
+       }
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_get_audio_level(recorder_h recorder, double *level)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+       recorder_state_e state;
+
+       if (recorder == NULL || level == NULL) {
+               LOGE("NULL pointer %p %p", recorder, level);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       legacy_recorder_get_state(recorder, &state);
+       if (state < RECORDER_STATE_RECORDING) {
+               LOGE("RECORDER_ERROR_INVALID_STATE(0x%08x)", RECORDER_ERROR_INVALID_STATE);
+               return RECORDER_ERROR_INVALID_STATE;
+       }
+
+       *level = handle->last_max_input_level;
+       handle->last_max_input_level = LOWSET_DECIBEL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_set_filename(recorder_h recorder,  const char *filename)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamcorderStateType mmstate = MM_CAMCORDER_STATE_NONE;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (filename == NULL) {
+               LOGE("filename is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       mm_camcorder_get_state(handle->mm_handle, &mmstate);
+       if (mmstate >= MM_CAMCORDER_STATE_RECORDING) {
+               LOGE("invalid state %d", mmstate);
+               return RECORDER_ERROR_INVALID_STATE;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_FILENAME, filename, strlen(filename),
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_get_filename(recorder_h recorder,  char **filename)
+{
+       int ret = MM_ERROR_NONE;
+       char *record_filename = NULL;
+       int record_filename_size;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (filename == NULL) {
+               LOGE("filename is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_FILENAME, &record_filename, &record_filename_size,
+                                         NULL);
+       if (ret == MM_ERROR_NONE && record_filename) {
+               *filename = strdup(record_filename);
+       } else {
+               LOGE("internal return (0x%08x), get filename p:%p", ret, record_filename);
+               *filename = NULL;
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_set_file_format(recorder_h recorder, recorder_file_format_e format)
+{
+       int format_table[6] = { MM_FILE_FORMAT_3GP, /* RECORDER_FILE_FORMAT_3GP */
+                               MM_FILE_FORMAT_MP4, /* RECORDER_FILE_FORMAT_MP4 */
+                               MM_FILE_FORMAT_AMR, /* RECORDER_FILE_FORMAT_AMR */
+                               MM_FILE_FORMAT_AAC, /* RECORDER_FILE_FORMAT_ADTS */
+                               MM_FILE_FORMAT_WAV, /* RECORDER_FILE_FORMAT_WAV */
+                               MM_FILE_FORMAT_OGG  /* RECORDER_FILE_FORMAT_OGG */
+       };
+
+       if (format < RECORDER_FILE_FORMAT_3GP || format > RECORDER_FILE_FORMAT_OGG) {
+               LOGE("invalid format %d", format);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_FILE_FORMAT, format_table[format]);
+}
+
+
+int legacy_recorder_get_file_format(recorder_h recorder, recorder_file_format_e *format)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+       int mm_format;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (format == NULL) {
+               LOGE("format is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_FILE_FORMAT, &mm_format,
+                                         NULL);
+       if (ret == MM_ERROR_NONE) {
+               switch (mm_format) {
+               case MM_FILE_FORMAT_3GP:
+                       *format = RECORDER_FILE_FORMAT_3GP;
+                       break;
+               case MM_FILE_FORMAT_MP4 :
+                       *format = RECORDER_FILE_FORMAT_MP4;
+                       break;
+               case MM_FILE_FORMAT_AMR :
+                       *format = RECORDER_FILE_FORMAT_AMR;
+                       break;
+               case MM_FILE_FORMAT_AAC :
+                       *format = RECORDER_FILE_FORMAT_ADTS;
+                       break;
+               case MM_FILE_FORMAT_WAV:
+                       *format = RECORDER_FILE_FORMAT_WAV;
+                       break;
+               case MM_FILE_FORMAT_OGG:
+                       *format = RECORDER_FILE_FORMAT_OGG;
+                       break;
+               default :
+                       ret = MM_ERROR_CAMCORDER_INTERNAL;
+                       break;
+               }
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb callback, void* user_data)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE] = callback;
+       handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE] = user_data;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unset_state_changed_cb(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb callback, void *user_data)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED] = callback;
+       handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED] = user_data;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unset_interrupted_cb(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb callback, void* user_data)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_audio_stream_callback(handle->mm_handle, __mm_audio_stream_cb, handle);
+       if (ret == MM_ERROR_NONE){
+               handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = callback;
+               handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = user_data;
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_unset_audio_stream_cb(recorder_h recorder)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL;
+
+       ret = mm_camcorder_set_audio_stream_callback(handle->mm_handle, NULL, NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void *user_data)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_ERROR] = callback;
+       handle->user_data[_RECORDER_EVENT_TYPE_ERROR] = user_data;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unset_error_cb(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_ERROR] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_ERROR] = NULL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_status_cb callback, void* user_data)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = callback;
+       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = user_data;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unset_recording_status_cb(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_set_recording_limit_reached_cb(recorder_h recorder, recorder_recording_limit_reached_cb callback, void* user_data)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (callback == NULL) {
+               LOGE("NULL pointer callback");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = callback;
+       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = user_data;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_unset_recording_limit_reached_cb(recorder_h recorder)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL;
+       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL;
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_foreach_supported_file_format(recorder_h recorder, recorder_supported_file_format_cb foreach_cb, void *user_data)
+{
+       int i = 0;
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamAttrsInfo info;
+       int format;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (foreach_cb == NULL) {
+               LOGE("NULL pointer foreach_cb");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_FILE_FORMAT, &info);
+       if (ret != MM_ERROR_NONE) {
+               LOGE("mm_camcorder_get_attribute_info failed 0x%x", ret);
+               return __convert_recorder_error_code(__func__, ret);;
+       }
+
+       for (i = 0 ; i < info.int_array.count ; i++) {
+               switch (info.int_array.array[i]) {
+               case MM_FILE_FORMAT_3GP:
+                       format = RECORDER_FILE_FORMAT_3GP;
+                       break;
+               case MM_FILE_FORMAT_MP4 :
+                       format = RECORDER_FILE_FORMAT_MP4;
+                       break;
+               case MM_FILE_FORMAT_AMR :
+                       format = RECORDER_FILE_FORMAT_AMR;
+                       break;
+               case MM_FILE_FORMAT_AAC:
+                       format = RECORDER_FILE_FORMAT_ADTS;
+                       break;
+               case MM_FILE_FORMAT_WAV:
+                       format = RECORDER_FILE_FORMAT_WAV;
+                       break;
+               default :
+                       format = -1;
+                       break;
+               }
+
+               if (format != -1 && !foreach_cb(format,user_data)) {
+                       break;
+               }
+       }
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_attr_set_size_limit(recorder_h recorder, int kbyte)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_MAX_SIZE, kbyte,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_set_time_limit(recorder_h recorder, int second)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("NULL pointer handle");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_TIME_LIMIT, second,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_set_audio_device(recorder_h recorder, recorder_audio_device_e device)
+{
+       if (device < RECORDER_AUDIO_DEVICE_MIC || device > RECORDER_AUDIO_DEVICE_MODEM) {
+               LOGE("invalid device %d", device);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_DEVICE, device);
+}
+
+
+int legacy_recorder_set_audio_encoder(recorder_h recorder, recorder_audio_codec_e codec)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+       int audio_table[4] = { MM_AUDIO_CODEC_AMR,      /* RECORDER_AUDIO_CODEC_AMR */
+                              MM_AUDIO_CODEC_AAC,      /* RECORDER_AUDIO_CODEC_AAC */
+                              MM_AUDIO_CODEC_VORBIS,   /* RECORDER_AUDIO_CODEC_VORBIS */
+                              MM_AUDIO_CODEC_WAVE      /* RECORDER_AUDIO_CODEC_PCM */
+       };
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (codec != RECORDER_AUDIO_CODEC_DISABLE &&
+           (codec < RECORDER_AUDIO_CODEC_AMR || codec > RECORDER_AUDIO_CODEC_PCM)) {
+               LOGE("invalid parameter : codec %d", codec);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handle->type == _RECORDER_TYPE_AUDIO && codec == RECORDER_AUDIO_CODEC_DISABLE) {
+               LOGE("AUDIO_CODEC_DISABLE is not supported in audio mode");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_ENCODER, codec == RECORDER_AUDIO_CODEC_DISABLE ? RECORDER_AUDIO_CODEC_DISABLE : audio_table[codec]);
+}
+
+
+int legacy_recorder_get_audio_encoder(recorder_h recorder, recorder_audio_codec_e *codec)
+{
+       int ret = MM_ERROR_NONE;
+       int mm_codec = 0;
+       int audio_disable = 0;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (codec == NULL) {
+               LOGE("codec is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_ENCODER, &mm_codec,
+                                         MMCAM_AUDIO_DISABLE, &audio_disable,
+                                         NULL);
+
+       if (ret == MM_ERROR_NONE && audio_disable == 0) {
+               switch (mm_codec) {
+               case MM_AUDIO_CODEC_AMR :
+                       *codec = RECORDER_AUDIO_CODEC_AMR;
+                       break;
+               case MM_AUDIO_CODEC_AAC :
+                       *codec = RECORDER_AUDIO_CODEC_AAC;
+                       break;
+               case MM_AUDIO_CODEC_VORBIS:
+                       *codec = RECORDER_AUDIO_CODEC_VORBIS;
+                       break;
+               case MM_AUDIO_CODEC_WAVE:
+                       *codec = RECORDER_AUDIO_CODEC_PCM;
+                       break;
+               default :
+                       ret = MM_ERROR_CAMCORDER_INTERNAL;
+                       break;
+               }
+       } else if (ret == MM_ERROR_NONE && audio_disable) {
+               *codec = RECORDER_AUDIO_CODEC_DISABLE;
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_set_video_encoder(recorder_h recorder, recorder_video_codec_e codec)
+{
+       int ret = MM_ERROR_NONE;
+       int video_table[4] = { MM_VIDEO_CODEC_H263,     /* RECORDER_VIDEO_CODEC_H263 */
+                              MM_VIDEO_CODEC_H264,     /* RECORDER_VIDEO_CODEC_H264 */
+                              MM_VIDEO_CODEC_MPEG4,    /* RECORDER_VIDEO_CODEC_MPEG4 */
+                              MM_VIDEO_CODEC_THEORA    /* RECORDER_VIDEO_CODEC_THEORA */
+       };
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       if (codec < RECORDER_VIDEO_CODEC_H263 || codec > RECORDER_VIDEO_CODEC_THEORA) {
+               LOGE("invalid codec %d", codec);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_ENCODER, video_table[codec],
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_get_video_encoder(recorder_h recorder, recorder_video_codec_e *codec)
+{
+       int ret = MM_ERROR_NONE;
+       int mm_codec = 0;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       if (codec == NULL) {
+               LOGE("codec is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_ENCODER, &mm_codec,
+                                         NULL);
+       if (ret == MM_ERROR_NONE) {
+               switch(mm_codec) {
+               case MM_VIDEO_CODEC_H263 :
+                       *codec = RECORDER_VIDEO_CODEC_H263;
+                       break;
+               case MM_VIDEO_CODEC_H264 :
+                       *codec = RECORDER_VIDEO_CODEC_H264;
+                       break;
+               case MM_VIDEO_CODEC_MPEG4 :
+                       *codec = RECORDER_VIDEO_CODEC_MPEG4;
+                       break;
+               case MM_VIDEO_CODEC_THEORA:
+                       *codec = RECORDER_VIDEO_CODEC_THEORA;
+                       break;
+               default :
+                       ret = MM_ERROR_CAMCORDER_INTERNAL;
+                       break;
+               }
+       }
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_set_audio_samplerate(recorder_h recorder, int samplerate)
+{
+       if (samplerate < 1) {
+               LOGE("invalid samplerate %d", samplerate);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_SAMPLERATE, samplerate);
+}
+
+
+int legacy_recorder_attr_set_audio_encoder_bitrate(recorder_h recorder, int bitrate)
+{
+       if (bitrate < 1) {
+               LOGE("invalid bitrate %d", bitrate);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_ENCODER_BITRATE, bitrate);
+}
+
+
+int legacy_recorder_attr_set_video_encoder_bitrate(recorder_h recorder, int bitrate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_ENCODER_BITRATE, bitrate,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_size_limit(recorder_h recorder, int *kbyte)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_MAX_SIZE, kbyte,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_time_limit(recorder_h recorder, int *second)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TARGET_TIME_LIMIT, second,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_audio_device(recorder_h recorder, recorder_audio_device_e *device)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_DEVICE, device,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_audio_samplerate(recorder_h recorder, int *samplerate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_SAMPLERATE, samplerate,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_audio_encoder_bitrate(recorder_h recorder, int *bitrate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_ENCODER_BITRATE, bitrate,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_video_encoder_bitrate(recorder_h recorder, int *bitrate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_VIDEO_ENCODER_BITRATE, bitrate,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_foreach_supported_audio_encoder(recorder_h recorder, recorder_supported_audio_encoder_cb foreach_cb, void *user_data)
+{
+       int i = 0;
+       int ret = MM_ERROR_NONE;
+       int codec;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamAttrsInfo info;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (foreach_cb == NULL) {
+               LOGE("foreach_cb is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_AUDIO_ENCODER, &info);
+       if (ret != MM_ERROR_NONE) {
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       for (i = 0 ; i < info.int_array.count ; i++) {
+               switch (info.int_array.array[i]) {
+               case MM_AUDIO_CODEC_AMR:
+                       codec = RECORDER_AUDIO_CODEC_AMR;
+                       break;
+               case MM_AUDIO_CODEC_AAC :
+                       codec = RECORDER_AUDIO_CODEC_AAC;
+                       break;
+               case MM_AUDIO_CODEC_VORBIS:
+                       codec = RECORDER_AUDIO_CODEC_VORBIS;
+                       break;
+               case MM_AUDIO_CODEC_WAVE:
+                       codec = RECORDER_AUDIO_CODEC_PCM;
+                       break;
+               default :
+                       codec = -1;
+                       break;
+               }
+               if (codec != -1 && !foreach_cb(codec,user_data)) {
+                       break;
+               }
+       }
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_foreach_supported_video_encoder(recorder_h recorder, recorder_supported_video_encoder_cb foreach_cb, void *user_data)
+{
+       int i = 0;
+       int ret = MM_ERROR_NONE;
+       int codec;
+       recorder_s *handle = (recorder_s *)recorder;
+       MMCamAttrsInfo info;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       if (foreach_cb == NULL) {
+               LOGE("foreach_cb is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_ENCODER, &info);
+       if (ret != MM_ERROR_NONE) {
+               return __convert_recorder_error_code(__func__, ret);
+       }
+
+       for (i = 0 ; i < info.int_array.count ; i++) {
+               switch (info.int_array.array[i]){
+               case MM_VIDEO_CODEC_H263 :
+                       codec = RECORDER_VIDEO_CODEC_H263;
+                       break;
+               case MM_VIDEO_CODEC_H264 :
+                       codec = RECORDER_VIDEO_CODEC_H264;
+                       break;
+               case MM_VIDEO_CODEC_MPEG4 :
+                       codec = RECORDER_VIDEO_CODEC_MPEG4;
+                       break;
+               case MM_VIDEO_CODEC_THEORA :
+                       codec = RECORDER_VIDEO_CODEC_THEORA;
+                       break;
+               default :
+                       codec = -1;
+                       break;
+               }
+
+               if (codec != -1 && !foreach_cb(codec,user_data)) {
+                       break;
+               }
+       }
+
+       return RECORDER_ERROR_NONE;
+}
+
+
+int legacy_recorder_attr_set_mute(recorder_h recorder, bool enable)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_VOLUME, enable ? 0.0 : 1.0,
+                                         NULL);
+
+       return  __convert_recorder_error_code(__func__, ret);
+}
+
+
+bool legacy_recorder_attr_is_muted(recorder_h recorder)
+{
+       int ret = MM_ERROR_NONE;
+       double volume = 1.0;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return false;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_VOLUME, &volume,
+                                         NULL);
+
+       set_last_result(__convert_recorder_error_code(__func__, ret));
+
+       if (volume == 0.0) {
+               return true;
+       } else {
+               return false;
+       }
+}
+
+
+int legacy_recorder_attr_set_recording_motion_rate(recorder_h recorder, double rate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_CAMERA_RECORDING_MOTION_RATE, rate,
+                                         NULL);
+
+       return  __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_get_recording_motion_rate(recorder_h recorder, double *rate)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       if (rate == NULL) {
+               LOGE("rate is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_CAMERA_RECORDING_MOTION_RATE, rate,
+                                         NULL);
+
+       return  __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_set_audio_channel(recorder_h recorder, int channel_count)
+{
+       if (channel_count < 1) {
+               LOGE("invalid channel %d", channel_count);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_CHANNEL, channel_count);
+}
+
+
+int legacy_recorder_attr_get_audio_channel(recorder_h recorder, int *channel_count)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (recorder == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (channel_count == NULL) {
+               LOGE("channel_count is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_AUDIO_CHANNEL, channel_count,
+                                         NULL);
+
+       return  __convert_recorder_error_code(__func__, ret);
+}
+
+
+int legacy_recorder_attr_set_orientation_tag(recorder_h recorder, recorder_rotation_e orientation)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       if (orientation > RECORDER_ROTATION_270) {
+               LOGE("invalid orientation %d", orientation);
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+                                         MMCAM_RECORDER_TAG_ENABLE, true,
+                                         MMCAM_TAG_VIDEO_ORIENTATION, orientation,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
+
+
+int  legacy_recorder_attr_get_orientation_tag(recorder_h recorder, recorder_rotation_e *orientation)
+{
+       int ret = MM_ERROR_NONE;
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (handle == NULL) {
+               LOGE("handle is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+       if (handle->camera_device_count == 0) {
+               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
+               return RECORDER_ERROR_NOT_SUPPORTED;
+       }
+       if (orientation == NULL) {
+               LOGE("orientation is NULL");
+               return RECORDER_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+                                         MMCAM_TAG_VIDEO_ORIENTATION, orientation,
+                                         NULL);
+
+       return __convert_recorder_error_code(__func__, ret);
+}
index 616b1833230109de513decead102f472eec3a304..f138452603196f2681870a5dd670e8b2e5615e45 100644 (file)
@@ -2,7 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 SET(service "muse")
 SET(submodule "recorder")
 
-SET(dependents "dlog mused mm-common glib-2.0 mmsvc-camera capi-media-audio-io audio-session-mgr")
+SET(dependents "dlog mused mm-common glib-2.0 capi-media-audio-io audio-session-mgr")
 SET(pc_dependents "dlog capi-media-audio-io")
 SET(fw_name "${service}-${submodule}")
 PROJECT(${fw_name})
@@ -35,7 +35,7 @@ aux_source_directory(src MUSED_SOURCES)
 ADD_LIBRARY(${fw_name} SHARED ${MUSED_SOURCES})
 
 
-TARGET_LINK_LIBRARIES(${fw_name} mmsvc-recorder ${${fw_name}_LDFLAGS})
+TARGET_LINK_LIBRARIES(${fw_name} legacy-recorder ${${fw_name}_LDFLAGS})
 
 SET_TARGET_PROPERTIES(${fw_name}
      PROPERTIES
@@ -56,10 +56,3 @@ SET(PC_NAME ${fw_name})
 SET(PC_REQUIRED ${pc_dependents})
 SET(PC_LDFLAGS -l${fw_name})
 SET(PC_CFLAGS -I\${includedir}/media)
-
-CONFIGURE_FILE(
-    ${fw_name}.pc.in
-    ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc
-    @ONLY
-)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
index d1784c28dae075acb5630484000ff76da9cbe847..8b57b1e669d058c4c59e3ecb4ce3c957f8ba30ee 100644 (file)
 extern "C" {
 #endif
 
+/**
+  * @file muse_recorder.h
+  * @brief This file contains the muse recorder API for framework, related structures and enumerations.
+  */
+
 #include "tbm_bufmgr.h"
 #include <stdbool.h>
 #include <stdio.h>
 
+/**
+ * @brief Enumeration for the muse recorder apis.
+ */
 typedef enum {
        MUSE_RECORDER_API_CREATE, //0
        MUSE_RECORDER_API_DESTROY,
@@ -85,6 +93,9 @@ typedef enum {
        MUSE_RECORDER_API_MAX //56
 } muse_recorder_api_e;
 
+/**
+ * @brief Enumeration for the muse recorder events.
+ */
 typedef enum {
        MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE,
        MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED,
@@ -99,23 +110,32 @@ typedef enum {
        MUSE_RECORDER_EVENT_TYPE_NUM
 }muse_recorder_event_e;
 
+/**
+ * @brief The structure type for muse camera errors.
+ */
 typedef enum {
        MUSE_RECORDER_ERROR_INVALID = -1,
        MUSE_RECORDER_ERROR_NONE = 1,
 } muse_recorder_error_e;
 
+/**
+ * @brief The structure type for muse recorder type.
+ */
 typedef enum {
        MUSE_RECORDER_TYPE_AUDIO = 0,
        MUSE_RECORDER_TYPE_VIDEO
 }muse_recorder_type_e;
 
+/**
+ * @brief The structure type for muse recorder source type.
+ */
 typedef enum {
        MUSE_RECORDER_SOURCE_TYPE_UNKNOWN,
        MUSE_RECORDER_SOURCE_TYPE_CAMERA,
 }muse_recorder_source_type_e;
 
 /**
- * @brief The structure type for data transport
+ * @brief The structure type for data transport for the muse recorder.
  */
 typedef struct {
        int data_size;
@@ -125,18 +145,61 @@ typedef struct {
        tbm_bufmgr bufmgr;
 } muse_recorder_transport_info_s;
 
+/**
+ * @brief The structure type for the userdata, registering into the daemon core.
+ */
 typedef struct {
        tbm_bufmgr bufmgr;
 } muse_recorder_info_s;
 
+/**
+ * @brief Definition for the callback event id.
+ */
 #define MUSE_RECORDER_CB_EVENT MUSE_RECORDER_API_MAX + 1
+
+/**
+ * @brief Definition for the max message length.
+ */
 #define MUSE_RECORDER_MSG_MAX_LENGTH           256
-#define MUSE_RECORDER_PARSE_STRING_SIZE                200
 
+/**
+ * @brief Definition for the wait time of the ipc callback.
+ */
+#define CALLBACK_TIME_OUT 3
+
+/*
+ * @brief Makes the tbm buffer object, and set to the muse recorder structure.
+ * @param[out] transport_info The allocated structure, tbm bo will be set in here.
+ * @return TRUE on success, otherwise a FALSE value
+ */
 bool muse_recorder_ipc_make_tbm(muse_recorder_transport_info_s *transport_info);
+
+/**
+ * @brief Exports the tbm buffer object, another process can import this bo.
+ * @param[in] transport_info Using transport_info.bo to export.
+ * @return TBM gem name on success, otherwise a negative error value
+ */
 int muse_recorder_ipc_export_tbm(muse_recorder_transport_info_s transport_info);
+
+/**
+ * @brief Initialize the tbm buffer manager, mainly at the client side.
+ * @param[out] transport_info The allocated structure, tbm bufmgr will be set in here.
+ * @return TRUE on success, otherwise a FALSE value
+ */
 bool muse_recorder_ipc_init_tbm(muse_recorder_transport_info_s *transport_info);
+
+/**
+ * @brief Imports the tbm buffer object.
+ * @param[out] transport_info Set the transport_info.bo.
+ * @return TRUE on success, otherwise a FALSE value
+ */
 int muse_recorder_ipc_import_tbm(muse_recorder_transport_info_s *transport_info);
+
+/**
+ * @brief Unreference the tbm buffer object.
+ * @param[in] transport_info Using the transport_info.bo.
+ * @return TRUE on success, otherwise a FALSE value
+ */
 void muse_recorder_ipc_unref_tbm(muse_recorder_transport_info_s *transport_info);
 
 #ifdef __cplusplus
index a159fba322989f418f29a944a21e7f52bf667294..7e87b2d8b982d1a73c3f915c16bd84b29a26361f 100644 (file)
@@ -23,39 +23,130 @@ extern "C" {
 
 #include "muse_core_msg_json.h"
 
+/**
+ * @file muse_recorder_msg.h
+ * @brief This file contains the muse_camera message APIs, related structures, defines and macros.
+ */
+
+/**
+ * @brief Definition for the handle parameter.
+ */
 #define PARAM_HANDLE                   "handle"
+
+/**
+ * @brief Definition for the ret parameter.
+ */
 #define PARAM_RET                              "ret"
+
+/**
+ * @brief Definition for the event parameter.
+ */
 #define PARAM_EVENT                    "event"
+
+/**
+ * @brief Definition for the error parameter.
+ */
 #define PARAM_ERROR                    "error"
+
+/**
+ * @brief Definition for the tbm key parameter.
+ */
 #define PARAM_TBM_KEY                  "t_key"
+
+/**
+ * @brief Definition for the display mode parameter.
+ */
 #define PARAM_DISPLAY_MODE     "display_mode"
+
+/**
+ * @brief Definition for the device type parameter.
+ */
 #define PARAM_DEVICE_TYPE              "device_type"
-#define PARAM_RECORDER_TYPE    "recorder_type"
-#define PARAM_CAMERA_HANDLE    "camera_handle"
 
-#define CALLBACK_TIME_OUT 3
+/**
+ * @brief Definition for the recorder type parameter audio/video
+ */
+ #define PARAM_RECORDER_TYPE   "recorder_type"
 
+/**
+ * @brief Definition for the camera handle ipc parameter
+ */
+#define PARAM_CAMERA_HANDLE    "camera_handle"
+
+/**
+ * @brief Definition for the INTEGER type.
+ */
 typedef int32_t INT;
+
+/**
+ * @brief Definition for the 64 bit INTEGER type.
+ */
 typedef int64_t INT64;
+
+/**
+ * @brief Definition for the 64 bit integer pointer type.
+ */
 typedef intptr_t POINTER;
+
+/**
+ * @brief Definition for the 64 bit DOUBLE type.
+ */
 typedef double DOUBLE;
+
+/**
+ * @brief Definition for the 64 bit STRING type.
+ */
 typedef const char* STRING;
 
+/**
+ * @brief Query the specific value from the input message via ipc.
+ * @param[in] param The key to query, the variable name should be matched to the message's one.
+ * @param[out] buf The string of message buffer.
+ */
 #define muse_recorder_msg_get(param, buf) \
        muse_core_msg_json_deserialize(#param, buf, NULL, &param, NULL, MUSE_TYPE_ANY)
 
+/**
+ * @brief Query the specific string type value from the input message via ipc.
+ * @param[in] param The key to query, the variable name should be matched to the message's one.
+ * @param[out] buf The string of message buffer.
+ */
 #define muse_recorder_msg_get_string(param, buf) \
        muse_core_msg_json_deserialize(#param, buf, NULL, param, NULL, MUSE_TYPE_STRING)
 
+/**
+ * @brief Query the specific array type value from the input message via ipc.
+ * @param[in] param The key to query, the variable name should be matched to the message's one.
+ * @param[out] buf The string of message buffer.
+ */
 #define muse_recorder_msg_get_array(param, buf) \
        muse_core_msg_json_deserialize(#param, buf, NULL, param, NULL, MUSE_TYPE_ARRAY)
 
+/**
+ * @brief Query the specific pointer type value from the input message via ipc.
+ * @param[in] param The key to query, the variable name should be matched to the message's one.
+ * @param[out] buf The string of message buffer.
+ */
 #define muse_recorder_msg_get_pointer(param, buf) \
        muse_core_msg_json_deserialize(#param, buf, NULL, &param, NULL, MUSE_TYPE_POINTER)
 
+
+/**
+ * @brief Query the specific value with error return from the input message via ipc.
+ * @param[in] param The key to query, the variable name should be matched to the message's one.
+ * @param[out] buf The string of message buffer.
+ * @param[out] e The error return from the core api.
+ */
 #define muse_recorder_msg_get_error_e(param, buf, e) \
        muse_core_msg_json_deserialize(#param, buf, NULL, &param, &e, MUSE_TYPE_ANY)
 
+/**
+ * @brief Send the message from proxy to module via ipc.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[in] fd The socket fd that connected to the module via ipc.
+ * @param[in] cb_info The callback information, waiting for the ack from the module.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ */
 #define muse_recorder_msg_send(api, fd, cb_info, ret) \
        do{     \
                char *__sndMsg__; \
@@ -73,6 +164,16 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+
+/**
+ * @brief Send the message from proxy to module via ipc, adding 1 more parameter.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[in] fd The socket fd that connected to the module via ipc.
+ * @param[in] cb_info The callback information, waiting for the ack from the module.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] type The data type of the parameter.
+ * @param[in] param A single parameter to be included in the message.
+ */
 #define muse_recorder_msg_send1(api, fd, cb_info, ret, type, param) \
        do{     \
                char *__sndMsg__; \
@@ -90,6 +191,17 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Send the message from proxy to module via ipc, adding 2 more parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[in] fd The socket fd that connected to the module via ipc.
+ * @param[in] cb_info The callback information, waiting for the ack from the module.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] type1 The data type of the parameter.
+ * @param[in] param1 The first parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ */
 #define muse_recorder_msg_send2(api, fd, cb_info, ret, type1, param1, type2, param2) \
        do{     \
                char *__sndMsg__; \
@@ -109,6 +221,17 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+
+/**
+ * @brief Send the message from proxy to module via ipc, adding an array data.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[in] fd The socket fd that connected to the module via ipc.
+ * @param[in] cb_info The callback information, waiting for the ack from the module.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] param The array data parameter to be included in the message.
+ * @param[in] length The length of the array.
+ * @param[in] datum_size The size of the array.
+ */
 #define muse_recorder_msg_send_array(api, fd, cb_info, ret, param, length, datum_size) \
        do{     \
                char *__sndMsg__; \
@@ -130,40 +253,12 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
-#define muse_recorder_msg_send1_async(api, fd, type, param) \
-       do{     \
-               char *__sndMsg__; \
-               int __len__; \
-               type __value__ = (type)param; \
-               __sndMsg__ = muse_core_msg_json_factory_new(api, \
-                               MUSE_TYPE_##type, #param, __value__, \
-                               0); \
-               __len__ = muse_core_ipc_send_msg(fd, __sndMsg__); \
-               muse_core_msg_json_factory_free(__sndMsg__); \
-               if (__len__ <= 0) { \
-                       LOGE("sending message failed"); \
-                       return RECORDER_ERROR_INVALID_OPERATION; \
-               } \
-       }while(0)
-
-#define muse_recorder_msg_send2_async(api, fd, type1, param1, type2, param2) \
-       do{     \
-               char *__sndMsg__; \
-               int __len__; \
-               type1 __value1__ = (type1)param1; \
-               type2 __value2__ = (type2)param2; \
-               __sndMsg__ = muse_core_msg_json_factory_new(api, \
-                               MUSE_TYPE_##type1, #param1, __value1__, \
-                               MUSE_TYPE_##type2, #param2, __value2__, \
-                               0); \
-               __len__ = muse_core_ipc_send_msg(fd, __sndMsg__); \
-               muse_core_msg_json_factory_free(__sndMsg__); \
-               if (__len__ <= 0) { \
-                       LOGE("sending message failed"); \
-                       return RECORDER_ERROR_INVALID_OPERATION; \
-               } \
-       }while(0)
-
+/**
+ * @brief Returning the ack message from the server to client side.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ */
 #define muse_recorder_msg_return(api, ret, module) \
        do{     \
                char *__sndMsg__; \
@@ -179,6 +274,14 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the ack message from the server to client side.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] type The data type of the parameter.
+ * @param[in] param A parameter to be included in the message.
+ */
 #define muse_recorder_msg_return1(api, ret, module, type, param) \
        do{     \
                char *__sndMsg__; \
@@ -196,6 +299,16 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the ack message from the server to client side, adding 2 parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] type1 The data type of the parameter.
+ * @param[in] param1 The 1st parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ */
 #define muse_recorder_msg_return2(api, ret, module, type1, param1, type2, param2) \
        do{     \
                char *__sndMsg__; \
@@ -215,6 +328,18 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the ack message from the server to client side, adding 3 parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] type1 The data type of the parameter.
+ * @param[in] param1 The 1st parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ * @param[in] type3 The data type of the parameter.
+ * @param[in] param3 The 3rd parameter to be included in the message.
+ */
 #define muse_recorder_msg_return3(api, ret, module, type1, param1, type2, param2, type3, param3) \
        do{     \
                char *__sndMsg__; \
@@ -236,6 +361,15 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the ack message from the server to client side, adding array parameter.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] param The array data parameter to be included in the message.
+ * @param[in] length The length of the array.
+ * @param[in] datum_size The size of the array.
+ */
 #define muse_recorder_msg_return_array(api, ret, module, param, length, datum_size) \
        do{     \
                char *__sndMsg__; \
@@ -257,6 +391,12 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the event ack message from the server to client side.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ */
 #define muse_recorder_msg_event(api, event, fd) \
        do{     \
                char *__sndMsg__; \
@@ -267,6 +407,14 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the event ack message from the server to client side, adding a parameter.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] type The data type of the parameter.
+ * @param[in] param A parameter to be included in the message.
+ */
 #define muse_recorder_msg_event1(api, event, module, type, param) \
        do{     \
                char *__sndMsg__; \
@@ -279,6 +427,15 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the event ack message from the server to client side, adding 2 parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] param1 The 1st parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ */
 #define muse_recorder_msg_event2(api, event, module, type1, param1, type2, param2) \
        do{     \
                char *__sndMsg__; \
@@ -293,6 +450,17 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
+/**
+ * @brief Returning the event ack message from the server to client side, adding 3 parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] param1 The 1st parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ * @param[in] type3 The data type of the parameter.
+ * @param[in] param3 The 3rd parameter to be included in the message.
+ */
 #define muse_recorder_msg_event3(api, event, module, type1, param1, type2, param2, type3, param3) \
        do{     \
                char *__sndMsg__; \
@@ -309,24 +477,21 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
-#define muse_recorder_msg_event4(api, event, module, type1, param1, type2, param2, type3, param3, type4, param4) \
-       do{     \
-               char *__sndMsg__; \
-               type1 __value1__ = (type1)param1; \
-               type2 __value2__ = (type2)param2; \
-               type3 __value3__ = (type3)param3; \
-               type4 __value4__ = (type4)param4; \
-               __sndMsg__ = muse_core_msg_json_factory_new(api, \
-                               MUSE_TYPE_INT, PARAM_EVENT, event, \
-                               MUSE_TYPE_##type1, #param1, __value1__, \
-                               MUSE_TYPE_##type2, #param2, __value2__, \
-                               MUSE_TYPE_##type3, #param3, __value3__, \
-                               MUSE_TYPE_##type4, #param4, __value4__, \
-                               0); \
-               muse_core_ipc_send_msg(muse_core_client_get_msg_fd(module), __sndMsg__); \
-               muse_core_msg_json_factory_free(__sndMsg__); \
-       }while(0)
-
+/**
+ * @brief Returning the event ack message from the server to client side, adding 5 parameters.
+ * @param[in] api The enumeration of the corresponding api.
+ * @param[out] ret The delivered return value from the module to proxy side.
+ * @param[in] module The module info for the ipc transportation.
+ * @param[in] param1 The 1st parameter to be included in the message.
+ * @param[in] type2 The data type of the parameter.
+ * @param[in] param2 The 2nd parameter to be included in the message.
+ * @param[in] type3 The data type of the parameter.
+ * @param[in] param3 The 3rd parameter to be included in the message.
+ * @param[in] type4 The data type of the parameter.
+ * @param[in] param4 The 4th parameter to be included in the message.
+ * @param[in] type5 The data type of the parameter.
+ * @param[in] param5 The 5th parameter to be included in the message.
+ */
 #define muse_recorder_msg_event5(api, event, module, type1, param1, type2, param2, type3, param3, type4, param4, type5, param5) \
        do{     \
                char *__sndMsg__; \
@@ -347,54 +512,6 @@ typedef const char* STRING;
                muse_core_msg_json_factory_free(__sndMsg__); \
        }while(0)
 
-#define muse_recorder_msg_event2_array(api, event, module, type1, param1, type2, param2, arr_param, length, datum_size) \
-       do{     \
-               char *__sndMsg__; \
-               type1 __value1__ = (type1)param1; \
-               type2 __value2__ = (type2)param2; \
-               int *__arr_value__ = (int *)arr_param; \
-               __sndMsg__ = muse_core_msg_json_factory_new(api, \
-                               MUSE_TYPE_INT, PARAM_EVENT, event, \
-                               MUSE_TYPE_##type1, #param1, __value1__, \
-                               MUSE_TYPE_##type2, #param2, __value2__, \
-                               MUSE_TYPE_INT, #length, length, \
-                               MUSE_TYPE_ARRAY, #arr_param, \
-                                       datum_size == sizeof(int)? length :  \
-                                       length / sizeof(int) + (length % sizeof(int)?1:0), \
-                                       __arr_value__, \
-                               0); \
-               muse_core_ipc_send_msg(muse_core_client_get_msg_fd(module), __sndMsg__); \
-               muse_core_msg_json_factory_free(__sndMsg__); \
-       }while(0)
-
-#define muse_recorder_msg_event6_array(api, event, client, type1, param1, type2, param2, type3, param3, type4, param4, type5, param5, type6, param6, arr_param, length, datum_size) \
-       do{     \
-               char *__sndMsg__; \
-               type1 __value1__ = (type1)param1; \
-               type2 __value2__ = (type2)param2; \
-               type3 __value3__ = (type3)param3; \
-               type4 __value4__ = (type4)param4; \
-               type5 __value5__ = (type5)param5; \
-               type6 __value6__ = (type6)param6; \
-               int *__arr_value__ = (int *)arr_param; \
-               __sndMsg__ = muse_core_msg_json_factory_new(api, \
-                               MUSE_TYPE_INT, PARAM_EVENT, event, \
-                               MUSE_TYPE_##type1, #param1, __value1__, \
-                               MUSE_TYPE_##type2, #param2, __value2__, \
-                               MUSE_TYPE_##type3, #param3, __value3__, \
-                               MUSE_TYPE_##type4, #param4, __value4__, \
-                               MUSE_TYPE_##type5, #param5, __value5__, \
-                               MUSE_TYPE_##type6, #param6, __value6__, \
-                               MUSE_TYPE_INT, #length, length, \
-                               MUSE_TYPE_ARRAY, #arr_param, \
-                                       datum_size == sizeof(int)? length :  \
-                                       length / sizeof(int) + (length % sizeof(int)?1:0), \
-                                       __arr_value__, \
-                               0); \
-               muse_core_ipc_send_msg(muse_core_client_get_msg_fd(module), __sndMsg__); \
-               muse_core_msg_json_factory_free(__sndMsg__); \
-       }while(0)
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/muse/muse-recorder.pc.in b/muse/muse-recorder.pc.in
deleted file mode 100644 (file)
index 1508489..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-# Package Information for pkg-config
-
-prefix=@PREFIX@
-exec_prefix=/usr
-libdir=@LIB_INSTALL_DIR@
-includedir=/usr/include/media
-
-Name: @PC_NAME@
-Description: @PACKAGE_DESCRIPTION@
-Version: @VERSION@
-Requires: @PC_REQUIRED@
-Libs: -L${libdir} @PC_LDFLAGS@
-Cflags: -I${includedir}
-
index b8c080953d68b3402034eca84bb30cd56fe866a9..5338291e81bd745612b6fb93eb2a0684bb00d9c0 100644 (file)
@@ -26,7 +26,7 @@
 #include "muse_core.h"
 #include "muse_core_ipc.h"
 #include "mm_types.h"
-#include "mmsvc_recorder.h"
+#include "legacy_recorder.h"
 #include <dlog.h>
 
 #ifdef LOG_TAG
@@ -34,7 +34,7 @@
 #endif
 #define LOG_TAG "MMSVC_RECORDER"
 
-void _mmsvc_recorder_disp_recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
+void _recorder_disp_recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
@@ -47,7 +47,7 @@ void _mmsvc_recorder_disp_recording_limit_reached_cb(recorder_recording_limit_ty
        return;
 }
 
-void _mmsvc_recorder_disp_recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
+void _recorder_disp_recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
@@ -62,7 +62,7 @@ void _mmsvc_recorder_disp_recording_status_cb(unsigned long long elapsed_time, u
        return;
 }
 
-void _mmsvc_recorder_disp_state_changed_cb(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data)
+void _recorder_disp_state_changed_cb(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
@@ -79,7 +79,7 @@ void _mmsvc_recorder_disp_state_changed_cb(recorder_state_e previous , recorder_
        return;
 }
 
-void _mmsvc_recorder_disp_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *user_data)
+void _recorder_disp_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
@@ -96,7 +96,7 @@ void _mmsvc_recorder_disp_interrupted_cb(recorder_policy_e policy, recorder_stat
        return;
 }
 
-void _mmsvc_recorder_disp_error_cb(recorder_error_e error, recorder_state_e current_state, void *user_data)
+void _recorder_disp_error_cb(recorder_error_e error, recorder_state_e current_state, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        int cb_error = (int)error;
@@ -111,7 +111,7 @@ void _mmsvc_recorder_disp_error_cb(recorder_error_e error, recorder_state_e curr
        return;
 }
 
-void _mmsvc_recorder_disp_audio_stream_cb(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data)
+void _recorder_disp_audio_stream_cb(void* stream, int size, audio_sample_type_e format, int channel, unsigned int timestamp, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        int cb_size = size;
@@ -156,7 +156,7 @@ void _mmsvc_recorder_disp_audio_stream_cb(void* stream, int size, audio_sample_t
        return;
 }
 
-void _mmsvc_recorder_disp_foreach_supported_video_resolution_cb(int width, int height, void *user_data)
+void _recorder_disp_foreach_supported_video_resolution_cb(int width, int height, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        LOGD("Enter");
@@ -169,7 +169,7 @@ void _mmsvc_recorder_disp_foreach_supported_video_resolution_cb(int width, int h
        return;
 }
 
-void _mmsvc_recorder_disp_foreach_supported_file_format_cb(recorder_file_format_e format, void *user_data)
+void _recorder_disp_foreach_supported_file_format_cb(recorder_file_format_e format, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        int cb_format = (int)format;
@@ -182,7 +182,7 @@ void _mmsvc_recorder_disp_foreach_supported_file_format_cb(recorder_file_format_
        return;
 }
 
-void _mmsvc_recorder_disp_foreach_supported_audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
+void _recorder_disp_foreach_supported_audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        int cb_codec = (int)codec;
@@ -195,7 +195,7 @@ void _mmsvc_recorder_disp_foreach_supported_audio_encoder_cb(recorder_audio_code
        return;
 }
 
-void _mmsvc_recorder_disp_foreach_supported_video_encoder_cb(recorder_video_codec_e codec, void *user_data)
+void _recorder_disp_foreach_supported_video_encoder_cb(recorder_video_codec_e codec, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
        int cb_codec = (int)codec;
@@ -223,10 +223,10 @@ int recorder_dispatcher_create(muse_module_h module)
        if (recorder_type == MUSE_RECORDER_TYPE_VIDEO) {
                muse_recorder_msg_get_pointer(camera_handle, muse_core_client_get_msg(module));
                LOGD("video type, camera handle : 0x%x", camera_handle);
-               ret = mmsvc_recorder_create_videorecorder((camera_h)camera_handle, &recorder);
+               ret = legacy_recorder_create_videorecorder((camera_h)camera_handle, &recorder);
        } else if (recorder_type == MUSE_RECORDER_TYPE_AUDIO) {
                LOGD("audio type");
-               ret = mmsvc_recorder_create_audiorecorder(&recorder);
+               ret = legacy_recorder_create_audiorecorder(&recorder);
        }
 
        if (ret == RECORDER_ERROR_NONE) {
@@ -241,7 +241,7 @@ int recorder_dispatcher_create(muse_module_h module)
                        recorder_data->bufmgr = bufmgr;
                        muse_core_client_set_cust_data(module, (void *)recorder_data);
                } else {
-                       LOGE("TBM bufmgr is NULL => check the mmsvc_core.");
+                       LOGE("TBM bufmgr is NULL => check the legacy_core.");
                }
                muse_recorder_msg_return1(api, ret, module, POINTER, handle);
        } else {
@@ -258,7 +258,7 @@ int recorder_dispatcher_destroy(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_DESTROY;
        muse_recorder_info_s *recorder_data;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_destroy((recorder_h)handle);
+       ret = legacy_recorder_destroy((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -280,7 +280,7 @@ int recorder_dispatcher_get_state(muse_module_h module)
        int get_state;
 
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_state((recorder_h)handle, &state);
+       ret = legacy_recorder_get_state((recorder_h)handle, &state);
        get_state = (int)state;
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_state);
@@ -294,7 +294,7 @@ int recorder_dispatcher_prepare(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_PREPARE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_prepare((recorder_h)handle);
+       ret = legacy_recorder_prepare((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -307,7 +307,7 @@ int recorder_dispatcher_unprepare(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNPREPARE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unprepare((recorder_h)handle);
+       ret = legacy_recorder_unprepare((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -320,7 +320,7 @@ int recorder_dispatcher_start(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_START;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_start((recorder_h)handle);
+       ret = legacy_recorder_start((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -333,7 +333,7 @@ int recorder_dispatcher_pause(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_PAUSE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_pause((recorder_h)handle);
+       ret = legacy_recorder_pause((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -346,7 +346,7 @@ int recorder_dispatcher_commit(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_COMMIT;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_commit((recorder_h)handle);
+       ret = legacy_recorder_commit((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -359,7 +359,7 @@ int recorder_dispatcher_cancel(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_CANCEL;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_cancel((recorder_h)handle);
+       ret = legacy_recorder_cancel((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -376,7 +376,7 @@ int recorder_dispatcher_set_video_resolution(muse_module_h module)
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(width, muse_core_client_get_msg(module));
        muse_recorder_msg_get(height, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_set_video_resolution((recorder_h)handle, width, height);
+       ret = legacy_recorder_set_video_resolution((recorder_h)handle, width, height);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -391,7 +391,7 @@ int recorder_dispatcher_get_video_resolution(muse_module_h module)
        int get_height;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_VIDEO_RESOLUTION;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_video_resolution((recorder_h)handle, &get_width, &get_height);
+       ret = legacy_recorder_get_video_resolution((recorder_h)handle, &get_width, &get_height);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return2(api,
                                                                ret,
@@ -408,8 +408,8 @@ int recorder_dispatcher_foreach_supported_video_resolution(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_RESOLUTION;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_foreach_supported_video_resolution((recorder_h)handle,
-                                                       (recorder_supported_video_resolution_cb)_mmsvc_recorder_disp_foreach_supported_video_resolution_cb,
+       ret = legacy_recorder_foreach_supported_video_resolution((recorder_h)handle,
+                                                       (recorder_supported_video_resolution_cb)_recorder_disp_foreach_supported_video_resolution_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -424,7 +424,7 @@ int recorder_dispatcher_get_audio_level(muse_module_h module)
        double get_level;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_AUDIO_LEVEL;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_audio_level((recorder_h)handle, &get_level);
+       ret = legacy_recorder_get_audio_level((recorder_h)handle, &get_level);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api,
                                                                ret,
@@ -442,7 +442,7 @@ int recorder_dispatcher_set_filename(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_FILENAME;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get_string(filename, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_set_filename((recorder_h)handle, filename);
+       ret = legacy_recorder_set_filename((recorder_h)handle, filename);
        LOGD("handle : 0x%x, filename : %s", handle, filename);
        muse_recorder_msg_return(api, ret, module);
 
@@ -456,7 +456,7 @@ int recorder_dispatcher_get_filename(muse_module_h module)
        char *get_filename;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_FILENAME;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_filename((recorder_h)handle, &get_filename);
+       ret = legacy_recorder_get_filename((recorder_h)handle, &get_filename);
        LOGD("handle : 0x%x, filename : %s", handle, get_filename);
        muse_recorder_msg_return1(api, ret, module, STRING, get_filename);
 
@@ -471,7 +471,7 @@ int recorder_dispatcher_set_file_format(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_FILE_FORMAT;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_format, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_set_file_format((recorder_h)handle, (recorder_file_format_e)set_format);
+       ret = legacy_recorder_set_file_format((recorder_h)handle, (recorder_file_format_e)set_format);
        LOGD("handle : 0x%x, set_format : %d", handle, set_format);
        muse_recorder_msg_return(api, ret, module);
 
@@ -486,7 +486,7 @@ int recorder_dispatcher_get_file_format(muse_module_h module)
        int get_format;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_FILE_FORMAT;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_file_format((recorder_h)handle, &format);
+       ret = legacy_recorder_get_file_format((recorder_h)handle, &format);
        get_format = (int)format;
        LOGD("handle : 0x%x, get_format : %d", handle, get_format);
        muse_recorder_msg_return1(api, ret, module, INT, get_format);
@@ -500,8 +500,8 @@ int recorder_dispatcher_set_state_changed_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_STATE_CHANGED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_state_changed_cb((recorder_h)handle,
-                                                       (recorder_state_changed_cb)_mmsvc_recorder_disp_state_changed_cb,
+       ret = legacy_recorder_set_state_changed_cb((recorder_h)handle,
+                                                       (recorder_state_changed_cb)_recorder_disp_state_changed_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -515,7 +515,7 @@ int recorder_dispatcher_unset_state_changed_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_STATE_CHANGED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_state_changed_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_state_changed_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -528,8 +528,8 @@ int recorder_dispatcher_set_interrupted_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_INTERRUPTED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_interrupted_cb((recorder_h)handle,
-                                                       (recorder_interrupted_cb)_mmsvc_recorder_disp_interrupted_cb,
+       ret = legacy_recorder_set_interrupted_cb((recorder_h)handle,
+                                                       (recorder_interrupted_cb)_recorder_disp_interrupted_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -543,7 +543,7 @@ int recorder_dispatcher_unset_interrupted_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_INTERRUPTED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_interrupted_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_interrupted_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -556,8 +556,8 @@ int recorder_dispatcher_set_audio_stream_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_AUDIO_STREAM_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_audio_stream_cb((recorder_h)handle,
-                                                       (recorder_audio_stream_cb)_mmsvc_recorder_disp_audio_stream_cb,
+       ret = legacy_recorder_set_audio_stream_cb((recorder_h)handle,
+                                                       (recorder_audio_stream_cb)_recorder_disp_audio_stream_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -571,7 +571,7 @@ int recorder_dispatcher_unset_audio_stream_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_AUDIO_STREAM_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_audio_stream_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_audio_stream_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -584,8 +584,8 @@ int recorder_dispatcher_set_error_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_ERROR_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_error_cb((recorder_h)handle,
-                                                       (recorder_error_cb)_mmsvc_recorder_disp_error_cb,
+       ret = legacy_recorder_set_error_cb((recorder_h)handle,
+                                                       (recorder_error_cb)_recorder_disp_error_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -599,7 +599,7 @@ int recorder_dispatcher_unset_error_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_ERROR_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_error_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_error_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -612,8 +612,8 @@ int recorder_dispatcher_set_recording_status_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_RECORDING_STATUS_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_recording_status_cb((recorder_h)handle,
-                                                       (recorder_recording_status_cb)_mmsvc_recorder_disp_recording_status_cb,
+       ret = legacy_recorder_set_recording_status_cb((recorder_h)handle,
+                                                       (recorder_recording_status_cb)_recorder_disp_recording_status_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -627,7 +627,7 @@ int recorder_dispatcher_unset_recording_status_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_RECORDING_STATUS_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_recording_status_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_recording_status_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -640,8 +640,8 @@ int recorder_dispatcher_set_recording_limit_reached_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_RECORDING_LIMIT_REACHED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_set_recording_limit_reached_cb((recorder_h)handle,
-                                                       (recorder_recording_limit_reached_cb)_mmsvc_recorder_disp_recording_limit_reached_cb,
+       ret = legacy_recorder_set_recording_limit_reached_cb((recorder_h)handle,
+                                                       (recorder_recording_limit_reached_cb)_recorder_disp_recording_limit_reached_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -655,7 +655,7 @@ int recorder_dispatcher_unset_recording_limit_reached_cb(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_RECORDING_LIMIT_REACHED_CB;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_unset_recording_limit_reached_cb((recorder_h)handle);
+       ret = legacy_recorder_unset_recording_limit_reached_cb((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -668,8 +668,8 @@ int recorder_dispatcher_foreach_supported_file_format(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_foreach_supported_file_format((recorder_h)handle,
-                                                       (recorder_supported_file_format_cb)_mmsvc_recorder_disp_foreach_supported_file_format_cb,
+       ret = legacy_recorder_foreach_supported_file_format((recorder_h)handle,
+                                                       (recorder_supported_file_format_cb)_recorder_disp_foreach_supported_file_format_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -685,7 +685,7 @@ int recorder_dispatcher_attr_set_size_limit(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_SIZE_LIMIT;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(kbyte, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_size_limit((recorder_h)handle, kbyte);
+       ret = legacy_recorder_attr_set_size_limit((recorder_h)handle, kbyte);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -700,7 +700,7 @@ int recorder_dispatcher_attr_set_time_limit(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_TIME_LIMIT;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(second, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_time_limit((recorder_h)handle, second);
+       ret = legacy_recorder_attr_set_time_limit((recorder_h)handle, second);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -715,7 +715,7 @@ int recorder_dispatcher_attr_set_audio_device(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_DEVICE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_device, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_audio_device((recorder_h)handle, (recorder_audio_device_e)set_device);
+       ret = legacy_recorder_attr_set_audio_device((recorder_h)handle, (recorder_audio_device_e)set_device);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -730,7 +730,7 @@ int recorder_dispatcher_set_audio_encoder(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_AUDIO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_codec, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_set_audio_encoder((recorder_h)handle, (recorder_audio_codec_e)set_codec);
+       ret = legacy_recorder_set_audio_encoder((recorder_h)handle, (recorder_audio_codec_e)set_codec);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -745,7 +745,7 @@ int recorder_dispatcher_get_audio_encoder(muse_module_h module)
        int get_codec;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_AUDIO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_audio_encoder((recorder_h)handle, &codec);
+       ret = legacy_recorder_get_audio_encoder((recorder_h)handle, &codec);
        get_codec = (int)codec;
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_codec);
@@ -761,7 +761,7 @@ int recorder_dispatcher_set_video_encoder(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_SET_VIDEO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_codec, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_set_video_encoder((recorder_h)handle, (recorder_video_codec_e)set_codec);
+       ret = legacy_recorder_set_video_encoder((recorder_h)handle, (recorder_video_codec_e)set_codec);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -776,7 +776,7 @@ int recorder_dispatcher_get_video_encoder(muse_module_h module)
        int get_codec;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_VIDEO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_get_video_encoder((recorder_h)handle, &codec);
+       ret = legacy_recorder_get_video_encoder((recorder_h)handle, &codec);
        get_codec = (int)codec;
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_codec);
@@ -792,7 +792,7 @@ int recorder_dispatcher_attr_set_audio_samplerate(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_SAMPLERATE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(samplerate, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_audio_samplerate((recorder_h)handle, samplerate);
+       ret = legacy_recorder_attr_set_audio_samplerate((recorder_h)handle, samplerate);
        LOGD("handle : 0x%x samplerate : %d", handle, samplerate);
        muse_recorder_msg_return(api, ret, module);
 
@@ -807,7 +807,7 @@ int recorder_dispatcher_attr_set_audio_encoder_bitrate(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_ENCODER_BITRATE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(bitrate, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_audio_encoder_bitrate((recorder_h)handle, bitrate);
+       ret = legacy_recorder_attr_set_audio_encoder_bitrate((recorder_h)handle, bitrate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -822,7 +822,7 @@ int recorder_dispatcher_attr_set_video_encoder_bitrate(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_VIDEO_ENCODER_BITRATE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(bitrate, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_video_encoder_bitrate((recorder_h)handle, bitrate);
+       ret = legacy_recorder_attr_set_video_encoder_bitrate((recorder_h)handle, bitrate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -836,7 +836,7 @@ int recorder_dispatcher_attr_get_size_limit(muse_module_h module)
        int get_kbyte;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_SIZE_LIMIT;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_size_limit((recorder_h)handle, &get_kbyte);
+       ret = legacy_recorder_attr_get_size_limit((recorder_h)handle, &get_kbyte);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_kbyte);
 
@@ -850,7 +850,7 @@ int recorder_dispatcher_attr_get_time_limit(muse_module_h module)
        int get_second;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_TIME_LIMIT;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_time_limit((recorder_h)handle, &get_second);
+       ret = legacy_recorder_attr_get_time_limit((recorder_h)handle, &get_second);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_second);
 
@@ -865,7 +865,7 @@ int recorder_dispatcher_attr_get_audio_device(muse_module_h module)
        int get_device;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_DEVICE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_audio_device((recorder_h)handle, &device);
+       ret = legacy_recorder_attr_get_audio_device((recorder_h)handle, &device);
        get_device = (int)device;
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_device);
@@ -880,7 +880,7 @@ int recorder_dispatcher_attr_get_audio_samplerate(muse_module_h module)
        int get_samplerate;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_SAMPLERATE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_audio_samplerate((recorder_h)handle, &get_samplerate);
+       ret = legacy_recorder_attr_get_audio_samplerate((recorder_h)handle, &get_samplerate);
        LOGD("handle : 0x%x, get_samplerate : %d", handle, get_samplerate);
        muse_recorder_msg_return1(api, ret, module, INT, get_samplerate);
 
@@ -894,7 +894,7 @@ int recorder_dispatcher_attr_get_audio_encoder_bitrate(muse_module_h module)
        int get_bitrate;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_ENCODER_BITRATE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_audio_encoder_bitrate((recorder_h)handle, &get_bitrate);
+       ret = legacy_recorder_attr_get_audio_encoder_bitrate((recorder_h)handle, &get_bitrate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_bitrate);
 
@@ -908,7 +908,7 @@ int recorder_dispatcher_attr_get_video_encoder_bitrate(muse_module_h module)
        int get_bitrate;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_VIDEO_ENCODER_BITRATE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_video_encoder_bitrate((recorder_h)handle, &get_bitrate);
+       ret = legacy_recorder_attr_get_video_encoder_bitrate((recorder_h)handle, &get_bitrate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_bitrate);
 
@@ -921,8 +921,8 @@ int recorder_dispatcher_foreach_supported_audio_encoder(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_foreach_supported_audio_encoder((recorder_h)handle,
-                                                       (recorder_supported_audio_encoder_cb)_mmsvc_recorder_disp_foreach_supported_audio_encoder_cb,
+       ret = legacy_recorder_foreach_supported_audio_encoder((recorder_h)handle,
+                                                       (recorder_supported_audio_encoder_cb)_recorder_disp_foreach_supported_audio_encoder_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -936,8 +936,8 @@ int recorder_dispatcher_foreach_supported_video_encoder(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_foreach_supported_video_encoder((recorder_h)handle,
-                                                       (recorder_supported_video_encoder_cb)_mmsvc_recorder_disp_foreach_supported_video_encoder_cb,
+       ret = legacy_recorder_foreach_supported_video_encoder((recorder_h)handle,
+                                                       (recorder_supported_video_encoder_cb)_recorder_disp_foreach_supported_video_encoder_cb,
                                                        (void *)module);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
@@ -953,7 +953,7 @@ int recorder_dispatcher_attr_set_mute(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_MUTE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_enable, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_mute((recorder_h)handle, (bool)set_enable);
+       ret = legacy_recorder_attr_set_mute((recorder_h)handle, (bool)set_enable);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -966,7 +966,7 @@ int recorder_dispatcher_attr_is_muted(muse_module_h module)
        intptr_t handle;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_IS_MUTED;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_is_muted((recorder_h)handle);
+       ret = legacy_recorder_attr_is_muted((recorder_h)handle);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -981,7 +981,7 @@ int recorder_dispatcher_attr_set_recording_motion_rate(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_RECORDING_MOTION_RATE;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(rate, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_recording_motion_rate((recorder_h)handle, rate);
+       ret = legacy_recorder_attr_set_recording_motion_rate((recorder_h)handle, rate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -995,7 +995,7 @@ int recorder_dispatcher_attr_get_recording_motion_rate(muse_module_h module)
        double get_rate;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_RECORDING_MOTION_RATE;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_recording_motion_rate((recorder_h)handle, &get_rate);
+       ret = legacy_recorder_attr_get_recording_motion_rate((recorder_h)handle, &get_rate);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, DOUBLE, get_rate);
 
@@ -1011,7 +1011,7 @@ int recorder_dispatcher_attr_set_audio_channel(muse_module_h module)
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(channel_count, muse_core_client_get_msg(module));
        LOGD("channel_count : %d", channel_count);
-       ret = mmsvc_recorder_attr_set_audio_channel((recorder_h)handle, channel_count);
+       ret = legacy_recorder_attr_set_audio_channel((recorder_h)handle, channel_count);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -1025,7 +1025,7 @@ int recorder_dispatcher_attr_get_audio_channel(muse_module_h module)
        int get_channel_count;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_CHANNEL;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_audio_channel((recorder_h)handle, &get_channel_count);
+       ret = legacy_recorder_attr_get_audio_channel((recorder_h)handle, &get_channel_count);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_channel_count);
 
@@ -1040,7 +1040,7 @@ int recorder_dispatcher_attr_set_orientation_tag(muse_module_h module)
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_ORIENTATION_TAG;
        handle = muse_core_ipc_get_handle(module);
        muse_recorder_msg_get(set_orientation, muse_core_client_get_msg(module));
-       ret = mmsvc_recorder_attr_set_orientation_tag((recorder_h)handle, (recorder_rotation_e)set_orientation);
+       ret = legacy_recorder_attr_set_orientation_tag((recorder_h)handle, (recorder_rotation_e)set_orientation);
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return(api, ret, module);
 
@@ -1055,7 +1055,7 @@ int recorder_dispatcher_attr_get_orientation_tag(muse_module_h module)
        int get_orientation;
        muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG;
        handle = muse_core_ipc_get_handle(module);
-       ret = mmsvc_recorder_attr_get_orientation_tag((recorder_h)handle, &orientation);
+       ret = legacy_recorder_attr_get_orientation_tag((recorder_h)handle, &orientation);
        get_orientation = (int)orientation;
        LOGD("handle : 0x%x", handle);
        muse_recorder_msg_return1(api, ret, module, INT, get_orientation);
old mode 100755 (executable)
new mode 100644 (file)
index 21af0b5..c990731
@@ -4,7 +4,7 @@ Version:    0.2.2
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
-Source0:    %{service}-%{name}-%{version}.tar.gz
+Source0:    %{name}-%{version}.tar.gz
 BuildRequires:  cmake
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(mm-camcorder)
@@ -59,14 +59,12 @@ cp LICENSE.APLv2 %{buildroot}/usr/share/license/%{name}
 
 %files
 %manifest mmsvc-recorder.manifest
-%{_libdir}/libmmsvc-recorder.so.*
+%{_libdir}/liblegacy-recorder.so*
 %{_libdir}/libmuse-recorder.so*
 %{_datadir}/license/%{name}
-%{_includedir}/media/mmsvc_recorder.h
+%{_includedir}/media/legacy_recorder.h
 
 %files devel
 %{_includedir}/media/muse_recorder.h
 %{_includedir}/media/muse_recorder_msg.h
 %{_libdir}/pkgconfig/*.pc
-%{_libdir}/libmmsvc-recorder.so
-%{_libdir}/libmuse-recorder.so
diff --git a/src/mmsvc_recorder.c b/src/mmsvc_recorder.c
deleted file mode 100644 (file)
index 36a891b..0000000
+++ /dev/null
@@ -1,2008 +0,0 @@
-/*
-* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-*
-* 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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <mm.h>
-#include <audio-session-manager-types.h>
-#include <mm_camcorder.h>
-#include <mm_types.h>
-#include <math.h>
-#include <mmsvc_camera.h>
-#include <mmsvc_recorder_private.h>
-#include <dlog.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "TIZEN_N_RECORDER"
-
-#define LOWSET_DECIBEL -300.0
-#define RECORDER_PATH_RECORDER_RESOURCE    "/usr/share/sounds/mm-camcorder/recorder_resource"
-
-
-/*
- * camera_private function
-*/
-int _camera_get_mm_handle(camera_h camera , MMHandleType *handle);
-int _camera_set_relay_mm_message_callback(camera_h camera, MMMessageCallback callback, void *user_data);
-int _camera_set_use(camera_h camera, bool used);
-bool _camera_is_used(camera_h camera);
-/*
- * end of camera_private function
- */
-
-static int __mm_audio_stream_cb(MMCamcorderAudioStreamDataType *stream, void *user_param);
-static int __mm_recorder_msg_cb(int message, void *param, void *user_data);
-
-
-static int __convert_error_code_camera_to_recorder(int code)
-{
-       int new_code = code;
-
-       switch (code) {
-       case CAMERA_ERROR_INVALID_STATE :
-               new_code = RECORDER_ERROR_INVALID_STATE;
-               break;
-       case CAMERA_ERROR_DEVICE:
-               new_code = RECORDER_ERROR_DEVICE;
-               break;
-       case CAMERA_ERROR_SOUND_POLICY:
-               new_code = RECORDER_ERROR_SOUND_POLICY;
-               break;
-       case CAMERA_ERROR_SECURITY_RESTRICTED:
-               new_code = RECORDER_ERROR_SECURITY_RESTRICTED;
-               break;
-       default:
-               break;
-       }
-
-       return new_code;
-}
-
-
-int __convert_recorder_error_code(const char *func, int code)
-{
-       int ret = RECORDER_ERROR_INVALID_OPERATION;
-       const char *errorstr = NULL;
-
-       switch (code) {
-       case RECORDER_ERROR_INVALID_PARAMETER:
-               ret = RECORDER_ERROR_INVALID_PARAMETER;
-               errorstr = "INVALID_PARAMETER";
-               break;
-       case MM_ERROR_NONE:
-               ret = RECORDER_ERROR_NONE;
-               errorstr = "ERROR_NONE";
-               break;
-       case MM_ERROR_CAMCORDER_INVALID_ARGUMENT :
-       case MM_ERROR_COMMON_INVALID_ATTRTYPE :
-               ret = RECORDER_ERROR_INVALID_PARAMETER;
-               errorstr = "INVALID_PARAMETER";
-               break;
-       case MM_ERROR_COMMON_INVALID_PERMISSION :
-               ret = RECORDER_ERROR_PERMISSION_DENIED;
-               errorstr = "ERROR_PERMISSION_DENIED";
-               break;
-       case MM_ERROR_CAMCORDER_NOT_INITIALIZED :
-       case MM_ERROR_CAMCORDER_INVALID_STATE :
-               ret = RECORDER_ERROR_INVALID_STATE;
-               errorstr = "INVALID_STATE";
-               break;
-       case MM_ERROR_CAMCORDER_DEVICE :
-       case MM_ERROR_CAMCORDER_DEVICE_NOT_FOUND :
-       case MM_ERROR_CAMCORDER_DEVICE_BUSY :
-       case MM_ERROR_CAMCORDER_DEVICE_OPEN :
-       case MM_ERROR_CAMCORDER_DEVICE_IO :
-       case MM_ERROR_CAMCORDER_DEVICE_TIMEOUT :
-       case MM_ERROR_CAMCORDER_DEVICE_WRONG_JPEG :
-       case MM_ERROR_CAMCORDER_DEVICE_LACK_BUFFER :
-               ret = RECORDER_ERROR_DEVICE;
-               errorstr = "ERROR_DEVICE";
-               break;
-       case MM_ERROR_CAMCORDER_GST_CORE :
-       case MM_ERROR_CAMCORDER_GST_LIBRARY :
-       case MM_ERROR_CAMCORDER_GST_RESOURCE :
-       case MM_ERROR_CAMCORDER_GST_STREAM :
-       case MM_ERROR_CAMCORDER_GST_STATECHANGE :
-       case MM_ERROR_CAMCORDER_GST_NEGOTIATION :
-       case MM_ERROR_CAMCORDER_GST_LINK :
-       case MM_ERROR_CAMCORDER_GST_FLOW_ERROR :
-       case MM_ERROR_CAMCORDER_ENCODER :
-       case MM_ERROR_CAMCORDER_ENCODER_BUFFER :
-       case MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE :
-       case MM_ERROR_CAMCORDER_ENCODER_WORKING :
-       case MM_ERROR_CAMCORDER_INTERNAL :
-       case MM_ERROR_CAMCORDER_RESPONSE_TIMEOUT :
-       case MM_ERROR_CAMCORDER_CMD_IS_RUNNING :
-       case MM_ERROR_CAMCORDER_DSP_FAIL :
-       case MM_ERROR_CAMCORDER_AUDIO_EMPTY :
-       case MM_ERROR_CAMCORDER_CREATE_CONFIGURE :
-       case MM_ERROR_CAMCORDER_FILE_SIZE_OVER :
-       case MM_ERROR_CAMCORDER_DISPLAY_DEVICE_OFF :
-       case MM_ERROR_CAMCORDER_INVALID_CONDITION :
-               ret = RECORDER_ERROR_INVALID_OPERATION;
-               errorstr = "INVALID_OPERATION";
-               break;
-       case MM_ERROR_CAMCORDER_RESOURCE_CREATION :
-       case MM_ERROR_COMMON_OUT_OF_MEMORY:
-               ret = RECORDER_ERROR_OUT_OF_MEMORY;
-               errorstr = "OUT_OF_MEMORY";
-               break;
-       case MM_ERROR_POLICY_BLOCKED:
-               ret = RECORDER_ERROR_SOUND_POLICY;
-               errorstr = "ERROR_SOUND_POLICY";
-               break;
-       case MM_ERROR_POLICY_BLOCKED_BY_CALL:
-               ret = RECORDER_ERROR_SOUND_POLICY_BY_CALL;
-               errorstr = "ERROR_SOUND_POLICY_BY_CALL";
-               break;
-       case MM_ERROR_POLICY_BLOCKED_BY_ALARM:
-               ret = RECORDER_ERROR_SOUND_POLICY_BY_ALARM;
-               errorstr = "ERROR_SOUND_POLICY_BY_ALARM";
-               break;
-       case MM_ERROR_POLICY_RESTRICTED:
-               ret = RECORDER_ERROR_SECURITY_RESTRICTED;
-               errorstr = "ERROR_RESTRICTED";
-               break;
-       case MM_ERROR_CAMCORDER_DEVICE_REG_TROUBLE:
-               ret = RECORDER_ERROR_ESD;
-               errorstr = "ERROR_ESD";
-               break;
-       case MM_ERROR_OUT_OF_STORAGE:
-               ret = RECORDER_ERROR_OUT_OF_STORAGE;
-               errorstr = "OUT_OF_STORAGE";
-               break;
-       case MM_ERROR_COMMON_OUT_OF_ARRAY:
-       case MM_ERROR_COMMON_OUT_OF_RANGE:
-       case MM_ERROR_COMMON_ATTR_NOT_EXIST:
-       case MM_ERROR_CAMCORDER_NOT_SUPPORTED:
-               ret = RECORDER_ERROR_NOT_SUPPORTED;
-               errorstr = "NOT_SUPPORTED";
-               break;
-       default:
-               ret = RECORDER_ERROR_INVALID_OPERATION;
-               errorstr = "INVALID_OPERATION";
-               break;
-       }
-
-       LOGE("[%s] %s(0x%08x) : core frameworks error code(0x%08x)", func, errorstr, ret, code);
-
-       return ret;
-}
-
-
-static recorder_state_e __recorder_state_convert(MMCamcorderStateType mm_state)
-{
-       recorder_state_e state = RECORDER_STATE_NONE;
-       switch (mm_state) {
-       case MM_CAMCORDER_STATE_NONE:
-               state = RECORDER_STATE_NONE;
-               break;
-       case MM_CAMCORDER_STATE_NULL:
-               state = RECORDER_STATE_CREATED;
-               break;
-       case MM_CAMCORDER_STATE_READY:
-               state = RECORDER_STATE_CREATED;
-               break;
-       case MM_CAMCORDER_STATE_PREPARE:
-               state = RECORDER_STATE_READY;
-               break;
-       case MM_CAMCORDER_STATE_CAPTURING:
-               state = RECORDER_STATE_READY;
-               break;
-       case MM_CAMCORDER_STATE_RECORDING:
-               state = RECORDER_STATE_RECORDING;
-               break;
-       case MM_CAMCORDER_STATE_PAUSED:
-               state = RECORDER_STATE_PAUSED;
-               break;
-       default:
-               state = RECORDER_STATE_NONE;
-               break;
-       }
-
-       return state;
-}
-
-
-static int __mm_recorder_msg_cb(int message, void *param, void *user_data)
-{
-       recorder_s * handle = (recorder_s *)user_data;
-       MMMessageParamType *m = (MMMessageParamType *)param;
-       recorder_state_e previous_state;
-       recorder_recording_limit_type_e type;
-       int recorder_error = 0;
-
-       switch (message) {
-       case MM_MESSAGE_READY_TO_RESUME:
-               LOGW("not supported message");
-               break;
-       case MM_MESSAGE_CAMCORDER_STATE_CHANGED:
-       case MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_ASM:
-       case MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY:
-               previous_state = handle->state;
-               handle->state = __recorder_state_convert(m->state.current);
-               recorder_policy_e policy = RECORDER_POLICY_NONE;
-               if (message == MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_ASM) {
-                       switch (m->state.code) {
-                       case ASM_EVENT_SOURCE_CALL_START:
-                       case ASM_EVENT_SOURCE_CALL_END:
-                               policy = RECORDER_POLICY_SOUND_BY_CALL;
-                               LOGE("RECORDER_POLICY_SOUND_BY_CALL");
-                               break;
-                       case ASM_EVENT_SOURCE_ALARM_START:
-                       case ASM_EVENT_SOURCE_ALARM_END:
-                               policy = RECORDER_POLICY_SOUND_BY_ALARM;
-                               LOGE("RECORDER_POLICY_SOUND_BY_ALARM");
-                               break;
-                       default:
-                               policy = RECORDER_POLICY_SOUND;
-                               LOGE("RECORDER_POLICY_SOUND");
-                               break;
-                       }
-               } else if (message == MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY) {
-                       policy = RECORDER_POLICY_SECURITY;
-                       LOGE("RECORDER_POLICY_SECURITY");
-               }
-
-               if (previous_state != handle->state && handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE]) {
-                       ((recorder_state_changed_cb)handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE])(previous_state, handle->state, policy, handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE]);
-               }
-
-               /* should change intermediate state MM_CAMCORDER_STATE_READY is not valid in capi , change to NULL state */
-               if (policy != RECORDER_POLICY_NONE &&
-                   (m->state.current == MM_CAMCORDER_STATE_PAUSED || m->state.current == MM_CAMCORDER_STATE_NULL)) {
-                       if (handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED]) {
-                               ((recorder_interrupted_cb)handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED])(policy, previous_state, handle->state, handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED]);
-                       } else {
-                               LOGW("_RECORDER_EVENT_TYPE_INTERRUPTED cb is NULL");
-                       }
-               }
-               break;
-       case MM_MESSAGE_CAMCORDER_MAX_SIZE:
-       case MM_MESSAGE_CAMCORDER_NO_FREE_SPACE:
-       case MM_MESSAGE_CAMCORDER_TIME_LIMIT:
-               if (MM_MESSAGE_CAMCORDER_MAX_SIZE == message) {
-                       type = RECORDER_RECORDING_LIMIT_SIZE;
-               } else if (MM_MESSAGE_CAMCORDER_NO_FREE_SPACE == message) {
-                       type = RECORDER_RECORDING_LIMIT_FREE_SPACE;
-               } else {
-                       type = RECORDER_RECORDING_LIMIT_TIME;
-               }
-               if (handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED]) {
-                       ((recorder_recording_limit_reached_cb)handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED])(type, handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED]);
-               }
-               break;
-       case MM_MESSAGE_CAMCORDER_RECORDING_STATUS:
-               if (handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS]) {
-                       ((recorder_recording_status_cb)handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS])(m->recording_status.elapsed, m->recording_status.filesize, handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS]);
-               }
-               break;
-       case MM_MESSAGE_CAMCORDER_ERROR:
-               switch (m->code) {
-               case MM_ERROR_CAMCORDER_DEVICE:
-               case MM_ERROR_CAMCORDER_DEVICE_TIMEOUT:
-               case MM_ERROR_CAMCORDER_DEVICE_WRONG_JPEG:
-                       recorder_error = RECORDER_ERROR_DEVICE;
-                       break;
-               case MM_ERROR_CAMCORDER_GST_CORE:
-               case MM_ERROR_CAMCORDER_GST_LIBRARY:
-               case MM_ERROR_CAMCORDER_GST_RESOURCE:
-               case MM_ERROR_CAMCORDER_GST_STREAM:
-               case MM_ERROR_CAMCORDER_GST_NEGOTIATION:
-               case MM_ERROR_CAMCORDER_GST_FLOW_ERROR:
-               case MM_ERROR_CAMCORDER_ENCODER:
-               case MM_ERROR_CAMCORDER_ENCODER_BUFFER:
-               case MM_ERROR_CAMCORDER_ENCODER_WORKING:
-               case MM_ERROR_CAMCORDER_MNOTE_CREATION:
-               case MM_ERROR_CAMCORDER_MNOTE_ADD_ENTRY:
-               case MM_ERROR_CAMCORDER_INTERNAL:
-               case MM_ERROR_FILE_NOT_FOUND:
-               case MM_ERROR_FILE_READ:
-                       recorder_error = RECORDER_ERROR_INVALID_OPERATION;
-                       break;
-               case MM_ERROR_CAMCORDER_LOW_MEMORY:
-               case MM_ERROR_CAMCORDER_MNOTE_MALLOC:
-                       recorder_error = RECORDER_ERROR_OUT_OF_MEMORY;
-                       break;
-               case MM_ERROR_CAMCORDER_DEVICE_REG_TROUBLE:
-                       recorder_error = RECORDER_ERROR_ESD;
-                       break;
-               case MM_ERROR_OUT_OF_STORAGE:
-                       recorder_error = RECORDER_ERROR_OUT_OF_STORAGE;
-                       break;
-               default:
-                       recorder_error = RECORDER_ERROR_INVALID_OPERATION;
-                       break;
-               }
-
-               if (recorder_error != 0 && handle->user_cb[_RECORDER_EVENT_TYPE_ERROR]) {
-                       ((recorder_error_cb)handle->user_cb[_RECORDER_EVENT_TYPE_ERROR])(recorder_error, handle->state, handle->user_data[_RECORDER_EVENT_TYPE_ERROR]);
-               }
-               break;
-       case MM_MESSAGE_CAMCORDER_CURRENT_VOLUME:
-               if (handle->last_max_input_level < m->rec_volume_dB) {
-                       handle->last_max_input_level = m->rec_volume_dB;
-               }
-               break;
-       default:
-               break;
-       }
-
-       return 1;
-}
-
-
-static int __mm_audio_stream_cb(MMCamcorderAudioStreamDataType *stream, void *user_param)
-{
-       if (user_param == NULL || stream == NULL) {
-               return 0;
-       }
-
-       recorder_s *handle = (recorder_s *)user_param;
-       audio_sample_type_e format = AUDIO_SAMPLE_TYPE_U8;
-
-       if (stream->format == MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE) {
-               format = AUDIO_SAMPLE_TYPE_S16_LE;
-       }
-
-       if( handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] ){
-               ((recorder_audio_stream_cb)(handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM]))(stream->data, stream->length, format,
-                                                                                                stream->channel, stream->timestamp,
-                                                                                                handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM]);
-       }
-
-       return 1;
-}
-
-
-static int _recorder_check_and_set_attribute(recorder_h recorder, const char *attribute_name, int set_value)
-{
-       bool reset_pipeline = false;
-       bool restore_set = false;
-       int ret = MM_ERROR_NONE;
-       int ret2 = MM_ERROR_NONE;
-       int current_value = -1;
-       int current_audio_disable = 0;
-
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamcorderStateType mmstate = MM_CAMCORDER_STATE_NONE;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       mm_camcorder_get_state(handle->mm_handle, &mmstate);
-       if (mmstate >= MM_CAMCORDER_STATE_RECORDING) {
-               LOGE("invalid state %d", mmstate);
-               return RECORDER_ERROR_INVALID_STATE;
-       }
-
-       if (handle->type == _RECORDER_TYPE_AUDIO && mmstate == MM_CAMCORDER_STATE_PREPARE) {
-               mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                           MMCAM_AUDIO_DISABLE, &current_audio_disable,
-                                           attribute_name, &current_value,
-                                           NULL);
-
-               if (current_value != set_value) {
-                       LOGD("try to reset pipeline");
-
-                       ret = mm_camcorder_stop(handle->mm_handle);
-                       if (ret != MM_ERROR_NONE) {
-                               LOGE("mm_camcorder_stop failed 0x%x", ret);
-                               return __convert_recorder_error_code(attribute_name, ret);
-                       }
-
-                       ret = mm_camcorder_unrealize(handle->mm_handle);
-                       if (ret != MM_ERROR_NONE) {
-                               LOGE("mm_camcorder_unrealize failed 0x%x", ret);
-                               mm_camcorder_start(handle->mm_handle);
-                               return __convert_recorder_error_code(attribute_name, ret);
-                       }
-
-                       reset_pipeline = true;
-               }
-       }
-
-       if (!strcmp(attribute_name, MMCAM_AUDIO_ENCODER)) {
-               if (set_value == RECORDER_AUDIO_CODEC_DISABLE) {
-                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                         MMCAM_AUDIO_DISABLE, true,
-                                                         NULL);
-               } else {
-                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                         MMCAM_AUDIO_DISABLE, false,
-                                                         MMCAM_AUDIO_ENCODER, set_value,
-                                                         NULL);
-               }
-       } else {
-               ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                 attribute_name, set_value,
-                                                 NULL);
-       }
-
-       if (ret != MM_ERROR_NONE) {
-               LOGE("set [%s] failed 0x%x", attribute_name, ret);
-       }
-
-       if (reset_pipeline) {
-               ret2 = mm_camcorder_realize(handle->mm_handle);
-               if (ret2 == MM_ERROR_NONE) {
-                       ret2 = mm_camcorder_start(handle->mm_handle);
-                       if (ret2 == MM_ERROR_NONE) {
-                               LOGW("restart pipeline done.");
-                       } else {
-                               LOGE("mm_camcorder_start failed 0x%x", ret2);
-                               mm_camcorder_unrealize(handle->mm_handle);
-                       }
-               } else {
-                       LOGE("mm_camcorder_realize failed 0x%x", ret2);
-               }
-
-               if (ret2 != MM_ERROR_NONE) {
-                       restore_set = true;
-                       /* determine return value */
-                       if (ret == MM_ERROR_NONE) {
-                               ret = ret2;
-                       }
-               }
-       }
-
-       if (restore_set) {
-               ret2 = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                  MMCAM_AUDIO_DISABLE, current_audio_disable,
-                                                  attribute_name, current_value,
-                                                  NULL);
-               LOGW("restore attribute set : 0x%x", ret2);
-
-               ret2 = mm_camcorder_realize(handle->mm_handle);
-               LOGW("restore mm_camcorder_realize : 0x%x", ret2);
-
-               ret2 = mm_camcorder_start(handle->mm_handle);
-               LOGW("restore mm_camcorder_realize : 0x%x", ret2);
-               if (ret2 != MM_ERROR_NONE) {
-                       ret2 = mm_camcorder_unrealize(handle->mm_handle);
-                       LOGW("restore mm_camcorder_unrealize : 0x%x", ret2);
-               }
-       }
-
-       return __convert_recorder_error_code(attribute_name, ret);
-}
-
-
-int mmsvc_recorder_create_videorecorder(camera_h camera, recorder_h *recorder)
-{
-       int ret = MM_ERROR_NONE;
-       int resource_fd = -1;
-       recorder_s *handle = NULL;
-       int preview_format = MM_PIXEL_FORMAT_NV12;
-       int camera_device_count = 0;
-
-       if (camera == NULL) {
-               LOGE("NULL pointer camera handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (recorder == NULL) {
-               LOGE("NULL pointer recorder handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       /* Check already used in another recorder */
-       if (_camera_is_used(camera)) {
-               LOGE("[%s] camera is using in another recorder.", __func__);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       resource_fd = open(RECORDER_PATH_RECORDER_RESOURCE, O_RDONLY);
-       if (resource_fd < 0) {
-               LOGE("failed to open recorder resource : errno [%d]", errno);
-               if (errno == EPERM || errno == EACCES) {
-                       LOGE("permission denied");
-                       return RECORDER_ERROR_PERMISSION_DENIED;
-               } else {
-                       LOGE("invalid operation");
-                       return RECORDER_ERROR_INVALID_OPERATION;
-               }
-       }
-
-       close(resource_fd);
-       resource_fd = -1;
-
-       LOGW("permission check done");
-
-       handle = (recorder_s*)malloc( sizeof(recorder_s) );
-       if(handle == NULL){
-               LOGE("[%s] malloc error", __func__);
-               return RECORDER_ERROR_OUT_OF_MEMORY;
-       }
-
-       memset(handle, 0 , sizeof(recorder_s));
-       handle->src_type = _RECORDER_SOURCE_TYPE_CAMERA;
-       handle->last_max_input_level = LOWSET_DECIBEL;
-       handle->changed_preview_format = -1;
-       handle->mm_source.camera = camera;
-
-       _camera_get_mm_handle(camera, &handle->mm_handle);
-       _camera_set_relay_mm_message_callback(camera, __mm_recorder_msg_cb , (void*)handle);
-       handle->type = _RECORDER_TYPE_VIDEO;
-       mmsvc_recorder_get_state((recorder_h)handle, (recorder_state_e*)&handle->state);
-
-       mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                   MMCAM_CAMERA_FORMAT, &preview_format,
-                                   NULL);
-       handle->origin_preview_format = preview_format;
-       mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                   MMCAM_RECOMMEND_PREVIEW_FORMAT_FOR_RECORDING, &preview_format,
-                                   NULL);
-       ret = mm_camcorder_get_attributes(handle->mm_handle ,NULL,
-                                   MMCAM_CAMERA_DEVICE_COUNT, &camera_device_count,
-                                   NULL);
-       if (ret != MM_ERROR_NONE) {
-               free(handle);
-               handle = NULL;
-               LOGE("get device count error");
-               return __convert_recorder_error_code(__func__, ret);
-       }
-       if (camera_device_count == 0) {
-               free(handle);
-               handle = NULL;
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       } else {
-               handle->camera_device_count = camera_device_count;
-       }
-
-       _camera_set_use(camera, true);
-       if (handle->state == RECORDER_STATE_CREATED) {
-               ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                 MMCAM_CAMERA_FORMAT, preview_format,
-                                                 NULL);
-               if (ret == MM_ERROR_NONE) {
-                       handle->changed_preview_format = preview_format;
-               }
-       }
-       *recorder = (recorder_h)handle;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_create_audiorecorder(recorder_h *recorder)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = NULL;
-       MMCamPreset info;
-       int camera_device_count = 0;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       info.videodev_type = MM_VIDEO_DEVICE_NONE;
-
-       handle = (recorder_s *)malloc(sizeof(recorder_s));
-       if (handle == NULL) {
-               LOGE("OUT_OF_MEMORY(0x%08x)", RECORDER_ERROR_OUT_OF_MEMORY);
-               return RECORDER_ERROR_OUT_OF_MEMORY;
-       }
-
-       memset(handle, 0, sizeof(recorder_s));
-
-       handle->last_max_input_level = LOWSET_DECIBEL;
-
-       ret = mm_camcorder_create(&handle->mm_handle, &info);
-       if (ret != MM_ERROR_NONE) {
-               free(handle);
-               handle = NULL;
-               LOGE("mm_camcorder_create fail");
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_MODE, MM_CAMCORDER_MODE_AUDIO,
-                                         NULL);
-
-       if (ret != MM_ERROR_NONE) {
-               mm_camcorder_destroy(handle->mm_handle);
-               free(handle);
-               handle = NULL;
-               LOGE("AUDIO mode setting fail");
-               return __convert_recorder_error_code(__func__, ret);
-       }
-       ret = mm_camcorder_get_attributes(handle->mm_handle ,NULL,
-                                   MMCAM_CAMERA_DEVICE_COUNT, &camera_device_count, NULL);
-       if (ret != MM_ERROR_NONE) {
-               mm_camcorder_destroy(handle->mm_handle);
-               free(handle);
-               handle = NULL;
-               LOGE("get device count error");
-               return __convert_recorder_error_code(__func__, ret);
-       } else {
-               handle->camera_device_count = camera_device_count;
-       }
-       handle->state = RECORDER_STATE_CREATED;
-       handle->mm_source.camera = NULL;
-       handle->type = _RECORDER_TYPE_AUDIO;
-
-       mm_camcorder_set_message_callback(handle->mm_handle, __mm_recorder_msg_cb, (void*)handle);
-
-       *recorder = (recorder_h)handle;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_get_state(recorder_h recorder, recorder_state_e *state)
-{
-       int ret = MM_ERROR_NONE;
-       MMCamcorderStateType mmstate;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (state == NULL) {
-               LOGE("NULL pointer state");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       recorder_s *handle = (recorder_s*)recorder;
-
-       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
-       if (ret != MM_ERROR_NONE) {
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       *state = __recorder_state_convert(mmstate);
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_destroy(recorder_h recorder)
-{
-       recorder_s *handle = NULL;
-       int ret = MM_ERROR_NONE;
-       int preview_format;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle = (recorder_s *)recorder;
-
-       if (handle->type == _RECORDER_TYPE_VIDEO) {
-               /* set to unsed */
-               _camera_set_use(handle->mm_source.camera, false);
-               ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                                 MMCAM_CAMERA_FORMAT, &preview_format,
-                                                 NULL);
-
-               /* preview format was changed? */
-               if (ret == MM_ERROR_NONE && preview_format == handle->changed_preview_format) {
-                       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                                         MMCAM_CAMERA_FORMAT, handle->origin_preview_format,
-                                                         NULL);
-               }
-
-               if (ret == MM_ERROR_NONE) {
-                       _camera_set_relay_mm_message_callback(handle->mm_source.camera, NULL, NULL);
-               }
-       } else {
-               ret = mm_camcorder_destroy(handle->mm_handle);
-       }
-
-       if (ret == MM_ERROR_NONE) {
-               free(handle);
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_prepare(recorder_h recorder)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamcorderStateType mmstate;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (handle->type == _RECORDER_TYPE_VIDEO) {
-               return __convert_error_code_camera_to_recorder(mmsvc_camera_start_preview(handle->mm_source.camera));
-       }
-
-       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
-
-       if (ret == MM_ERROR_NONE && mmstate < MM_CAMCORDER_STATE_READY) {
-               ret = mm_camcorder_realize(handle->mm_handle);
-               if (ret != MM_ERROR_NONE) {
-                       LOGE("mm_camcorder_realize fail");
-                       return __convert_recorder_error_code(__func__, ret);
-               }
-       }
-
-       ret = mm_camcorder_start(handle->mm_handle);
-       if (ret != MM_ERROR_NONE) {
-               LOGE("mm_camcorder_start fail");
-               mm_camcorder_unrealize(handle->mm_handle);
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unprepare(recorder_h recorder)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamcorderStateType mmstate;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_state(handle->mm_handle, &mmstate);
-       if (ret == MM_ERROR_NONE && mmstate == MM_CAMCORDER_STATE_PREPARE) {
-               ret = mm_camcorder_stop(handle->mm_handle);
-               if( ret != MM_ERROR_NONE){
-                       LOGE("mm_camcorder_stop fail");
-               }
-       }
-
-       if (ret == MM_ERROR_NONE) {
-               ret = mm_camcorder_unrealize(handle->mm_handle);
-               if (ret != MM_ERROR_NONE) {
-                       LOGE("mm_camcorder_unrealize fail");
-                       mm_camcorder_start(handle->mm_handle);
-               }
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_start(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return __convert_recorder_error_code(__func__, mm_camcorder_record(handle->mm_handle));
-}
-
-
-int mmsvc_recorder_pause(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return __convert_recorder_error_code(__func__, mm_camcorder_pause(handle->mm_handle));
-}
-
-
-int mmsvc_recorder_commit(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return __convert_recorder_error_code(__func__, mm_camcorder_commit(handle->mm_handle));
-}
-
-
-int mmsvc_recorder_cancel(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return __convert_recorder_error_code(__func__, mm_camcorder_cancel(handle->mm_handle));
-}
-
-
-int mmsvc_recorder_set_video_resolution(recorder_h recorder, int width, int height)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s*)recorder;
-       recorder_state_e state;
-
-       if (handle == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       mmsvc_recorder_get_state(recorder, &state);
-       if (state > RECORDER_STATE_READY) {
-               LOGE("RECORDER_ERROR_INVALID_STATE (state:%d)", state);
-               return RECORDER_ERROR_INVALID_STATE;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_WIDTH, width,
-                                         MMCAM_VIDEO_HEIGHT, height,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_get_video_resolution(recorder_h recorder, int *width, int *height)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s*)recorder;
-
-       if (!handle) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-
-       if (!width || !height) {
-               LOGE("NULL pointer width = [%p], height = [%p]", width, height);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_WIDTH, width,
-                                         MMCAM_VIDEO_HEIGHT, height,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_foreach_supported_video_resolution(recorder_h recorder,
-                                                recorder_supported_video_resolution_cb foreach_cb, void *user_data)
-{
-       int i = 0;
-       int ret = MM_ERROR_NONE;
-       recorder_s * handle = (recorder_s*)recorder;
-       MMCamAttrsInfo video_width;
-       MMCamAttrsInfo video_height;
-
-       if (!handle) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-
-       if (!foreach_cb) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_WIDTH, &video_width);
-       ret |= mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_HEIGHT, &video_height);
-
-       if (ret != MM_ERROR_NONE ) {
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       for (i = 0 ; i < video_width.int_array.count ; i++) {
-               if (!foreach_cb(video_width.int_array.array[i], video_height.int_array.array[i], user_data)) {
-                       break;
-               }
-       }
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_get_audio_level(recorder_h recorder, double *level)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-       recorder_state_e state;
-
-       if (recorder == NULL || level == NULL) {
-               LOGE("NULL pointer %p %p", recorder, level);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       mmsvc_recorder_get_state(recorder, &state);
-       if (state < RECORDER_STATE_RECORDING) {
-               LOGE("RECORDER_ERROR_INVALID_STATE(0x%08x)", RECORDER_ERROR_INVALID_STATE);
-               return RECORDER_ERROR_INVALID_STATE;
-       }
-
-       *level = handle->last_max_input_level;
-       handle->last_max_input_level = LOWSET_DECIBEL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_set_filename(recorder_h recorder,  const char *filename)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamcorderStateType mmstate = MM_CAMCORDER_STATE_NONE;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (filename == NULL) {
-               LOGE("filename is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       mm_camcorder_get_state(handle->mm_handle, &mmstate);
-       if (mmstate >= MM_CAMCORDER_STATE_RECORDING) {
-               LOGE("invalid state %d", mmstate);
-               return RECORDER_ERROR_INVALID_STATE;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_FILENAME, filename, strlen(filename),
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_get_filename(recorder_h recorder,  char **filename)
-{
-       int ret = MM_ERROR_NONE;
-       char *record_filename = NULL;
-       int record_filename_size;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (filename == NULL) {
-               LOGE("filename is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_FILENAME, &record_filename, &record_filename_size,
-                                         NULL);
-       if (ret == MM_ERROR_NONE && record_filename) {
-               *filename = strdup(record_filename);
-       } else {
-               LOGE("internal return (0x%08x), get filename p:%p", ret, record_filename);
-               *filename = NULL;
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_set_file_format(recorder_h recorder, recorder_file_format_e format)
-{
-       int format_table[6] = { MM_FILE_FORMAT_3GP, /* RECORDER_FILE_FORMAT_3GP */
-                               MM_FILE_FORMAT_MP4, /* RECORDER_FILE_FORMAT_MP4 */
-                               MM_FILE_FORMAT_AMR, /* RECORDER_FILE_FORMAT_AMR */
-                               MM_FILE_FORMAT_AAC, /* RECORDER_FILE_FORMAT_ADTS */
-                               MM_FILE_FORMAT_WAV, /* RECORDER_FILE_FORMAT_WAV */
-                               MM_FILE_FORMAT_OGG  /* RECORDER_FILE_FORMAT_OGG */
-       };
-
-       if (format < RECORDER_FILE_FORMAT_3GP || format > RECORDER_FILE_FORMAT_OGG) {
-               LOGE("invalid format %d", format);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_FILE_FORMAT, format_table[format]);
-}
-
-
-int mmsvc_recorder_get_file_format(recorder_h recorder, recorder_file_format_e *format)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-       int mm_format;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (format == NULL) {
-               LOGE("format is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_FILE_FORMAT, &mm_format,
-                                         NULL);
-       if (ret == MM_ERROR_NONE) {
-               switch (mm_format) {
-               case MM_FILE_FORMAT_3GP:
-                       *format = RECORDER_FILE_FORMAT_3GP;
-                       break;
-               case MM_FILE_FORMAT_MP4 :
-                       *format = RECORDER_FILE_FORMAT_MP4;
-                       break;
-               case MM_FILE_FORMAT_AMR :
-                       *format = RECORDER_FILE_FORMAT_AMR;
-                       break;
-               case MM_FILE_FORMAT_AAC :
-                       *format = RECORDER_FILE_FORMAT_ADTS;
-                       break;
-               case MM_FILE_FORMAT_WAV:
-                       *format = RECORDER_FILE_FORMAT_WAV;
-                       break;
-               case MM_FILE_FORMAT_OGG:
-                       *format = RECORDER_FILE_FORMAT_OGG;
-                       break;
-               default :
-                       ret = MM_ERROR_CAMCORDER_INTERNAL;
-                       break;
-               }
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb callback, void* user_data)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE] = callback;
-       handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE] = user_data;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unset_state_changed_cb(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb callback, void *user_data)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED] = callback;
-       handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED] = user_data;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unset_interrupted_cb(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb callback, void* user_data)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_audio_stream_callback(handle->mm_handle, __mm_audio_stream_cb, handle);
-       if (ret == MM_ERROR_NONE){
-               handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = callback;
-               handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = user_data;
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_unset_audio_stream_cb(recorder_h recorder)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL;
-
-       ret = mm_camcorder_set_audio_stream_callback(handle->mm_handle, NULL, NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void *user_data)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_ERROR] = callback;
-       handle->user_data[_RECORDER_EVENT_TYPE_ERROR] = user_data;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unset_error_cb(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_ERROR] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_ERROR] = NULL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_status_cb callback, void* user_data)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = callback;
-       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = user_data;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unset_recording_status_cb(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_set_recording_limit_reached_cb(recorder_h recorder, recorder_recording_limit_reached_cb callback, void* user_data)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (callback == NULL) {
-               LOGE("NULL pointer callback");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = callback;
-       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = user_data;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_unset_recording_limit_reached_cb(recorder_h recorder)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       handle->user_cb[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL;
-       handle->user_data[_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL;
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_foreach_supported_file_format(recorder_h recorder, recorder_supported_file_format_cb foreach_cb, void *user_data)
-{
-       int i = 0;
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamAttrsInfo info;
-       int format;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (foreach_cb == NULL) {
-               LOGE("NULL pointer foreach_cb");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_FILE_FORMAT, &info);
-       if (ret != MM_ERROR_NONE) {
-               LOGE("mm_camcorder_get_attribute_info failed 0x%x", ret);
-               return __convert_recorder_error_code(__func__, ret);;
-       }
-
-       for (i = 0 ; i < info.int_array.count ; i++) {
-               switch (info.int_array.array[i]) {
-               case MM_FILE_FORMAT_3GP:
-                       format = RECORDER_FILE_FORMAT_3GP;
-                       break;
-               case MM_FILE_FORMAT_MP4 :
-                       format = RECORDER_FILE_FORMAT_MP4;
-                       break;
-               case MM_FILE_FORMAT_AMR :
-                       format = RECORDER_FILE_FORMAT_AMR;
-                       break;
-               case MM_FILE_FORMAT_AAC:
-                       format = RECORDER_FILE_FORMAT_ADTS;
-                       break;
-               case MM_FILE_FORMAT_WAV:
-                       format = RECORDER_FILE_FORMAT_WAV;
-                       break;
-               default :
-                       format = -1;
-                       break;
-               }
-
-               if (format != -1 && !foreach_cb(format,user_data)) {
-                       break;
-               }
-       }
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_attr_set_size_limit(recorder_h recorder, int kbyte)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_MAX_SIZE, kbyte,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_set_time_limit(recorder_h recorder, int second)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("NULL pointer handle");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_TIME_LIMIT, second,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_set_audio_device(recorder_h recorder, recorder_audio_device_e device)
-{
-       if (device < RECORDER_AUDIO_DEVICE_MIC || device > RECORDER_AUDIO_DEVICE_MODEM) {
-               LOGE("invalid device %d", device);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_DEVICE, device);
-}
-
-
-int mmsvc_recorder_set_audio_encoder(recorder_h recorder, recorder_audio_codec_e codec)
-{
-       recorder_s *handle = (recorder_s *)recorder;
-       int audio_table[4] = { MM_AUDIO_CODEC_AMR,      /* RECORDER_AUDIO_CODEC_AMR */
-                              MM_AUDIO_CODEC_AAC,      /* RECORDER_AUDIO_CODEC_AAC */
-                              MM_AUDIO_CODEC_VORBIS,   /* RECORDER_AUDIO_CODEC_VORBIS */
-                              MM_AUDIO_CODEC_WAVE      /* RECORDER_AUDIO_CODEC_PCM */
-       };
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (codec != RECORDER_AUDIO_CODEC_DISABLE &&
-           (codec < RECORDER_AUDIO_CODEC_AMR || codec > RECORDER_AUDIO_CODEC_PCM)) {
-               LOGE("invalid parameter : codec %d", codec);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (handle->type == _RECORDER_TYPE_AUDIO && codec == RECORDER_AUDIO_CODEC_DISABLE) {
-               LOGE("AUDIO_CODEC_DISABLE is not supported in audio mode");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_ENCODER, codec == RECORDER_AUDIO_CODEC_DISABLE ? RECORDER_AUDIO_CODEC_DISABLE : audio_table[codec]);
-}
-
-
-int mmsvc_recorder_get_audio_encoder(recorder_h recorder, recorder_audio_codec_e *codec)
-{
-       int ret = MM_ERROR_NONE;
-       int mm_codec = 0;
-       int audio_disable = 0;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (codec == NULL) {
-               LOGE("codec is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_ENCODER, &mm_codec,
-                                         MMCAM_AUDIO_DISABLE, &audio_disable,
-                                         NULL);
-
-       if (ret == MM_ERROR_NONE && audio_disable == 0) {
-               switch (mm_codec) {
-               case MM_AUDIO_CODEC_AMR :
-                       *codec = RECORDER_AUDIO_CODEC_AMR;
-                       break;
-               case MM_AUDIO_CODEC_AAC :
-                       *codec = RECORDER_AUDIO_CODEC_AAC;
-                       break;
-               case MM_AUDIO_CODEC_VORBIS:
-                       *codec = RECORDER_AUDIO_CODEC_VORBIS;
-                       break;
-               case MM_AUDIO_CODEC_WAVE:
-                       *codec = RECORDER_AUDIO_CODEC_PCM;
-                       break;
-               default :
-                       ret = MM_ERROR_CAMCORDER_INTERNAL;
-                       break;
-               }
-       } else if (ret == MM_ERROR_NONE && audio_disable) {
-               *codec = RECORDER_AUDIO_CODEC_DISABLE;
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_set_video_encoder(recorder_h recorder, recorder_video_codec_e codec)
-{
-       int ret = MM_ERROR_NONE;
-       int video_table[4] = { MM_VIDEO_CODEC_H263,     /* RECORDER_VIDEO_CODEC_H263 */
-                              MM_VIDEO_CODEC_H264,     /* RECORDER_VIDEO_CODEC_H264 */
-                              MM_VIDEO_CODEC_MPEG4,    /* RECORDER_VIDEO_CODEC_MPEG4 */
-                              MM_VIDEO_CODEC_THEORA    /* RECORDER_VIDEO_CODEC_THEORA */
-       };
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-
-       if (codec < RECORDER_VIDEO_CODEC_H263 || codec > RECORDER_VIDEO_CODEC_THEORA) {
-               LOGE("invalid codec %d", codec);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_ENCODER, video_table[codec],
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_get_video_encoder(recorder_h recorder, recorder_video_codec_e *codec)
-{
-       int ret = MM_ERROR_NONE;
-       int mm_codec = 0;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       if (codec == NULL) {
-               LOGE("codec is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_ENCODER, &mm_codec,
-                                         NULL);
-       if (ret == MM_ERROR_NONE) {
-               switch(mm_codec) {
-               case MM_VIDEO_CODEC_H263 :
-                       *codec = RECORDER_VIDEO_CODEC_H263;
-                       break;
-               case MM_VIDEO_CODEC_H264 :
-                       *codec = RECORDER_VIDEO_CODEC_H264;
-                       break;
-               case MM_VIDEO_CODEC_MPEG4 :
-                       *codec = RECORDER_VIDEO_CODEC_MPEG4;
-                       break;
-               case MM_VIDEO_CODEC_THEORA:
-                       *codec = RECORDER_VIDEO_CODEC_THEORA;
-                       break;
-               default :
-                       ret = MM_ERROR_CAMCORDER_INTERNAL;
-                       break;
-               }
-       }
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_set_audio_samplerate(recorder_h recorder, int samplerate)
-{
-       if (samplerate < 1) {
-               LOGE("invalid samplerate %d", samplerate);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_SAMPLERATE, samplerate);
-}
-
-
-int mmsvc_recorder_attr_set_audio_encoder_bitrate(recorder_h recorder, int bitrate)
-{
-       if (bitrate < 1) {
-               LOGE("invalid bitrate %d", bitrate);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_ENCODER_BITRATE, bitrate);
-}
-
-
-int mmsvc_recorder_attr_set_video_encoder_bitrate(recorder_h recorder, int bitrate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_ENCODER_BITRATE, bitrate,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_size_limit(recorder_h recorder, int *kbyte)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_MAX_SIZE, kbyte,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_time_limit(recorder_h recorder, int *second)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TARGET_TIME_LIMIT, second,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_audio_device(recorder_h recorder, recorder_audio_device_e *device)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_DEVICE, device,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_audio_samplerate(recorder_h recorder, int *samplerate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_SAMPLERATE, samplerate,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_audio_encoder_bitrate(recorder_h recorder, int *bitrate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_ENCODER_BITRATE, bitrate,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_video_encoder_bitrate(recorder_h recorder, int *bitrate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_VIDEO_ENCODER_BITRATE, bitrate,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_foreach_supported_audio_encoder(recorder_h recorder, recorder_supported_audio_encoder_cb foreach_cb, void *user_data)
-{
-       int i = 0;
-       int ret = MM_ERROR_NONE;
-       int codec;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamAttrsInfo info;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (foreach_cb == NULL) {
-               LOGE("foreach_cb is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_AUDIO_ENCODER, &info);
-       if (ret != MM_ERROR_NONE) {
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       for (i = 0 ; i < info.int_array.count ; i++) {
-               switch (info.int_array.array[i]) {
-               case MM_AUDIO_CODEC_AMR:
-                       codec = RECORDER_AUDIO_CODEC_AMR;
-                       break;
-               case MM_AUDIO_CODEC_AAC :
-                       codec = RECORDER_AUDIO_CODEC_AAC;
-                       break;
-               case MM_AUDIO_CODEC_VORBIS:
-                       codec = RECORDER_AUDIO_CODEC_VORBIS;
-                       break;
-               case MM_AUDIO_CODEC_WAVE:
-                       codec = RECORDER_AUDIO_CODEC_PCM;
-                       break;
-               default :
-                       codec = -1;
-                       break;
-               }
-               if (codec != -1 && !foreach_cb(codec,user_data)) {
-                       break;
-               }
-       }
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_foreach_supported_video_encoder(recorder_h recorder, recorder_supported_video_encoder_cb foreach_cb, void *user_data)
-{
-       int i = 0;
-       int ret = MM_ERROR_NONE;
-       int codec;
-       recorder_s *handle = (recorder_s *)recorder;
-       MMCamAttrsInfo info;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       if (foreach_cb == NULL) {
-               LOGE("foreach_cb is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attribute_info(handle->mm_handle, MMCAM_VIDEO_ENCODER, &info);
-       if (ret != MM_ERROR_NONE) {
-               return __convert_recorder_error_code(__func__, ret);
-       }
-
-       for (i = 0 ; i < info.int_array.count ; i++) {
-               switch (info.int_array.array[i]){
-               case MM_VIDEO_CODEC_H263 :
-                       codec = RECORDER_VIDEO_CODEC_H263;
-                       break;
-               case MM_VIDEO_CODEC_H264 :
-                       codec = RECORDER_VIDEO_CODEC_H264;
-                       break;
-               case MM_VIDEO_CODEC_MPEG4 :
-                       codec = RECORDER_VIDEO_CODEC_MPEG4;
-                       break;
-               case MM_VIDEO_CODEC_THEORA :
-                       codec = RECORDER_VIDEO_CODEC_THEORA;
-                       break;
-               default :
-                       codec = -1;
-                       break;
-               }
-
-               if (codec != -1 && !foreach_cb(codec,user_data)) {
-                       break;
-               }
-       }
-
-       return RECORDER_ERROR_NONE;
-}
-
-
-int mmsvc_recorder_attr_set_mute(recorder_h recorder, bool enable)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_VOLUME, enable ? 0.0 : 1.0,
-                                         NULL);
-
-       return  __convert_recorder_error_code(__func__, ret);
-}
-
-
-bool mmsvc_recorder_attr_is_muted(recorder_h recorder)
-{
-       int ret = MM_ERROR_NONE;
-       double volume = 1.0;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return false;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_VOLUME, &volume,
-                                         NULL);
-
-       set_last_result(__convert_recorder_error_code(__func__, ret));
-
-       if (volume == 0.0) {
-               return true;
-       } else {
-               return false;
-       }
-}
-
-
-int mmsvc_recorder_attr_set_recording_motion_rate(recorder_h recorder, double rate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_CAMERA_RECORDING_MOTION_RATE, rate,
-                                         NULL);
-
-       return  __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_get_recording_motion_rate(recorder_h recorder, double *rate)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       if (rate == NULL) {
-               LOGE("rate is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_CAMERA_RECORDING_MOTION_RATE, rate,
-                                         NULL);
-
-       return  __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_set_audio_channel(recorder_h recorder, int channel_count)
-{
-       if (channel_count < 1) {
-               LOGE("invalid channel %d", channel_count);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       return _recorder_check_and_set_attribute(recorder, MMCAM_AUDIO_CHANNEL, channel_count);
-}
-
-
-int mmsvc_recorder_attr_get_audio_channel(recorder_h recorder, int *channel_count)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (recorder == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (channel_count == NULL) {
-               LOGE("channel_count is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_AUDIO_CHANNEL, channel_count,
-                                         NULL);
-
-       return  __convert_recorder_error_code(__func__, ret);
-}
-
-
-int mmsvc_recorder_attr_set_orientation_tag(recorder_h recorder, recorder_rotation_e orientation)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       if (orientation > RECORDER_ROTATION_270) {
-               LOGE("invalid orientation %d", orientation);
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
-                                         MMCAM_RECORDER_TAG_ENABLE, true,
-                                         MMCAM_TAG_VIDEO_ORIENTATION, orientation,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}
-
-
-int  mmsvc_recorder_attr_get_orientation_tag(recorder_h recorder, recorder_rotation_e *orientation)
-{
-       int ret = MM_ERROR_NONE;
-       recorder_s *handle = (recorder_s *)recorder;
-
-       if (handle == NULL) {
-               LOGE("handle is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-       if (handle->camera_device_count == 0) {
-               LOGE("RECORDER_ERROR_NOT_SUPPORTED");
-               return RECORDER_ERROR_NOT_SUPPORTED;
-       }
-       if (orientation == NULL) {
-               LOGE("orientation is NULL");
-               return RECORDER_ERROR_INVALID_PARAMETER;
-       }
-
-       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
-                                         MMCAM_TAG_VIDEO_ORIENTATION, orientation,
-                                         NULL);
-
-       return __convert_recorder_error_code(__func__, ret);
-}