sound-manager: add new sound filter API 00/87400/20
authorKimJeongYeon <jeongyeon.kim@samsung.com>
Wed, 7 Sep 2016 06:59:45 +0000 (15:59 +0900)
committerKimJeongYeon <jeongyeon.kim@samsung.com>
Thu, 30 Mar 2017 00:17:13 +0000 (09:17 +0900)
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 <jeongyeon.kim@samsung.com>
Change-Id: If13b28072be5b4eedf0dbfc3da86f74eada96dd2

include/sound_manager_internal.h
include/sound_manager_internal_tv.h
packaging/capi-media-sound-manager.spec [changed mode: 0755->0644]
src/sound_manager_internal.c

index 9dfa9d5..4245e31 100644 (file)
@@ -73,6 +73,30 @@ typedef enum {
 
 /**
  * @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.
  * @since_tizen 3.0
  * @param[out] max_level       The maximum volume level
@@ -323,6 +347,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);
+
+/**
  * @}
  */
 
index 136fb6a..f0caebc 100644 (file)
@@ -73,6 +73,30 @@ typedef enum {
 
 /**
  * @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.
  * @since_tizen 3.0
  *
@@ -277,6 +301,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);
+
+/**
  * @}
  */
 
old mode 100755 (executable)
new mode 100644 (file)
index 70d9dfe..89570f2
@@ -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
index c5e26a8..e1d3765 100644 (file)
@@ -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);
+}