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