aboutsummaryrefslogtreecommitdiff
path: root/audio/paaudio.c
AgeCommit message (Expand)AuthorFilesLines
2019-03-18audio/paaudio: fix microphone input being unusableMartin Schrodt1-1/+7
2019-03-18audio/paaudio: prolong and make latency configurableMartin Schrodt1-6/+6
2019-03-18audio/paaudio: fix ignored buffer_length settingMartin Schrodt1-3/+21
2019-03-11paaudio: port to -audiodev configKővágó, Zoltán1-52/+29
2019-03-11audio: -audiodev command line option basic implementationKővágó, Zoltán1-1/+1
2019-03-11audio: use qapi AudioFormat instead of audfmt_eKővágó, Zoltán1-14/+14
2019-01-24audio: check for pulseaudio daemon pidfileGerd Hoffmann1-0/+15
2018-11-12pulseaudio: process audio data in smaller chunksGerd Hoffmann1-2/+2
2018-03-12audio: add driver registryGerd Hoffmann1-1/+7
2018-02-06audio: Replace AUDIO_FUNC with __func__Alistair Francis1-28/+28
2018-01-16maint: Fix macros with broken 'do/while(0); ' usageEric Blake1-2/+2
2016-06-03audio: pa: Set volume of recording stream instead of recording devicePeter Krempa1-6/+5
2016-02-02audio: Clean up includesPeter Maydell1-0/+1
2015-06-15paaudio: fix possible resource leakKővágó, Zoltán1-1/+5
2015-06-15paaudio: do not use global variablesKővágó, Zoltán1-46/+52
2015-06-15audio: expose drv_opaque to init_out and init_inKővágó, Zoltán1-2/+3
2013-12-09audio: adjust pulse to 100Hz wakeup rateGerd Hoffmann1-4/+4
2012-05-04fix build with pulseaudio versions older than 0.9.11Gerd Hoffmann1-1/+29
2012-04-25fix paaudio.c warningsGerd Hoffmann1-2/+1
2012-04-17Allow controlling volume with PulseAudio backendMarc-André Lureau1-5/+94
2012-04-17Do not use pa_simple PulseAudio APIMarc-André Lureau1-38/+339
2011-08-20Use glib memory allocation and free functionsAnthony Liguori1-4/+4
2011-01-25pulseaudio: tweak configGerd Hoffmann1-9/+1
2011-01-25pulseaudio: setup buffer attrsGerd Hoffmann1-1/+11
2011-01-25pulseaudio: process 1/4 buffer max at onceGerd Hoffmann1-13/+9
2011-01-12audio: split sample conversion and volume mixingMichael Walle1-1/+1
2010-09-29pulse-audio: fix bug on updating rposWu Fengguang1-1/+1
2009-10-13qemu: allow pulseaudio to be the defaultMichael S. Tsirkin1-1/+1
2009-09-18audio: internal API changemalc1-3/+2
2009-08-11Aestheticsmalc1-20/+30
2009-08-11use C99 initializers for all audio/*Juan Quintela1-5/+2
2009-08-11use C99 initializers for audio_pcm_opsJuan Quintela1-10/+11
2009-08-11Use C99 initializers for audio_optionJuan Quintela1-16/+21
2009-08-11Use proper struct initializers and remove INIT_FIELD() macroJuan Quintela1-11/+11
2009-06-19fix qemu_alloc/qemu_free for audio subsystemJean-Christophe Dubois1-2/+2
2008-12-03Make audio violate POSIX lessmalc1-5/+5
2008-10-06Prepare for changing audio_pcm_ops dynamically (partially revert r5422)blueswir11-1/+1
2008-10-05Make audio_pcm_opsstatic constblueswir11-1/+1
2008-07-02Pulseaudio drivermalc1-0/+515
hl opt">->fd_read_poll(ioh->opaque) != 0)) { FD_SET(ioh->fd, readfds); if (ioh->fd > *pnfds) *pnfds = ioh->fd; } if (ioh->fd_write) { FD_SET(ioh->fd, writefds); if (ioh->fd > *pnfds) *pnfds = ioh->fd; } } } void qemu_iohandler_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, int ret) { if (ret > 0) { IOHandlerRecord *pioh, *ioh; QLIST_FOREACH_SAFE(ioh, &io_handlers, next, pioh) { if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, readfds)) { ioh->fd_read(ioh->opaque); } if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, writefds)) { ioh->fd_write(ioh->opaque); } /* Do this last in case read/write handlers marked it for deletion */ if (ioh->deleted) { QLIST_REMOVE(ioh, next); g_free(ioh); } } } } /* reaping of zombies. right now we're not passing the status to anyone, but it would be possible to add a callback. */ #ifndef _WIN32 typedef struct ChildProcessRecord { int pid; QLIST_ENTRY(ChildProcessRecord) next; } ChildProcessRecord; static QLIST_HEAD(, ChildProcessRecord) child_watches = QLIST_HEAD_INITIALIZER(child_watches); static QEMUBH *sigchld_bh; static void sigchld_handler(int signal) { qemu_bh_schedule(sigchld_bh); } static void sigchld_bh_handler(void *opaque) { ChildProcessRecord *rec, *next; QLIST_FOREACH_SAFE(rec, &child_watches, next, next) { if (waitpid(rec->pid, NULL, WNOHANG) == rec->pid) { QLIST_REMOVE(rec, next); g_free(rec); } } } static void qemu_init_child_watch(void) { struct sigaction act; sigchld_bh = qemu_bh_new(sigchld_bh_handler, NULL); act.sa_handler = sigchld_handler; act.sa_flags = SA_NOCLDSTOP; sigaction(SIGCHLD, &act, NULL); } int qemu_add_child_watch(pid_t pid) { ChildProcessRecord *rec; if (!sigchld_bh) { qemu_init_child_watch(); } QLIST_FOREACH(rec, &child_watches, next) { if (rec->pid == pid) { return 1; } } rec = g_malloc0(sizeof(ChildProcessRecord)); rec->pid = pid; QLIST_INSERT_HEAD(&child_watches, rec, next); return 0; } #endif