wavaudio: port to -audiodev config
Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Message-id: 28c2bf374c447c20937a192695c7b9f5367dea7e.1552083282.git.DirtY.iCE.hu@gmail.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
8af2234f7f
commit
0927d16657
|
@ -289,6 +289,18 @@ static void handle_sdl(Audiodev *dev)
|
||||||
&dev->u.sdl.out->has_buffer_length, dev->u.sdl.out);
|
&dev->u.sdl.out->has_buffer_length, dev->u.sdl.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wav */
|
||||||
|
static void handle_wav(Audiodev *dev)
|
||||||
|
{
|
||||||
|
get_int("QEMU_WAV_FREQUENCY",
|
||||||
|
&dev->u.wav.out->frequency, &dev->u.wav.out->has_frequency);
|
||||||
|
get_fmt("QEMU_WAV_FORMAT", &dev->u.wav.out->format,
|
||||||
|
&dev->u.wav.out->has_format);
|
||||||
|
get_int("QEMU_WAV_DAC_FIXED_CHANNELS",
|
||||||
|
&dev->u.wav.out->channels, &dev->u.wav.out->has_channels);
|
||||||
|
get_str("QEMU_WAV_PATH", &dev->u.wav.path, &dev->u.wav.has_path);
|
||||||
|
}
|
||||||
|
|
||||||
/* general */
|
/* general */
|
||||||
static void handle_per_direction(
|
static void handle_per_direction(
|
||||||
AudiodevPerDirectionOptions *pdo, const char *prefix)
|
AudiodevPerDirectionOptions *pdo, const char *prefix)
|
||||||
|
@ -354,6 +366,10 @@ static AudiodevListEntry *legacy_opt(const char *drvname)
|
||||||
handle_sdl(e->dev);
|
handle_sdl(e->dev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AUDIODEV_DRIVER_WAV:
|
||||||
|
handle_wav(e->dev);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/host-utils.h"
|
#include "qemu/host-utils.h"
|
||||||
#include "qemu/timer.h"
|
#include "qemu/timer.h"
|
||||||
|
#include "qapi/opts-visitor.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
|
|
||||||
#define AUDIO_CAP "wav"
|
#define AUDIO_CAP "wav"
|
||||||
|
@ -37,11 +38,6 @@ typedef struct WAVVoiceOut {
|
||||||
int total_samples;
|
int total_samples;
|
||||||
} WAVVoiceOut;
|
} WAVVoiceOut;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
struct audsettings settings;
|
|
||||||
const char *wav_path;
|
|
||||||
} WAVConf;
|
|
||||||
|
|
||||||
static int wav_run_out (HWVoiceOut *hw, int live)
|
static int wav_run_out (HWVoiceOut *hw, int live)
|
||||||
{
|
{
|
||||||
WAVVoiceOut *wav = (WAVVoiceOut *) hw;
|
WAVVoiceOut *wav = (WAVVoiceOut *) hw;
|
||||||
|
@ -112,8 +108,10 @@ static int wav_init_out(HWVoiceOut *hw, struct audsettings *as,
|
||||||
0x02, 0x00, 0x44, 0xac, 0x00, 0x00, 0x10, 0xb1, 0x02, 0x00, 0x04,
|
0x02, 0x00, 0x44, 0xac, 0x00, 0x00, 0x10, 0xb1, 0x02, 0x00, 0x04,
|
||||||
0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00
|
0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
WAVConf *conf = drv_opaque;
|
Audiodev *dev = drv_opaque;
|
||||||
struct audsettings wav_as = conf->settings;
|
AudiodevWavOptions *wopts = &dev->u.wav;
|
||||||
|
struct audsettings wav_as = audiodev_to_audsettings(dev->u.wav.out);
|
||||||
|
const char *wav_path = wopts->has_path ? wopts->path : "qemu.wav";
|
||||||
|
|
||||||
stereo = wav_as.nchannels == 2;
|
stereo = wav_as.nchannels == 2;
|
||||||
switch (wav_as.fmt) {
|
switch (wav_as.fmt) {
|
||||||
|
@ -154,10 +152,10 @@ static int wav_init_out(HWVoiceOut *hw, struct audsettings *as,
|
||||||
le_store (hdr + 28, hw->info.freq << (bits16 + stereo), 4);
|
le_store (hdr + 28, hw->info.freq << (bits16 + stereo), 4);
|
||||||
le_store (hdr + 32, 1 << (bits16 + stereo), 2);
|
le_store (hdr + 32, 1 << (bits16 + stereo), 2);
|
||||||
|
|
||||||
wav->f = fopen (conf->wav_path, "wb");
|
wav->f = fopen(wav_path, "wb");
|
||||||
if (!wav->f) {
|
if (!wav->f) {
|
||||||
dolog ("Failed to open wave file `%s'\nReason: %s\n",
|
dolog ("Failed to open wave file `%s'\nReason: %s\n",
|
||||||
conf->wav_path, strerror (errno));
|
wav_path, strerror(errno));
|
||||||
g_free (wav->pcm_buf);
|
g_free (wav->pcm_buf);
|
||||||
wav->pcm_buf = NULL;
|
wav->pcm_buf = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -225,54 +223,17 @@ static int wav_ctl_out (HWVoiceOut *hw, int cmd, ...)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static WAVConf glob_conf = {
|
|
||||||
.settings.freq = 44100,
|
|
||||||
.settings.nchannels = 2,
|
|
||||||
.settings.fmt = AUDIO_FORMAT_S16,
|
|
||||||
.wav_path = "qemu.wav"
|
|
||||||
};
|
|
||||||
|
|
||||||
static void *wav_audio_init(Audiodev *dev)
|
static void *wav_audio_init(Audiodev *dev)
|
||||||
{
|
{
|
||||||
WAVConf *conf = g_malloc(sizeof(WAVConf));
|
assert(dev->driver == AUDIODEV_DRIVER_WAV);
|
||||||
*conf = glob_conf;
|
return dev;
|
||||||
return conf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wav_audio_fini (void *opaque)
|
static void wav_audio_fini (void *opaque)
|
||||||
{
|
{
|
||||||
ldebug ("wav_fini");
|
ldebug ("wav_fini");
|
||||||
g_free(opaque);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct audio_option wav_options[] = {
|
|
||||||
{
|
|
||||||
.name = "FREQUENCY",
|
|
||||||
.tag = AUD_OPT_INT,
|
|
||||||
.valp = &glob_conf.settings.freq,
|
|
||||||
.descr = "Frequency"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "FORMAT",
|
|
||||||
.tag = AUD_OPT_FMT,
|
|
||||||
.valp = &glob_conf.settings.fmt,
|
|
||||||
.descr = "Format"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "DAC_FIXED_CHANNELS",
|
|
||||||
.tag = AUD_OPT_INT,
|
|
||||||
.valp = &glob_conf.settings.nchannels,
|
|
||||||
.descr = "Number of channels (1 - mono, 2 - stereo)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "PATH",
|
|
||||||
.tag = AUD_OPT_STR,
|
|
||||||
.valp = &glob_conf.wav_path,
|
|
||||||
.descr = "Path to wave file"
|
|
||||||
},
|
|
||||||
{ /* End of list */ }
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct audio_pcm_ops wav_pcm_ops = {
|
static struct audio_pcm_ops wav_pcm_ops = {
|
||||||
.init_out = wav_init_out,
|
.init_out = wav_init_out,
|
||||||
.fini_out = wav_fini_out,
|
.fini_out = wav_fini_out,
|
||||||
|
@ -284,7 +245,6 @@ static struct audio_pcm_ops wav_pcm_ops = {
|
||||||
static struct audio_driver wav_audio_driver = {
|
static struct audio_driver wav_audio_driver = {
|
||||||
.name = "wav",
|
.name = "wav",
|
||||||
.descr = "WAV renderer http://wikipedia.org/wiki/WAV",
|
.descr = "WAV renderer http://wikipedia.org/wiki/WAV",
|
||||||
.options = wav_options,
|
|
||||||
.init = wav_audio_init,
|
.init = wav_audio_init,
|
||||||
.fini = wav_audio_fini,
|
.fini = wav_audio_fini,
|
||||||
.pcm_ops = &wav_pcm_ops,
|
.pcm_ops = &wav_pcm_ops,
|
||||||
|
|
Loading…
Reference in a new issue