wavaudio: do not use global variables

Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Kővágó, Zoltán 2015-06-03 23:03:51 +02:00 committed by Gerd Hoffmann
parent 4045a85ad1
commit f2dcc6cec2
1 changed files with 21 additions and 16 deletions

View File

@ -36,15 +36,10 @@ typedef struct WAVVoiceOut {
int total_samples; int total_samples;
} WAVVoiceOut; } WAVVoiceOut;
static struct { typedef struct {
struct audsettings settings; struct audsettings settings;
const char *wav_path; const char *wav_path;
} conf = { } WAVConf;
.settings.freq = 44100,
.settings.nchannels = 2,
.settings.fmt = AUD_FMT_S16,
.wav_path = "qemu.wav"
};
static int wav_run_out (HWVoiceOut *hw, int live) static int wav_run_out (HWVoiceOut *hw, int live)
{ {
@ -116,7 +111,8 @@ 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
}; };
struct audsettings wav_as = conf.settings; WAVConf *conf = drv_opaque;
struct audsettings wav_as = conf->settings;
stereo = wav_as.nchannels == 2; stereo = wav_as.nchannels == 2;
switch (wav_as.fmt) { switch (wav_as.fmt) {
@ -154,10 +150,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 (conf->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)); conf->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,40 +221,49 @@ 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 = AUD_FMT_S16,
.wav_path = "qemu.wav"
};
static void *wav_audio_init (void) static void *wav_audio_init (void)
{ {
return &conf; WAVConf *conf = g_malloc(sizeof(WAVConf));
*conf = glob_conf;
return conf;
} }
static void wav_audio_fini (void *opaque) static void wav_audio_fini (void *opaque)
{ {
(void) opaque;
ldebug ("wav_fini"); ldebug ("wav_fini");
g_free(opaque);
} }
static struct audio_option wav_options[] = { static struct audio_option wav_options[] = {
{ {
.name = "FREQUENCY", .name = "FREQUENCY",
.tag = AUD_OPT_INT, .tag = AUD_OPT_INT,
.valp = &conf.settings.freq, .valp = &glob_conf.settings.freq,
.descr = "Frequency" .descr = "Frequency"
}, },
{ {
.name = "FORMAT", .name = "FORMAT",
.tag = AUD_OPT_FMT, .tag = AUD_OPT_FMT,
.valp = &conf.settings.fmt, .valp = &glob_conf.settings.fmt,
.descr = "Format" .descr = "Format"
}, },
{ {
.name = "DAC_FIXED_CHANNELS", .name = "DAC_FIXED_CHANNELS",
.tag = AUD_OPT_INT, .tag = AUD_OPT_INT,
.valp = &conf.settings.nchannels, .valp = &glob_conf.settings.nchannels,
.descr = "Number of channels (1 - mono, 2 - stereo)" .descr = "Number of channels (1 - mono, 2 - stereo)"
}, },
{ {
.name = "PATH", .name = "PATH",
.tag = AUD_OPT_STR, .tag = AUD_OPT_STR,
.valp = &conf.wav_path, .valp = &glob_conf.wav_path,
.descr = "Path to wave file" .descr = "Path to wave file"
}, },
{ /* End of list */ } { /* End of list */ }