2 * This file is a part of MAFW
4 * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
6 * Contact: Visa Smolander <visa.smolander@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 #include "mafw-mock-pulseaudio.h"
28 typedef void pa_glib_mainloop;
29 typedef void pa_mainloop_api;
30 typedef void (*pa_context_notify_cb_t)(pa_context *c, void *userdata);
31 typedef guint pa_context_flags_t;
32 typedef void pa_spawn_api;
33 typedef void pa_operation;
34 typedef guint32 pa_volume_t;
41 pa_volume_t values[32];
45 pa_channel_map channel_map;
49 gboolean volume_is_absolute;
50 } pa_ext_stream_restore_info;
51 typedef void (*pa_ext_stream_restore_read_cb_t)(
53 const pa_ext_stream_restore_info *info, int eol, void *userdata);
54 typedef void (*pa_ext_stream_restore_subscribe_cb_t)(pa_context *c,
56 typedef void (*pa_context_success_cb_t)(pa_context *c, int success,
58 enum pa_context_state {
59 PA_CONTEXT_UNCONNECTED = 0,
60 PA_CONTEXT_CONNECTING,
61 PA_CONTEXT_AUTHORIZING,
62 PA_CONTEXT_SETTING_NAME,
68 pa_context_notify_cb_t state_cb;
69 gpointer state_cb_userdata;
70 enum pa_context_state state;
71 pa_ext_stream_restore_read_cb_t read_cb;
72 gpointer read_cb_userdata;
73 pa_ext_stream_restore_subscribe_cb_t subscribe_cb;
74 gpointer subscribe_cb_userdata;
79 static pa_context *context = NULL;
81 pa_glib_mainloop *pa_glib_mainloop_new(GMainContext *c);
82 char *pa_get_binary_name(char *s, size_t l);
83 pa_mainloop_api *pa_glib_mainloop_get_api(pa_glib_mainloop *g);
84 pa_context *pa_context_new(pa_mainloop_api *mainloop, const char *name);
85 void pa_context_set_state_callback(pa_context *c, pa_context_notify_cb_t cb,
87 int pa_context_connect(pa_context *c, const char *server,
88 pa_context_flags_t flags, const pa_spawn_api *api);
89 gint pa_context_get_state(pa_context *c);
90 pa_operation *pa_ext_stream_restore2_read(pa_context *c,
91 pa_ext_stream_restore_read_cb_t cb,
93 void pa_operation_unref(pa_operation *o);
94 pa_volume_t pa_cvolume_max(const pa_cvolume *volume);
95 void pa_ext_stream_restore_set_subscribe_cb(
97 pa_ext_stream_restore_subscribe_cb_t cb, void *userdata);
98 gint pa_operation_get_state(pa_operation *o);
99 void pa_operation_cancel(pa_operation *o);
100 void pa_glib_mainloop_free(pa_glib_mainloop *g);
101 pa_cvolume *pa_cvolume_init(pa_cvolume *a);
102 pa_cvolume *pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
103 pa_operation *pa_ext_stream_restore2_write(
104 pa_context *c, gint mode, const pa_ext_stream_restore_info *data[],
105 unsigned n, int apply_immediately, pa_context_success_cb_t cb,
107 pa_operation *pa_ext_stream_restore_subscribe(pa_context *c, int enable,
108 pa_context_success_cb_t cb,
110 void pa_context_unref(pa_context *c);
112 pa_glib_mainloop *pa_glib_mainloop_new(GMainContext *c)
114 return (gpointer) 0x1;
117 char *pa_get_binary_name(char *s, size_t l)
119 g_strlcpy(s, "mafw-gst-renderer-tests", l);
124 pa_mainloop_api *pa_glib_mainloop_get_api(pa_glib_mainloop *g)
126 return (gpointer) 0x1;
129 pa_context *pa_context_new(pa_mainloop_api *mainloop, const char *name)
131 pa_context *c = g_new0(pa_context, 1);
133 pa_cvolume_set(&c->volume, 1, 32000);
140 void pa_context_set_state_callback(pa_context *c, pa_context_notify_cb_t cb,
144 c->state_cb_userdata = userdata;
147 static gboolean _pa_context_connect_idle(gpointer userdata)
149 pa_context *c = userdata;
151 if (c->state_cb != NULL) {
152 c->state_cb(c, c->state_cb_userdata);
154 return c->state != PA_CONTEXT_READY;
157 int pa_context_connect(pa_context *c, const char *server,
158 pa_context_flags_t flags, const pa_spawn_api *api)
160 g_idle_add(_pa_context_connect_idle, c);
164 gint pa_context_get_state(pa_context *c)
169 static gboolean _pa_ext_stream_restore2_read_idle(gpointer userdata)
171 pa_context *c = userdata;
172 pa_ext_stream_restore_info info = { 0, };
174 info.name = "sink-input-by-media-role:x-maemo";
175 pa_cvolume_set(&info.volume, 1, c->volume.values[0]);
178 c->read_cb(c, &info, 1, c->read_cb_userdata);
183 pa_operation *pa_ext_stream_restore2_read(pa_context *c,
184 pa_ext_stream_restore_read_cb_t cb,
188 c->read_cb_userdata = userdata;
189 g_idle_add(_pa_ext_stream_restore2_read_idle, c);
190 return (gpointer) 0x1;
193 void pa_operation_unref(pa_operation *o)
197 pa_volume_t pa_cvolume_max(const pa_cvolume *volume)
199 return volume->values[0];
202 pa_operation *pa_ext_stream_restore_subscribe(pa_context *c, int enable,
203 pa_context_success_cb_t cb,
207 cb(c, TRUE, userdata);
209 return (gpointer) 0x1;
212 void pa_ext_stream_restore_set_subscribe_cb(
214 pa_ext_stream_restore_subscribe_cb_t cb, void *userdata)
216 c->subscribe_cb = cb;
217 c->subscribe_cb_userdata = userdata;
220 gint pa_operation_get_state(pa_operation *o)
225 void pa_operation_cancel(pa_operation *o)
229 void pa_context_unref(pa_context *c)
234 void pa_glib_mainloop_free(pa_glib_mainloop *g)
238 pa_cvolume *pa_cvolume_init(pa_cvolume *a)
240 pa_cvolume_set(a, 1, 0);
244 pa_cvolume *pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v)
251 static gboolean _pa_ext_stream_restore_write_idle(gpointer userdata)
253 pa_context *c = userdata;
255 if (c->subscribe_cb != NULL) {
256 c->subscribe_cb(c, c->subscribe_cb_userdata);
262 pa_operation *pa_ext_stream_restore2_write(
263 pa_context *c, gint mode, const pa_ext_stream_restore_info *data[],
264 unsigned n, int apply_immediately, pa_context_success_cb_t cb,
267 const pa_ext_stream_restore_info *info = data[0];
269 pa_cvolume_set(&c->volume, 1, info->volume.values[0]);
270 c->mute = info->mute;
272 g_idle_add(_pa_ext_stream_restore_write_idle, c);
274 return (gpointer) 0x1;
277 static gboolean _pa_context_disconnect_idle(gpointer userdata)
279 pa_context *c = userdata;
280 c->state = PA_CONTEXT_TERMINATED;
281 if (c->state_cb != NULL) {
282 c->state_cb(c, c->state_cb_userdata);
287 void pa_context_disconnect(pa_context *c)
289 g_idle_add(_pa_context_disconnect_idle, c);
292 pa_context *pa_context_get_instance(void)