From: KimJeongYeon Date: Wed, 7 Sep 2016 06:59:45 +0000 (+0900) Subject: sound-manager: add new sound filter API X-Git-Tag: submit/tizen/20170405.072228~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f3b3769d6f9ec586567a55f2bc2974d2f7c36282;p=platform%2Fcore%2Fapi%2Fsound-manager.git sound-manager: add new sound filter API Internal filter APIs (for proposal) 1) int sound_manager_set_filter(sound_stream_type_e stream_type, sound_filter_e filter) 2) int sound_manager_unset_filter(sound_stream_type_e stream_type) 3) int sound_manager_set_filter_preset(sound_stream_type_e stream_type, sound_filter_e filter, sound_filter_preset_e preset) [Version] 0.3.108 [Profile] Common [Issue Type] New Feature Signed-off-by: KimJeongYeon Change-Id: If13b28072be5b4eedf0dbfc3da86f74eada96dd2 --- diff --git a/include/sound_manager_internal.h b/include/sound_manager_internal.h index 9dfa9d5..4245e31 100644 --- a/include/sound_manager_internal.h +++ b/include/sound_manager_internal.h @@ -71,6 +71,30 @@ typedef enum { SOUND_STREAM_TYPE_SOLO, /**< Sound stream type for solo */ } sound_stream_type_internal_e; +/** + * @internal + * @brief Enumeration for sound filters. + * @since_tizen 4.0 + */ +typedef enum { + SOUND_FILTER_NONE = 0, + SOUND_FILTER_SOUNDALIVE, +} sound_filter_e; + +/** + * @internal + * @brief Enumeration for filter preset. + * @since_tizen 4.0 + */ +typedef enum { + SOUND_FILTER_PRESET_SOUNDALIVE_NORMAL = 0, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_TUBE, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_VIRT71, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_STUDIO, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_CLUB, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_CONCERT_HALL, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ +} sound_filter_preset_e; + /** * @internal * @brief Gets the maximum master volume level. @@ -322,6 +346,54 @@ int sound_manager_start_virtual_stream(virtual_sound_stream_h virtual_stream); */ int sound_manager_stop_virtual_stream(virtual_sound_stream_h virtual_stream); +/** + * @internal + * @brief Set sound filter and apply to audio streams given selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type stream type to apply + * @param[in] filter sound filter to apply + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_unset_filter() + */ +int sound_manager_set_filter(sound_stream_type_e stream_type, sound_filter_e filter); + +/** + * @internal + * @brief Unset sound filter and remove from audio streams given selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type stream type to remove + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_set_filter() + */ +int sound_manager_unset_filter(sound_stream_type_e stream_type); + +/** + * @internal + * @brief Apply preset configuration to the filter according to selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type given stream type + * @param[in] filter given sound filter + * @param[in] preset filter preset to apply + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_set_filter() + */ +int sound_manager_set_filter_preset(sound_stream_type_e stream_type, sound_filter_e filter, sound_filter_preset_e preset); + /** * @} */ diff --git a/include/sound_manager_internal_tv.h b/include/sound_manager_internal_tv.h index 136fb6a..f0caebc 100644 --- a/include/sound_manager_internal_tv.h +++ b/include/sound_manager_internal_tv.h @@ -71,6 +71,30 @@ typedef enum { SOUND_STREAM_TYPE_SOLO, /**< Sound stream type for solo */ } sound_stream_type_internal_e; +/** + * @internal + * @brief Enumeration for sound filters. + * @since_tizen 4.0 + */ +typedef enum { + SOUND_FILTER_NONE = 0, + SOUND_FILTER_SOUNDALIVE, +} sound_filter_e; + +/** + * @internal + * @brief Enumeration for filter preset. + * @since_tizen 4.0 + */ +typedef enum { + SOUND_FILTER_PRESET_SOUNDALIVE_NORMAL = 0, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_TUBE, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_VIRT71, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_STUDIO, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_CLUB, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ + SOUND_FILTER_PRESET_SOUNDALIVE_CONCERT_HALL, /**< Filter preset for SOUND_FILTER_SOUNDALIVE */ +} sound_filter_preset_e; + /** * @internal * @brief Creates a handle for stream information. @@ -276,6 +300,54 @@ int sound_manager_start_virtual_stream(virtual_sound_stream_h virtual_stream); */ int sound_manager_stop_virtual_stream(virtual_sound_stream_h virtual_stream); +/** + * @internal + * @brief Set sound filter and apply to audio streams given selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type stream type to apply + * @param[in] filter sound filter to apply + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_unset_filter() + */ +int sound_manager_set_filter(sound_stream_type_e stream_type, sound_filter_e filter); + +/** + * @internal + * @brief Unset sound filter and remove from audio streams given selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type stream type to remove + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_set_filter() + */ +int sound_manager_unset_filter(sound_stream_type_e stream_type); + +/** + * @internal + * @brief Apply preset configuration to the filter according to selected stream type. + * @since_tizen 4.0 + * @param[in] stream_type given stream type + * @param[in] filter given sound filter + * @param[in] preset filter preset to apply + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + * @retval #SOUND_MANAGER_ERROR_NOT_SUPPORTED Not supported + * @see sound_manager_set_filter() + */ +int sound_manager_set_filter_preset(sound_stream_type_e stream_type, sound_filter_e filter, sound_filter_preset_e preset); + /** * @} */ diff --git a/packaging/capi-media-sound-manager.spec b/packaging/capi-media-sound-manager.spec old mode 100755 new mode 100644 index 70d9dfe..89570f2 --- a/packaging/capi-media-sound-manager.spec +++ b/packaging/capi-media-sound-manager.spec @@ -1,6 +1,6 @@ Name: capi-media-sound-manager Summary: Sound Manager library -Version: 0.3.107 +Version: 0.3.108 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/sound_manager_internal.c b/src/sound_manager_internal.c index c5e26a8..e1d3765 100644 --- a/src/sound_manager_internal.c +++ b/src/sound_manager_internal.c @@ -261,3 +261,147 @@ int sound_manager_stop_virtual_stream(virtual_sound_stream_h virtual_stream) return _convert_sound_manager_error_code(__func__, ret); } + +static int _convert_filter(sound_filter_e filter, char **filter_str, char **filter_params_str) +{ + int ret = MM_ERROR_NONE; + + if (filter_str == NULL) + return MM_ERROR_INVALID_ARGUMENT; + + switch (filter) { + case SOUND_FILTER_SOUNDALIVE: + *filter_str = "ladspa-sink"; + *filter_params_str = "plugin=audiofilters-sec-ladspa label=audiofiltersec_stereo control=1,0"; + break; + default: + LOGE("could not find filter[%d]", filter); + ret = MM_ERROR_SOUND_INTERNAL; + break; + } + LOGI("filter[%s]", *filter_str); + + return ret; +} + +static int _convert_filter_preset(sound_filter_preset_e preset, char **control) +{ + int ret = MM_ERROR_NONE; + + if (control == NULL) + return MM_ERROR_INVALID_ARGUMENT; + + switch (preset) { + case SOUND_FILTER_PRESET_SOUNDALIVE_NORMAL: + *control = "1,0"; + break; + case SOUND_FILTER_PRESET_SOUNDALIVE_TUBE: + *control = "1,1"; + break; + case SOUND_FILTER_PRESET_SOUNDALIVE_VIRT71: + *control = "1,2"; + break; + case SOUND_FILTER_PRESET_SOUNDALIVE_STUDIO: + *control = "1,3"; + break; + case SOUND_FILTER_PRESET_SOUNDALIVE_CLUB: + *control = "1,4"; + break; + case SOUND_FILTER_PRESET_SOUNDALIVE_CONCERT_HALL: + *control = "1,5"; + break; + default: + LOGE("could not find the preset[%d]", preset); + ret = MM_ERROR_SOUND_INTERNAL; + break; + } + LOGI("preset[%s]", *control); + + return ret; +} + +int sound_manager_set_filter(sound_stream_type_e stream_type, sound_filter_e filter) +{ + int ret = MM_ERROR_NONE; + char *stream_type_str = NULL; + char *filter_str = NULL, *filter_params_str = NULL; + + LOGI(">> enter"); + + if ((ret = _convert_stream_type(stream_type, &stream_type_str)) != MM_ERROR_NONE) + goto finish; + if ((ret = _convert_filter(filter, &filter_str, &filter_params_str)) != MM_ERROR_NONE) + goto finish; + + switch (filter) { + case SOUND_FILTER_NONE: + ret = SOUND_MANAGER_ERROR_NOT_SUPPORTED; + LOGI("no filter apply"); + break; + case SOUND_FILTER_SOUNDALIVE: + if ((ret = _convert_filter(filter, &filter_str, &filter_params_str)) != MM_ERROR_NONE) + break; + ret = mm_sound_set_filter(stream_type_str, filter_str, filter_params_str, stream_type_str); + LOGI("apply SoundAlive filter"); + break; + default: + ret = SOUND_MANAGER_ERROR_INVALID_PARAMETER; + LOGE("invaid sound filter"); + break; + } + +finish: + return _convert_sound_manager_error_code(__func__, ret); +} + +int sound_manager_unset_filter(sound_stream_type_e stream_type) +{ + int ret = MM_ERROR_NONE; + char *stream_type_str = NULL; + + LOGI(">> enter"); + + if ((ret = _convert_stream_type(stream_type, &stream_type_str)) != MM_ERROR_NONE) + goto finish; + + ret = mm_sound_unset_filter(stream_type_str); + LOGI("stream_type[%s]", stream_type_str); + +finish: + return _convert_sound_manager_error_code(__func__, ret); +} + +int sound_manager_set_filter_preset(sound_stream_type_e stream_type, sound_filter_e filter, sound_filter_preset_e preset) +{ + int ret = MM_ERROR_NONE; + char *stream_type_str = NULL; + char *filter_str = NULL, *filter_params_str = NULL; + char *control_str = NULL; + + LOGI(">> enter"); + + if ((ret = _convert_stream_type(stream_type, &stream_type_str)) != MM_ERROR_NONE) + goto finish; + if ((ret = _convert_filter(filter, &filter_str, &filter_params_str)) != MM_ERROR_NONE) + goto finish; + if ((ret = _convert_filter_preset(preset, &control_str)) != MM_ERROR_NONE) + goto finish; + + switch (filter) { + case SOUND_FILTER_NONE: + ret = SOUND_MANAGER_ERROR_NOT_SUPPORTED; + LOGI("no filter preset"); + break; + case SOUND_FILTER_SOUNDALIVE: + ret = mm_sound_control_filter(stream_type_str, filter_str, control_str); + LOGI("apply SoundAlive filter"); + break; + default: + ret = SOUND_MANAGER_ERROR_INVALID_PARAMETER; + LOGE("invaid sound filter"); + break; + } + +finish: + return _convert_sound_manager_error_code(__func__, ret); +}