blob: 5124a6a65a5312eb347ab9d4a39702bc9fd33ec9 [file] [log] [blame]
#include "amhelper.h"
#include <mixlog.h>
static DBusGConnection *connection;
static DBusGProxy *proxy_lpe = NULL;
static gboolean am_enable=FALSE;
/* Connect to am dbus server
* return -1 means failed
* return 0 means succeeded
* */
gint32 dbus_init() {
GError *error;
const char *name = "org.moblin.audiomanager";
const char *path_lpe = "/org/moblin/audiomanager/lpe";
const char *interface_lpe = "org.moblin.audiomanager.lpe";
const gchar* env = g_getenv("MIX_AM");
if (env && env[0] == '1') {
am_enable = TRUE;
}
else
am_enable = FALSE;
if (am_enable && (proxy_lpe == NULL)) {
error = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
if (connection == NULL) {
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to open connection to bus: %s\n",
error->message);
g_error_free(error);
return -1;
}
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully get a dbus connection\n");
proxy_lpe = dbus_g_proxy_new_for_name(connection, name,
path_lpe, interface_lpe);
if (proxy_lpe == NULL) {
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to connect to AM dbus server\n");
return -1;
}
else {
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully connected to AM dbus\npath: %s\ninterface: %s\n",
path_lpe, interface_lpe);
}
}
return 0;
}
gint32 lpe_stream_register(guint32 lpe_stream_id, char* media_role, char* lpe_stream_name, guint32 stream_type)
{
GError *error;
gint32 s_output = 0;
error = NULL;
if (am_enable) {
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "lpe_stream_id: %d\n", lpe_stream_id);
if (lpe_stream_id == 0) {
return 0;
}
if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamRegister", &error, G_TYPE_UINT,
lpe_stream_id, G_TYPE_STRING, media_role, G_TYPE_STRING, lpe_stream_name, G_TYPE_UINT, stream_type,
G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)) {
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamRegister failed: %s\n", error->message);
g_error_free(error);
return s_output;
}
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "LPEStreamRegister returned am stream id %d\n", s_output);
}
return s_output;
}
gint32 lpe_stream_unregister(guint32 am_stream_id)
{
GError *error;
gint32 s_output = 0;
if (am_enable) {
error = NULL;
if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamUnregister", &error, G_TYPE_UINT, am_stream_id,
G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)){
mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamUnregister failed: %s\n", error->message);
g_error_free(error);
return s_output;
}
}
return s_output;
}
gint32 lpe_stream_notify_pause(guint32 am_stream_id)
{
GError *error;
gint32 s_output=0;
if (am_enable) {
dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyPause", &error, G_TYPE_UINT, am_stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
}
return s_output;
}
gint32 lpe_stream_notify_resume(guint32 am_stream_id)
{
GError *error;
gint32 s_output=0;
if (am_enable) {
dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyResume", &error, G_TYPE_UINT, am_stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
}
return s_output;
}