sound_manager_internal: Revise echo-cancellation API set 18/273418/5 accepted/tizen/unified/20220418.141248 submit/tizen/20220415.044607 submit/tizen/20220415.050245
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 5 Apr 2022 08:35:02 +0000 (17:35 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 5 Apr 2022 09:22:07 +0000 (18:22 +0900)
sound_manager_get_echo_cancel_reference_device()
 - The second parameter is replaced to int* variable of device id.
   Because the device handle's lifecycle belongs to the device list.
 - It is changed not to occur error even if the setter function has
   not been called. Rather, SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE
   is newly added that will be returned to the out-parameter.

sound_manager_set_echo_cancel_reference_device()
 - SOUND_MANAGER_ERROR_POLICY error is added to notify the situation
   that the reference device handle is not supported by the stream info.

Logs for API result are added.
Missing null check is added.
Doxygen is improved.

[Version] 0.6.46
[Issue Type] Internal API

Change-Id: I04b935cb901fa3a5cbc1f47731496d051ee68a85
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/sound_manager_internal.h
include/sound_manager_private.h
packaging/capi-media-sound-manager.spec
src/sound_manager_internal.c
src/sound_manager_private.c

index 9705046..6c4e3ae 100644 (file)
@@ -133,6 +133,14 @@ typedef enum {
 
 /**
  * @internal
+ * @brief Definition for the value indicating that the reference device for the stream information was not set.
+ * @since_tizen 7.0
+ * @see sound_manager_get_echo_cancel_reference_device()
+ */
+#define SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE    0
+
+/**
+ * @internal
  * @brief Gets the maximum master volume level.
  * @since_tizen 3.0
  * @param[out] max_level       The maximum volume level
@@ -1211,14 +1219,15 @@ int sound_manager_stop_discover_remote_device(void);
  * @internal
  * @brief Sets acoustic echo cancellation reference device
  * @since_tizen 7.0
- * @remark You can get a device handle by using sound_manager_get_device_list() and sound_manager_get_next_device()
+ * @remark You can get a device handle by using sound_manager_get_device_list() and sound_manager_get_next_device()\n
+ *     If @a device is not supported by @a stream_info, #SOUND_MANAGER_ERROR_POLICY will be returned.
  * @param[in]  stream_info     The handle of stream information
  * @param[in]  device  The reference device of echo-cancellation
  * @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_INVALID_OPERATION Invalid operation
+ * @retval #SOUND_MANAGER_ERROR_POLICY Noncompliance with the sound system policy
  * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
  * @see sound_manager_create_stream_information()
  * @see sound_manager_get_device_list()
@@ -1231,16 +1240,22 @@ int sound_manager_set_echo_cancel_reference_device(sound_stream_info_h stream_in
  * @internal
  * @brief Gets acoustic echo cancellation reference device
  * @since_tizen 7.0
+ * @remarks    If there is no reference device that has been set, the output value will be set to
+ *     #SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE.\n
+ *     You can get a device handle of the id value by using sound_manager_get_device_list(),
+ *     sound_manager_get_next_device() and sound_manager_get_device_id().
  * @param[in]  stream_info     The handle of stream information
- * @param[out] device  The reference device of echo-cancellation
+ * @param[out] device_id       The reference device id of echo-cancellation
  * @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_INVALID_OPERATION Invalid operation
  * @see sound_manager_create_stream_information()
+ * @see sound_manager_get_device_list()
+ * @see sound_manager_get_next_device()
+ * @see sound_manager_free_device_list()
  */
-int sound_manager_get_echo_cancel_reference_device(sound_stream_info_h stream_info, sound_device_h *device);
+int sound_manager_get_echo_cancel_reference_device(sound_stream_info_h stream_info, int *device_id);
 
 /**
  * @internal
index 6de1ff6..1be415f 100644 (file)
@@ -211,7 +211,7 @@ typedef struct _sound_stream_info_s {
        void *user_data;
        manual_route_info_s manual_route_info;
        preferred_device_info_s preferred_device_info;
-       sound_device_h reference_device;
+       int echo_cancel_reference_device;
        pthread_mutex_t focus_state_mutex;
        pthread_mutex_t focus_cb_mutex;
        pthread_mutex_t vstream_mutex;
@@ -393,7 +393,7 @@ int _get_latest_stream_pid(int stream_type, unsigned int *pid);
 
 int _set_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_device_h device);
 
-int _get_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_device_h *device);
+int _get_echo_cancel_reference_device(sound_stream_info_s *stream_info, int *device_id);
 
 int _set_rpi_playback_route(sound_rpi_playback_route_type type);
 
index e306a54..798cf30 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.6.45
+Version:    0.6.46
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 2ec8673..a6eeed7 100644 (file)
@@ -896,16 +896,12 @@ int sound_manager_set_remote_permission(int id, bool allowed)
 
 int sound_manager_set_echo_cancel_reference_device(sound_stream_info_h stream_info, sound_device_h device)
 {
-       sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
-
-       return _set_echo_cancel_reference_device(stream_h, device);
+       return _set_echo_cancel_reference_device((sound_stream_info_s*)stream_info, device);
 }
 
-int sound_manager_get_echo_cancel_reference_device(sound_stream_info_h stream_info, sound_device_h *device)
+int sound_manager_get_echo_cancel_reference_device(sound_stream_info_h stream_info, int *device_id)
 {
-       sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
-
-       return _get_echo_cancel_reference_device(stream_h, device);
+       return _get_echo_cancel_reference_device((sound_stream_info_s*)stream_info, device_id);
 }
 
 int sound_manager_set_rpi_playback_route(sound_rpi_playback_route_type type)
index ef739cd..a2b2548 100644 (file)
@@ -2485,16 +2485,21 @@ int _set_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_de
 {
        mm_sound_device_type_e mm_sound_device_type;
        sound_device_type_e device_type;
+       int device_id;
        char *device_type_str = NULL;
        char *avail_device_item = NULL;
        bool found = false;
        int ret, i;
 
        SM_ARG_CHECK(stream_info);
+       SM_ARG_CHECK(device);
 
        if ((ret = mm_sound_get_device_type(device, &mm_sound_device_type)) != MM_ERROR_NONE)
                return _convert_sound_manager_error_code(__func__, ret);
 
+       if ((ret = mm_sound_get_device_id(device, &device_id)) != MM_ERROR_NONE)
+               return _convert_sound_manager_error_code(__func__, ret);
+
        if ((ret = _convert_device_type(mm_sound_device_type, &device_type)) != SOUND_MANAGER_ERROR_NONE)
                return ret;
 
@@ -2510,24 +2515,26 @@ int _set_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_de
        }
 
        if (!found) {
-               LOGE("Can't find available reference device");
-               return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+               LOGE("not supported device[type:%s, id:%d]", device_type_str, device_id);
+               return SOUND_MANAGER_ERROR_POLICY;
        }
 
-       stream_info->reference_device = device;
+       stream_info->echo_cancel_reference_device = device_id;
+       LOGI("stream_info[%p, %s] reference device_id[%d]",
+               stream_info, stream_info->stream_type, device_id);
 
        return SOUND_MANAGER_ERROR_NONE;
 }
 
-int _get_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_device_h *device)
+int _get_echo_cancel_reference_device(sound_stream_info_s *stream_info, int *device_id)
 {
        SM_ARG_CHECK(stream_info);
-       SM_ARG_CHECK(device);
+       SM_ARG_CHECK(device_id);
 
-       if (!stream_info->reference_device)
-               return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+       *device_id = stream_info->echo_cancel_reference_device;
 
-       *device = stream_info->reference_device;
+       LOGI("stream_info[%p, %s] reference device_id[%d]",
+               stream_info, stream_info->stream_type, *device_id);
 
        return SOUND_MANAGER_ERROR_NONE;
 }