/* public domain */
+#include "qemu/osdep.h"
#include "qemu-common.h"
#include "audio.h"
paaudio *g;
} PAVoiceIn;
+static void qpa_audio_fini(void *opaque);
+
static void GCC_FMT_ATTR (2, 3) qpa_logerr (int err, const char *fmt, ...)
{
va_list ap;
} \
goto label; \
} \
- } while (0);
+ } while (0)
#define CHECK_DEAD_GOTO(c, stream, rerror, label) \
do { \
} \
goto label; \
} \
- } while (0);
+ } while (0)
static int qpa_simple_read (PAVoiceIn *p, void *data, size_t length, int *rerror)
{
pa_threaded_mainloop_lock (g->mainloop);
- /* FIXME: use the upcoming "set_source_output_{volume,mute}" */
- op = pa_context_set_source_volume_by_index (g->context,
- pa_stream_get_device_index (pa->stream),
+ op = pa_context_set_source_output_volume (g->context,
+ pa_stream_get_index (pa->stream),
&v, NULL, NULL);
if (!op) {
qpa_logerr (pa_context_errno (g->context),
- "set_source_volume() failed\n");
+ "set_source_output_volume() failed\n");
} else {
pa_operation_unref(op);
}
- op = pa_context_set_source_mute_by_index (g->context,
+ op = pa_context_set_source_output_mute (g->context,
pa_stream_get_index (pa->stream),
sw->vol.mute, NULL, NULL);
if (!op) {
qpa_logerr (pa_context_errno (g->context),
- "set_source_mute() failed\n");
+ "set_source_output_mute() failed\n");
} else {
pa_operation_unref (op);
}
{
paaudio *g = g_malloc(sizeof(paaudio));
g->conf = glob_conf;
+ g->mainloop = NULL;
+ g->context = NULL;
g->mainloop = pa_threaded_mainloop_new ();
if (!g->mainloop) {
pa_threaded_mainloop_unlock (g->mainloop);
fail:
AUD_log (AUDIO_CAP, "Failed to initialize PA context");
- g_free(g);
+ qpa_audio_fini(g);
return NULL;
}