1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "amhelper.h" 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <mixlog.h> 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic DBusGConnection *connection; 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic DBusGProxy *proxy_lpe = NULL; 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic gboolean am_enable=FALSE; 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Connect to am dbus server 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * return -1 means failed 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * return 0 means succeeded 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * */ 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint dbus_init() { 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GError *error; 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee const char *name = "org.moblin.audiomanager"; 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee const char *path_lpe = "/org/moblin/audiomanager/lpe"; 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee const char *interface_lpe = "org.moblin.audiomanager.lpe"; 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee const gchar* env = g_getenv("MIX_AM"); 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (env && env[0] == '1') { 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee am_enable = TRUE; 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee am_enable = FALSE; 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (am_enable) { 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee error = NULL; 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (connection == NULL) { 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to open connection to bus: %s\n", 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee error->message); 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_error_free(error); 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return -1; 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully get a dbus connection\n"); 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee proxy_lpe = dbus_g_proxy_new_for_name(connection, name, 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee path_lpe, interface_lpe); 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (proxy_lpe == NULL) { 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to connect to AM dbus server\n"); 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return -1; 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else { 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully connected to AM dbus\npath: %s\ninterface: %s\n", 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee path_lpe, interface_lpe); 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return 0; 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_register(guint32 lpe_stream_id, char* media_role, char* lpe_stream_name, guint32 stream_type) 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GError *error; 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint32 s_output = 0; 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee error = NULL; 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (am_enable) { 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "lpe_stream_id: %d\n", lpe_stream_id); 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (lpe_stream_id == 0) { 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return 0; 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamRegister", &error, G_TYPE_UINT, 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee lpe_stream_id, G_TYPE_STRING, media_role, G_TYPE_STRING, lpe_stream_name, G_TYPE_UINT, stream_type, 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)) { 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamRegister failed: %s\n", error->message); 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_error_free(error); 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "LPEStreamRegister returned am stream id %d\n", s_output); 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_unregister(guint32 am_stream_id) 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GError *error; 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint32 s_output = 0; 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (am_enable) { 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee error = NULL; 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamUnregister", &error, G_TYPE_UINT, am_stream_id, 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)){ 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamUnregister failed: %s\n", error->message); 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_error_free(error); 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_notify_pause(guint32 stream_id) 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GError *error; 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint32 s_output=0; 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (am_enable) { 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyPause", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID); 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_notify_resume(guint32 stream_id) 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GError *error; 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint32 s_output=0; 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (am_enable) { 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyResume", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID); 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return s_output; 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 121