*/
int sound_manager_stop_discover_remote_device(void);
+/**
+ * @internal
+ * @brief Starts AEC(Acoustic Echo Cancellation) and launch AEC service
+ * @since_tizen 6.5
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @retval #SOUND_MANAGER_ERROR_INVALID_OPERATION Invalid operation
+ * @see sound_manager_stop_aec()
+ */
+int sound_manager_start_aec(void);
+
+/**
+ * @internal
+ * @brief Stops acoustic echo cancellation
+ * @since_tizen 6.5
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @retval #SOUND_MANAGER_ERROR_INVALID_OPERATION Invalid operation
+ * @pre You should start acoustic echo cancellation by sound_manager_start_aec().
+ * @see sound_manager_start_aec()
+ */
+int sound_manager_stop_aec(void);
+
/**
* @}
*/
int _set_remote_permission(int index, bool allowed);
+int _start_aec(void);
+
+int _stop_aec(void);
+
int _start_virtual_stream(virtual_sound_stream_info_s *virtual_stream);
int _stop_virtual_stream(virtual_sound_stream_info_s *virtual_stream);
Name: capi-media-sound-manager
Summary: Sound Manager library
-Version: 0.6.32
+Version: 0.6.33
Release: 0
Group: Multimedia/API
License: Apache-2.0
return _set_remote_permission(id, allowed);
}
+int sound_manager_start_aec(void)
+{
+ return _start_aec();
+}
+
+int sound_manager_stop_aec(void)
+{
+ return _stop_aec();
+}
+
#define PA_DEVICE_MANAGER_METHOD_NAME_GET_SPECIFIED_STREAM "GetSpecifiedStream"
#define PA_DEVICE_MANAGER_METHOD_NAME_SET_ACM_MODE "SetAcmMode"
+#define AEC_BUS_NAME "org.tizen.AudioAec"
+#define AEC_OBJECT "/org/tizen/AudioAec"
+#define AEC_INTERFACE "org.tizen.AudioAec"
+#define AEC_METHOD_LAUNCH "Launch"
+#define AEC_METHOD_QUIT "Quit"
+
#define VCONF_PATH_PREFIX_VOLUME "file/private/sound/volume/"
#define VCONF_PATH_MAX 64
return ret;
}
+int _start_aec(void)
+{
+ GDBusConnection *conn = NULL;
+ GVariant *reply = NULL;
+ GError *err = NULL;
+ int ret;
+
+ if ((ret = __get_dbus_connection(&conn)) != SOUND_MANAGER_ERROR_NONE)
+ return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+
+ LOGI("start acoustic echo cancellation");
+
+ reply = g_dbus_connection_call_sync(conn, AEC_BUS_NAME, AEC_OBJECT, AEC_INTERFACE,
+ AEC_METHOD_LAUNCH, NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+
+ g_object_unref(conn);
+
+ if (!reply) {
+ ret = _convert_dbus_error(err->message);
+ LOGE("g_dbus_connection_call_sync() err-msg(%s)", err->message);
+ g_error_free(err);
+ return ret;
+ }
+
+ g_variant_unref(reply);
+
+ return SOUND_MANAGER_ERROR_NONE;
+}
+
+int _stop_aec(void)
+{
+
+ GDBusConnection *conn = NULL;
+ GVariant *reply = NULL;
+ GError *err = NULL;
+ int ret;
+
+ if ((ret = __get_dbus_connection(&conn)) != SOUND_MANAGER_ERROR_NONE)
+ return SOUND_MANAGER_ERROR_INVALID_OPERATION;
+
+ LOGI("stop acoustic echo cancellation");
+
+ reply = g_dbus_connection_call_sync(conn, AEC_BUS_NAME, AEC_OBJECT, AEC_INTERFACE,
+ AEC_METHOD_QUIT, NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+
+ g_object_unref(conn);
+
+ if (!reply) {
+ ret = _convert_dbus_error(err->message);
+ LOGE("g_dbus_connection_call_sync() err-msg(%s)", err->message);
+ g_error_free(err);
+ return ret;
+ }
+
+ g_variant_unref(reply);
+
+ return SOUND_MANAGER_ERROR_NONE;
+}
+
static int __check_manual_route_type(sound_stream_info_s *stream_info)
{
SM_ARG_CHECK(stream_info);
CURRENT_STATUS_DISCOVER_REMOTE_DEVICE,
CURRENT_STATUS_PUBLISH_REMOTE_DEVICE,
CURRENT_STATUS_SET_REMOTE_PERMISSION,
+ CURRENT_STATUS_LAUNCH_ECHO_CANCEL,
+ CURRENT_STATUS_QUIT_ECHO_CANCEL,
};
g_menu_state = CURRENT_STATUS_PUBLISH_REMOTE_DEVICE;
else if (strncmp(cmd, "alw", MAX_CMD_LEN) == 0)
g_menu_state = CURRENT_STATUS_SET_REMOTE_PERMISSION;
+ else if (strncmp(cmd, "lec", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_LAUNCH_ECHO_CANCEL;
+ else if (strncmp(cmd, "qec", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_QUIT_ECHO_CANCEL;
else if (strncmp(cmd, "q", MAX_CMD_LEN) == 0) {
g_print("closing the test suite\n");
quit_program();
g_print("dis. *Discover remote devices\n");
g_print("pub. *Publish remote devices\n");
g_print("alw. *Allow remote device\n");
+ g_print("lec. *Launch EC\n");
+ g_print("qec. *Quit EC\n");
g_print(" * is for internal usage.\n");
g_print("=========================================================================================\n");
}
g_print("*** press enter 0:disable, 1:enable\n");
else if (g_menu_state == CURRENT_STATUS_SET_REMOTE_PERMISSION)
g_print("*** press enter number num, allow(0,1)\n");
+ else if (g_menu_state == CURRENT_STATUS_LAUNCH_ECHO_CANCEL)
+ g_print("*** press enter to launch acoustic echo cancellation service\n");
+ else if (g_menu_state == CURRENT_STATUS_QUIT_ECHO_CANCEL)
+ g_print("*** press enter to quit acoustic echo cancellation service\n");
else {
g_print("*** unknown status.\n");
quit_program();
reset_menu_state();
break;
}
+ case CURRENT_STATUS_LAUNCH_ECHO_CANCEL: {
+ int ret;
+
+ ret = sound_manager_start_aec();
+ if (!ret)
+ g_print("ec run\n");
+ else
+ g_print("ec fail ret(0x%x)\n", ret);
+
+ reset_menu_state();
+ break;
+
+ }
+ case CURRENT_STATUS_QUIT_ECHO_CANCEL: {
+ int ret;
+ ret = sound_manager_stop_aec();
+ if (!ret)
+ g_print("ec stop\n");
+ else
+ g_print("ec stop fail ret(0x%x)\n", ret);
+
+ reset_menu_state();
+ break;
+ }
}
end:
g_timeout_add(100, timeout_menu_display, 0);