From 9511338744009bcb1be18c6193fe334890be945e Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Thu, 25 Feb 2016 12:38:48 +0900 Subject: [Release version 0.2.15] Add new API to support sound stream information set Change-Id: Icc6f2fcf01ce82d296cea4c47c3a98fc284b4030 Signed-off-by: Jeongmo Yang --- legacy/include/legacy_recorder.h | 20 +++++ legacy/src/legacy_recorder.c | 32 ++++++++ muse/include/muse_recorder.h | 3 +- muse/include/muse_recorder_msg.h | 8 +- muse/src/muse_recorder_dispatcher.c | 146 ++++++++++++++++++++++-------------- packaging/mmsvc-recorder.spec | 4 +- 6 files changed, 148 insertions(+), 65 deletions(-) diff --git a/legacy/include/legacy_recorder.h b/legacy/include/legacy_recorder.h index f0c5ac1..382ce0f 100644 --- a/legacy/include/legacy_recorder.h +++ b/legacy/include/legacy_recorder.h @@ -656,6 +656,26 @@ int legacy_recorder_set_file_format(recorder_h recorder, recorder_file_format_e int legacy_recorder_get_file_format(recorder_h recorder, recorder_file_format_e *format); +/** + * @brief Sets the recorder's sound manager stream information. + * @since_tizen 3.0 + * @remarks You can set sound stream information including audio routing. + * For more details, please refer to @ref CAPI_MEDIA_SOUND_MANAGER_MODULE + * @param[in] recorder The handle to the media recorder + * @param[in] stream_type The type of sound manager info + * @param[in] stream_index The index of sound manager info + * @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 + * @pre The recorder state must be #RECORDER_STATE_CREATED or #RECORDER_STATE_READY + * @see #sound_stream_info_h + * @see sound_manager_create_stream_information() + * @see sound_manager_destroy_stream_information() + */ +int legacy_recorder_set_sound_stream_info(recorder_h recorder, char *stream_type, int stream_index); + + /** * @} */ diff --git a/legacy/src/legacy_recorder.c b/legacy/src/legacy_recorder.c index 8e36a5c..2d194bf 100644 --- a/legacy/src/legacy_recorder.c +++ b/legacy/src/legacy_recorder.c @@ -2023,3 +2023,35 @@ int legacy_recorder_attr_set_root_directory(recorder_h recorder, const char *ro return __convert_recorder_error_code(__func__, ret); } + + +int legacy_recorder_set_sound_stream_info(recorder_h recorder, char *stream_type, int stream_index) +{ + 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 (stream_type == NULL || stream_index < 0) { + LOGE("invalid parameter %p %d", stream_type, stream_index); + 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_SOUND_STREAM_TYPE, stream_type, strlen(stream_type), + MMCAM_SOUND_STREAM_INDEX, stream_index, + NULL); + + return __convert_recorder_error_code(__func__, ret); +} + diff --git a/muse/include/muse_recorder.h b/muse/include/muse_recorder.h index bcad360..2c0f3bf 100644 --- a/muse/include/muse_recorder.h +++ b/muse/include/muse_recorder.h @@ -92,6 +92,7 @@ typedef enum { MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG, //55 MUSE_RECORDER_API_ATTR_SET_ROOT_DIRECTORY, MUSE_RECORDER_API_RETURN_BUFFER, + MUSE_RECORDER_API_SET_SOUND_STREAM_INFO, MUSE_RECORDER_API_MAX } muse_recorder_api_e; @@ -168,7 +169,7 @@ typedef enum { /** * @brief Definition for the wait time of the ipc callback. */ -#define CALLBACK_TIME_OUT 3 +#define RECORDER_CALLBACK_TIME_OUT 3 #ifdef __cplusplus diff --git a/muse/include/muse_recorder_msg.h b/muse/include/muse_recorder_msg.h index 953a021..35f1bdd 100644 --- a/muse/include/muse_recorder_msg.h +++ b/muse/include/muse_recorder_msg.h @@ -175,7 +175,7 @@ typedef const char* STRING; LOGE("sending message failed"); \ ret = RECORDER_ERROR_INVALID_OPERATION; \ } else \ - ret = client_wait_for_cb_return(api, cb_info, CALLBACK_TIME_OUT); \ + ret = client_wait_for_cb_return(api, cb_info, RECORDER_CALLBACK_TIME_OUT); \ muse_core_msg_json_factory_free(__sndMsg__); \ }while(0) @@ -202,7 +202,7 @@ typedef const char* STRING; LOGE("sending message failed"); \ ret = RECORDER_ERROR_INVALID_OPERATION; \ } else \ - ret = client_wait_for_cb_return(api, cb_info, CALLBACK_TIME_OUT); \ + ret = client_wait_for_cb_return(api, cb_info, RECORDER_CALLBACK_TIME_OUT); \ muse_core_msg_json_factory_free(__sndMsg__); \ }while(0) @@ -255,7 +255,7 @@ typedef const char* STRING; LOGE("sending message failed"); \ ret = RECORDER_ERROR_INVALID_OPERATION; \ } else \ - ret = client_wait_for_cb_return(api, cb_info, CALLBACK_TIME_OUT); \ + ret = client_wait_for_cb_return(api, cb_info, RECORDER_CALLBACK_TIME_OUT); \ muse_core_msg_json_factory_free(__sndMsg__); \ }while(0) @@ -287,7 +287,7 @@ typedef const char* STRING; LOGE("sending message failed"); \ ret = RECORDER_ERROR_INVALID_OPERATION; \ } else \ - ret = client_wait_for_cb_return(api, cb_info, CALLBACK_TIME_OUT); \ + ret = client_wait_for_cb_return(api, cb_info, RECORDER_CALLBACK_TIME_OUT); \ muse_core_msg_json_factory_free(__sndMsg__); \ }while(0) diff --git a/muse/src/muse_recorder_dispatcher.c b/muse/src/muse_recorder_dispatcher.c index 426a03a..8707d7f 100644 --- a/muse/src/muse_recorder_dispatcher.c +++ b/muse/src/muse_recorder_dispatcher.c @@ -1846,65 +1846,95 @@ int recorder_dispatcher_return_buffer(muse_module_h module) return MUSE_RECORDER_ERROR_NONE; } + +int recorder_dispatcher_set_sound_stream_info(muse_module_h module) +{ + int ret = RECORDER_ERROR_NONE; + char stream_type[MUSE_RECORDER_MSG_MAX_LENGTH] = {0,}; + int stream_index = 0; + muse_recorder_api_e api = MUSE_RECORDER_API_SET_SOUND_STREAM_INFO; + muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE; + muse_recorder_handle_s *muse_recorder = NULL; + + muse_recorder = (muse_recorder_handle_s *)muse_core_ipc_get_handle(module); + if (muse_recorder == NULL) { + LOGE("NULL handle"); + ret = RECORDER_ERROR_INVALID_OPERATION; + muse_recorder_msg_return(api, class, ret, module); + return MUSE_RECORDER_ERROR_NONE; + } + + muse_recorder_msg_get_string(stream_type, muse_core_client_get_msg(module)); + muse_recorder_msg_get(stream_index, muse_core_client_get_msg(module)); + + ret = legacy_recorder_set_sound_stream_info(muse_recorder->recorder_handle, stream_type, stream_index); + + muse_recorder_msg_return(api, class, ret, module); + + return MUSE_RECORDER_ERROR_NONE; +} + + int (*dispatcher[MUSE_RECORDER_API_MAX]) (muse_module_h module) = { - recorder_dispatcher_create, /* MUSE_RECORDER_API_CREATE, */ - recorder_dispatcher_destroy, /* MUSE_RECORDER_API_DESTROY, */ - recorder_dispatcher_get_state, /* MUSE_RECORDER_API_GET_STATE, */ - recorder_dispatcher_prepare, /* MUSE_RECORDER_API_PREPARE, */ - recorder_dispatcher_unprepare, /* MUSE_RECORDER_API_UNPREPARE, */ - recorder_dispatcher_start, /* MUSE_RECORDER_API_START, */ - recorder_dispatcher_pause, /* MUSE_RECORDER_API_PAUSE, */ - recorder_dispatcher_commit, /* MUSE_RECORDER_API_COMMIT, */ - recorder_dispatcher_cancel, /* MUSE_RECORDER_API_CANCEL, */ - recorder_dispatcher_set_video_resolution, /* MUSE_RECORDER_API_SET_VIDEO_RESOLUTION, */ - recorder_dispatcher_get_video_resolution, /* MUSE_RECORDER_API_GET_VIDEO_RESOLUTION, */ - recorder_dispatcher_foreach_supported_video_resolution, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_RESOLUTION, */ - recorder_dispatcher_get_audio_level, /* MUSE_RECORDER_API_GET_AUDIO_LEVEL, */ - recorder_dispatcher_set_filename, /* MUSE_RECORDER_API_SET_FILENAME, */ - recorder_dispatcher_get_filename, /* MUSE_RECORDER_API_GET_FILENAME, */ - recorder_dispatcher_set_file_format, /* MUSE_RECORDER_API_SET_FILE_FORMAT, */ - recorder_dispatcher_get_file_format, /* MUSE_RECORDER_API_GET_FILE_FORMAT, */ - recorder_dispatcher_set_state_changed_cb, /* MUSE_RECORDER_API_SET_STATE_CHANGED_CB, */ - recorder_dispatcher_unset_state_changed_cb, /* MUSE_RECORDER_API_UNSET_STATE_CHANGED_CB, */ - recorder_dispatcher_set_interrupted_cb, /* MUSE_RECORDER_API_SET_INTERRUPTED_CB, */ - recorder_dispatcher_unset_interrupted_cb, /* MUSE_RECORDER_API_UNSET_INTERRUPTED_CB, */ - recorder_dispatcher_set_audio_stream_cb, /* MUSE_RECORDER_API_SET_AUDIO_STREAM_CB, */ - recorder_dispatcher_unset_audio_stream_cb, /* MUSE_RECORDER_API_UNSET_AUDIO_STREAM_CB, */ - recorder_dispatcher_set_error_cb, /* MUSE_RECORDER_API_SET_ERROR_CB, */ - recorder_dispatcher_unset_error_cb, /* MUSE_RECORDER_API_UNSET_ERROR_CB, */ - recorder_dispatcher_set_recording_status_cb, /* MUSE_RECORDER_API_SET_RECORDING_STATUS_CB, */ - recorder_dispatcher_unset_recording_status_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_STATUS_CB, */ - recorder_dispatcher_set_recording_limit_reached_cb, /* MUSE_RECORDER_API_SET_RECORDING_LIMIT_RECHEAD_CB, */ - recorder_dispatcher_unset_recording_limit_reached_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_LIMIT_RECHEAD_CB, */ - recorder_dispatcher_foreach_supported_file_format, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT, */ - recorder_dispatcher_attr_set_size_limit, /* MUSE_RECORDER_API_ATTR_SET_SIZE_LIMIT, */ - recorder_dispatcher_attr_set_time_limit, /* MUSE_RECORDER_API_ATTR_SET_TIME_LIMIT, */ - recorder_dispatcher_attr_set_audio_device, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_DEVICE, */ - recorder_dispatcher_set_audio_encoder, /* MUSE_RECORDER_API_SET_AUDIO_ENCODER, */ - recorder_dispatcher_get_audio_encoder, /* MUSE_RECORDER_API_GET_AUDIO_ENCODER, */ - recorder_dispatcher_set_video_encoder, /* MUSE_RECORDER_API_SET_VIDEO_ENCODER, */ - recorder_dispatcher_get_video_encoder, /* MUSE_RECORDER_API_GET_VIDEO_ENCODER, */ - recorder_dispatcher_attr_set_audio_samplerate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_SAMPLERATE, */ - recorder_dispatcher_attr_set_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_ENCODER_BITRATE, */ - recorder_dispatcher_attr_set_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_VIDEO_ENCODER_BITRATE, */ - recorder_dispatcher_attr_get_size_limit, /* MUSE_RECORDER_API_ATTR_GET_SIZE_LIMIT, */ - recorder_dispatcher_attr_get_time_limit, /* MUSE_RECORDER_API_ATTR_GET_TIME_LIMIT, */ - recorder_dispatcher_attr_get_audio_device, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_DEVICE, */ - recorder_dispatcher_attr_get_audio_samplerate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_SAMPLERATE, */ - recorder_dispatcher_attr_get_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_ENCODER_BITRATE, */ - recorder_dispatcher_attr_get_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_VIDEO_ENCODER_BITRATE, */ - recorder_dispatcher_foreach_supported_audio_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER, */ - recorder_dispatcher_foreach_supported_video_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER, */ - recorder_dispatcher_attr_set_mute, /* MUSE_RECORDER_API_ATTR_SET_MUTE, */ - recorder_dispatcher_attr_is_muted, /* MUSE_RECORDER_API_ATTR_IS_MUTED, */ - recorder_dispatcher_attr_set_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_SET_RECORDING_MOTION_RATE, */ - recorder_dispatcher_attr_get_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_GET_RECORDING_MOTION_RATE, */ - recorder_dispatcher_attr_set_audio_channel, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_CHANNEL, */ - recorder_dispatcher_attr_get_audio_channel, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_CHANNEL, */ - recorder_dispatcher_attr_set_orientation_tag, /* MUSE_RECORDER_API_ATTR_SET_ORIENTATION_TAG, */ - recorder_dispatcher_attr_get_orientation_tag, /* MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG, */ - recorder_dispatcher_attr_set_root_directory, /* MUSE_RECORDER_API_ATTR_SET_ROOT_DIRECTORY, */ - recorder_dispatcher_return_buffer, /* MUSE_RECORDER_API_RETURN_BUFFER, */ + recorder_dispatcher_create, /* MUSE_RECORDER_API_CREATE */ + recorder_dispatcher_destroy, /* MUSE_RECORDER_API_DESTROY */ + recorder_dispatcher_get_state, /* MUSE_RECORDER_API_GET_STATE */ + recorder_dispatcher_prepare, /* MUSE_RECORDER_API_PREPARE */ + recorder_dispatcher_unprepare, /* MUSE_RECORDER_API_UNPREPARE */ + recorder_dispatcher_start, /* MUSE_RECORDER_API_START */ + recorder_dispatcher_pause, /* MUSE_RECORDER_API_PAUSE */ + recorder_dispatcher_commit, /* MUSE_RECORDER_API_COMMIT */ + recorder_dispatcher_cancel, /* MUSE_RECORDER_API_CANCEL */ + recorder_dispatcher_set_video_resolution, /* MUSE_RECORDER_API_SET_VIDEO_RESOLUTION */ + recorder_dispatcher_get_video_resolution, /* MUSE_RECORDER_API_GET_VIDEO_RESOLUTION */ + recorder_dispatcher_foreach_supported_video_resolution, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_RESOLUTION */ + recorder_dispatcher_get_audio_level, /* MUSE_RECORDER_API_GET_AUDIO_LEVEL */ + recorder_dispatcher_set_filename, /* MUSE_RECORDER_API_SET_FILENAME */ + recorder_dispatcher_get_filename, /* MUSE_RECORDER_API_GET_FILENAME */ + recorder_dispatcher_set_file_format, /* MUSE_RECORDER_API_SET_FILE_FORMAT */ + recorder_dispatcher_get_file_format, /* MUSE_RECORDER_API_GET_FILE_FORMAT */ + recorder_dispatcher_set_state_changed_cb, /* MUSE_RECORDER_API_SET_STATE_CHANGED_CB */ + recorder_dispatcher_unset_state_changed_cb, /* MUSE_RECORDER_API_UNSET_STATE_CHANGED_CB */ + recorder_dispatcher_set_interrupted_cb, /* MUSE_RECORDER_API_SET_INTERRUPTED_CB */ + recorder_dispatcher_unset_interrupted_cb, /* MUSE_RECORDER_API_UNSET_INTERRUPTED_CB */ + recorder_dispatcher_set_audio_stream_cb, /* MUSE_RECORDER_API_SET_AUDIO_STREAM_CB */ + recorder_dispatcher_unset_audio_stream_cb, /* MUSE_RECORDER_API_UNSET_AUDIO_STREAM_CB */ + recorder_dispatcher_set_error_cb, /* MUSE_RECORDER_API_SET_ERROR_CB */ + recorder_dispatcher_unset_error_cb, /* MUSE_RECORDER_API_UNSET_ERROR_CB */ + recorder_dispatcher_set_recording_status_cb, /* MUSE_RECORDER_API_SET_RECORDING_STATUS_CB */ + recorder_dispatcher_unset_recording_status_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_STATUS_CB */ + recorder_dispatcher_set_recording_limit_reached_cb, /* MUSE_RECORDER_API_SET_RECORDING_LIMIT_RECHEAD_CB */ + recorder_dispatcher_unset_recording_limit_reached_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_LIMIT_RECHEAD_CB */ + recorder_dispatcher_foreach_supported_file_format, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT */ + recorder_dispatcher_attr_set_size_limit, /* MUSE_RECORDER_API_ATTR_SET_SIZE_LIMIT */ + recorder_dispatcher_attr_set_time_limit, /* MUSE_RECORDER_API_ATTR_SET_TIME_LIMIT */ + recorder_dispatcher_attr_set_audio_device, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_DEVICE */ + recorder_dispatcher_set_audio_encoder, /* MUSE_RECORDER_API_SET_AUDIO_ENCODER */ + recorder_dispatcher_get_audio_encoder, /* MUSE_RECORDER_API_GET_AUDIO_ENCODER */ + recorder_dispatcher_set_video_encoder, /* MUSE_RECORDER_API_SET_VIDEO_ENCODER */ + recorder_dispatcher_get_video_encoder, /* MUSE_RECORDER_API_GET_VIDEO_ENCODER */ + recorder_dispatcher_attr_set_audio_samplerate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_SAMPLERATE */ + recorder_dispatcher_attr_set_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_ENCODER_BITRATE */ + recorder_dispatcher_attr_set_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_VIDEO_ENCODER_BITRATE */ + recorder_dispatcher_attr_get_size_limit, /* MUSE_RECORDER_API_ATTR_GET_SIZE_LIMIT */ + recorder_dispatcher_attr_get_time_limit, /* MUSE_RECORDER_API_ATTR_GET_TIME_LIMIT */ + recorder_dispatcher_attr_get_audio_device, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_DEVICE */ + recorder_dispatcher_attr_get_audio_samplerate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_SAMPLERATE */ + recorder_dispatcher_attr_get_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_ENCODER_BITRATE */ + recorder_dispatcher_attr_get_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_VIDEO_ENCODER_BITRATE */ + recorder_dispatcher_foreach_supported_audio_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER */ + recorder_dispatcher_foreach_supported_video_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER */ + recorder_dispatcher_attr_set_mute, /* MUSE_RECORDER_API_ATTR_SET_MUTE */ + recorder_dispatcher_attr_is_muted, /* MUSE_RECORDER_API_ATTR_IS_MUTED */ + recorder_dispatcher_attr_set_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_SET_RECORDING_MOTION_RATE */ + recorder_dispatcher_attr_get_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_GET_RECORDING_MOTION_RATE */ + recorder_dispatcher_attr_set_audio_channel, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_CHANNEL */ + recorder_dispatcher_attr_get_audio_channel, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_CHANNEL */ + recorder_dispatcher_attr_set_orientation_tag, /* MUSE_RECORDER_API_ATTR_SET_ORIENTATION_TAG */ + recorder_dispatcher_attr_get_orientation_tag, /* MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG */ + recorder_dispatcher_attr_set_root_directory, /* MUSE_RECORDER_API_ATTR_SET_ROOT_DIRECTORY */ + recorder_dispatcher_return_buffer, /* MUSE_RECORDER_API_RETURN_BUFFER */ + recorder_dispatcher_set_sound_stream_info /* MUSE_RECORDER_API_SET_SOUND_STREAM_INFO */ }; diff --git a/packaging/mmsvc-recorder.spec b/packaging/mmsvc-recorder.spec index f0a4f39..143ff0b 100644 --- a/packaging/mmsvc-recorder.spec +++ b/packaging/mmsvc-recorder.spec @@ -1,7 +1,7 @@ Name: mmsvc-recorder Summary: A Recorder module for muse server -Version: 0.2.14 -Release: 1 +Version: 0.2.15 +Release: 0 Group: Multimedia/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz -- cgit v1.2.3