Echo-cancellation is enabled by setting a reference device.
[Version] 0.6.43
[Issue Type] New Feature
Change-Id: I32e6592e426c83c772ca4fd7e40f69febc6228f7
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
*/
int sound_manager_stop_discover_remote_device(void);
+/**
+ * @internal
+ * @brief Sets acoustic echo cancellation with a 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()
+ * @param[in] The handle of stream information
+ * @param[in] 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_INTERNAL Internal error inside the sound system
+ * @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_set_echo_cancel_reference_device(sound_stream_info_h stream_info, sound_device_h device);
+
+/**
+ * @internal
+ * @brief Gets acoustic echo cancellation reference device
+ * @since_tizen 7.0
+ * @remark
+ * @param[in] The handle of stream information
+ * @param[out] 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
+ * @see sound_manager_create_stream_information()
+ */
+int sound_manager_get_echo_cancel_reference_device(sound_stream_info_h stream_info, sound_device_h *device);
+
/**
* @internal
* @brief Set force hdmi route
void *user_data;
manual_route_info_s manual_route_info;
preferred_device_info_s preferred_device_info;
+ sound_device_h reference_device;
pthread_mutex_t focus_state_mutex;
pthread_mutex_t focus_cb_mutex;
pthread_mutex_t vstream_mutex;
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 _set_rpi_playback_route(sound_rpi_playback_route_type type);
int _get_rpi_playback_route(sound_rpi_playback_route_type *type);
Name: capi-media-sound-manager
Summary: Sound Manager library
-Version: 0.6.42
+Version: 0.6.43
Release: 0
Group: Multimedia/API
License: Apache-2.0
return _set_remote_permission(id, 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);
+}
+
+int sound_manager_get_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 _get_echo_cancel_reference_device(stream_h, device);
+}
+
int sound_manager_set_rpi_playback_route(sound_rpi_playback_route_type type)
{
return _set_rpi_playback_route(type);
return ret;
}
+int _set_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_device_h device)
+{
+ mm_sound_device_type_e mm_sound_device_type;
+ sound_device_type_e device_type;
+ char *device_type_str = NULL;
+ char *avail_device_item = NULL;
+ bool found = false;
+ int ret, i;
+
+ SM_ARG_CHECK(stream_info);
+
+ 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 = _convert_device_type(mm_sound_device_type, &device_type)) != SOUND_MANAGER_ERROR_NONE)
+ return ret;
+
+ if ((ret = _convert_device_type_enum_to_str(device_type, &device_type_str)) != SOUND_MANAGER_ERROR_NONE)
+ return ret;
+
+ for (i = 0; i < AVAIL_DEVICES_MAX; i++) {
+ if (!(avail_device_item = stream_info->stream_conf_info.avail_out_devices[i]))
+ break;
+
+ if (!strncmp(avail_device_item, device_type_str, strlen(device_type_str)))
+ found = true;
+ }
+
+ if (!found) {
+ LOGE("Can't find available reference device");
+ return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+ }
+
+ stream_info->reference_device = device;
+
+ return SOUND_MANAGER_ERROR_NONE;
+}
+
+int _get_echo_cancel_reference_device(sound_stream_info_s *stream_info, sound_device_h *device)
+{
+ SM_ARG_CHECK(stream_info);
+ SM_ARG_CHECK(device);
+
+ if (!stream_info->reference_device)
+ return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+
+ *device = stream_info->reference_device;
+
+ return SOUND_MANAGER_ERROR_NONE;
+}
+
int _set_rpi_playback_route(sound_rpi_playback_route_type type)
{
int ret;