mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
paaudio: port to the new audio backend api
Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Message-id: 21fe8f2cf949039c8c40a0352590c593b104917d.1568927990.git.DirtY.iCE.hu@gmail.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
committed by
Gerd Hoffmann
parent
3ba4066d08
commit
49ddd7e122
@@ -2,7 +2,6 @@ common-obj-y = audio.o audio_legacy.o noaudio.o wavaudio.o mixeng.o
|
|||||||
common-obj-$(CONFIG_SPICE) += spiceaudio.o
|
common-obj-$(CONFIG_SPICE) += spiceaudio.o
|
||||||
common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o
|
common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o
|
||||||
common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o
|
common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o
|
||||||
common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o
|
|
||||||
common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o
|
common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o
|
||||||
common-obj-y += wavcapture.o
|
common-obj-y += wavcapture.o
|
||||||
|
|
||||||
|
|||||||
@@ -1,173 +0,0 @@
|
|||||||
#include "qemu/osdep.h"
|
|
||||||
#include "audio.h"
|
|
||||||
|
|
||||||
#define AUDIO_CAP "audio-pt"
|
|
||||||
|
|
||||||
#include "audio_int.h"
|
|
||||||
#include "audio_pt_int.h"
|
|
||||||
|
|
||||||
static void GCC_FMT_ATTR(3, 4) logerr (struct audio_pt *pt, int err,
|
|
||||||
const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, fmt);
|
|
||||||
AUD_vlog (pt->drv, fmt, ap);
|
|
||||||
va_end (ap);
|
|
||||||
|
|
||||||
AUD_log (NULL, "\n");
|
|
||||||
AUD_log (pt->drv, "Reason: %s\n", strerror (err));
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_init (struct audio_pt *p, void *(*func) (void *),
|
|
||||||
void *opaque, const char *drv, const char *cap)
|
|
||||||
{
|
|
||||||
int err, err2;
|
|
||||||
const char *efunc;
|
|
||||||
sigset_t set, old_set;
|
|
||||||
|
|
||||||
p->drv = drv;
|
|
||||||
|
|
||||||
err = sigfillset (&set);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, errno, "%s(%s): sigfillset failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = pthread_mutex_init (&p->mutex, NULL);
|
|
||||||
if (err) {
|
|
||||||
efunc = "pthread_mutex_init";
|
|
||||||
goto err0;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = pthread_cond_init (&p->cond, NULL);
|
|
||||||
if (err) {
|
|
||||||
efunc = "pthread_cond_init";
|
|
||||||
goto err1;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = pthread_sigmask (SIG_BLOCK, &set, &old_set);
|
|
||||||
if (err) {
|
|
||||||
efunc = "pthread_sigmask";
|
|
||||||
goto err2;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = pthread_create (&p->thread, NULL, func, opaque);
|
|
||||||
|
|
||||||
err2 = pthread_sigmask (SIG_SETMASK, &old_set, NULL);
|
|
||||||
if (err2) {
|
|
||||||
logerr(p, err2, "%s(%s): pthread_sigmask (restore) failed",
|
|
||||||
cap, __func__);
|
|
||||||
/* We have failed to restore original signal mask, all bets are off,
|
|
||||||
so terminate the process */
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err) {
|
|
||||||
efunc = "pthread_create";
|
|
||||||
goto err2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err2:
|
|
||||||
err2 = pthread_cond_destroy (&p->cond);
|
|
||||||
if (err2) {
|
|
||||||
logerr(p, err2, "%s(%s): pthread_cond_destroy failed", cap, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
err1:
|
|
||||||
err2 = pthread_mutex_destroy (&p->mutex);
|
|
||||||
if (err2) {
|
|
||||||
logerr(p, err2, "%s(%s): pthread_mutex_destroy failed", cap, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
err0:
|
|
||||||
logerr(p, err, "%s(%s): %s failed", cap, __func__, efunc);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_fini (struct audio_pt *p, const char *cap)
|
|
||||||
{
|
|
||||||
int err, ret = 0;
|
|
||||||
|
|
||||||
err = pthread_cond_destroy (&p->cond);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_cond_destroy failed", cap, __func__);
|
|
||||||
ret = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = pthread_mutex_destroy (&p->mutex);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_mutex_destroy failed", cap, __func__);
|
|
||||||
ret = -1;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_lock (struct audio_pt *p, const char *cap)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_lock (&p->mutex);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_mutex_lock failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_unlock (struct audio_pt *p, const char *cap)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_unlock (&p->mutex);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_mutex_unlock failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_wait (struct audio_pt *p, const char *cap)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_cond_wait (&p->cond, &p->mutex);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_cond_wait failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_unlock_and_signal (struct audio_pt *p, const char *cap)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_unlock (&p->mutex);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_mutex_unlock failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
err = pthread_cond_signal (&p->cond);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_cond_signal failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int audio_pt_join (struct audio_pt *p, void **arg, const char *cap)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
void *ret;
|
|
||||||
|
|
||||||
err = pthread_join (p->thread, &ret);
|
|
||||||
if (err) {
|
|
||||||
logerr(p, err, "%s(%s): pthread_join failed", cap, __func__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*arg = ret;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#ifndef QEMU_AUDIO_PT_INT_H
|
|
||||||
#define QEMU_AUDIO_PT_INT_H
|
|
||||||
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
struct audio_pt {
|
|
||||||
const char *drv;
|
|
||||||
pthread_t thread;
|
|
||||||
pthread_cond_t cond;
|
|
||||||
pthread_mutex_t mutex;
|
|
||||||
};
|
|
||||||
|
|
||||||
int audio_pt_init (struct audio_pt *, void *(*) (void *), void *,
|
|
||||||
const char *, const char *);
|
|
||||||
int audio_pt_fini (struct audio_pt *, const char *);
|
|
||||||
int audio_pt_lock (struct audio_pt *, const char *);
|
|
||||||
int audio_pt_unlock (struct audio_pt *, const char *);
|
|
||||||
int audio_pt_wait (struct audio_pt *, const char *);
|
|
||||||
int audio_pt_unlock_and_signal (struct audio_pt *, const char *);
|
|
||||||
int audio_pt_join (struct audio_pt *, void **, const char *);
|
|
||||||
|
|
||||||
#endif /* QEMU_AUDIO_PT_INT_H */
|
|
||||||
+45
-327
File diff suppressed because it is too large
Load Diff
@@ -297,7 +297,6 @@ host_cc="cc"
|
|||||||
libs_cpu=""
|
libs_cpu=""
|
||||||
libs_softmmu=""
|
libs_softmmu=""
|
||||||
libs_tools=""
|
libs_tools=""
|
||||||
audio_pt_int=""
|
|
||||||
audio_win_int=""
|
audio_win_int=""
|
||||||
libs_qga=""
|
libs_qga=""
|
||||||
debug_info="yes"
|
debug_info="yes"
|
||||||
@@ -3388,7 +3387,6 @@ for drv in $audio_drv_list; do
|
|||||||
pa | try-pa)
|
pa | try-pa)
|
||||||
if $pkg_config libpulse --exists; then
|
if $pkg_config libpulse --exists; then
|
||||||
pulse_libs=$($pkg_config libpulse --libs)
|
pulse_libs=$($pkg_config libpulse --libs)
|
||||||
audio_pt_int="yes"
|
|
||||||
if test "$drv" = "try-pa"; then
|
if test "$drv" = "try-pa"; then
|
||||||
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
|
||||||
fi
|
fi
|
||||||
@@ -6611,9 +6609,6 @@ echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
|
|||||||
echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
|
echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
|
||||||
echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
|
echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
|
||||||
echo "OSS_LIBS=$oss_libs" >> $config_host_mak
|
echo "OSS_LIBS=$oss_libs" >> $config_host_mak
|
||||||
if test "$audio_pt_int" = "yes" ; then
|
|
||||||
echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
if test "$audio_win_int" = "yes" ; then
|
if test "$audio_win_int" = "yes" ; then
|
||||||
echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
|
echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user