提交 5706db1d 编写于 作者: K Kővágó, Zoltán 提交者: Gerd Hoffmann

audio: expose drv_opaque to init_out and init_in

Currently the opaque pointer returned by audio_driver's init is only
exposed to the driver's fini, but not to audio_pcm_ops. This way if
someone wants to share a variable with the driver and the pcm, he must
use global variables. This patch fixes it by adding a third parameter to
audio_pcm_op's init_out and init_in.
Signed-off-by: NKővágó, Zoltán <DirtY.iCE.hu@gmail.com>
Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
上级 307119e7
...@@ -807,7 +807,8 @@ static void alsa_fini_out (HWVoiceOut *hw) ...@@ -807,7 +807,8 @@ static void alsa_fini_out (HWVoiceOut *hw)
alsa->pcm_buf = NULL; alsa->pcm_buf = NULL;
} }
static int alsa_init_out (HWVoiceOut *hw, struct audsettings *as) static int alsa_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
ALSAVoiceOut *alsa = (ALSAVoiceOut *) hw; ALSAVoiceOut *alsa = (ALSAVoiceOut *) hw;
struct alsa_params_req req; struct alsa_params_req req;
...@@ -916,7 +917,7 @@ static int alsa_ctl_out (HWVoiceOut *hw, int cmd, ...) ...@@ -916,7 +917,7 @@ static int alsa_ctl_out (HWVoiceOut *hw, int cmd, ...)
return -1; return -1;
} }
static int alsa_init_in (HWVoiceIn *hw, struct audsettings *as) static int alsa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{ {
ALSAVoiceIn *alsa = (ALSAVoiceIn *) hw; ALSAVoiceIn *alsa = (ALSAVoiceIn *) hw;
struct alsa_params_req req; struct alsa_params_req req;
......
...@@ -156,13 +156,13 @@ struct audio_driver { ...@@ -156,13 +156,13 @@ struct audio_driver {
}; };
struct audio_pcm_ops { struct audio_pcm_ops {
int (*init_out)(HWVoiceOut *hw, struct audsettings *as); int (*init_out)(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque);
void (*fini_out)(HWVoiceOut *hw); void (*fini_out)(HWVoiceOut *hw);
int (*run_out) (HWVoiceOut *hw, int live); int (*run_out) (HWVoiceOut *hw, int live);
int (*write) (SWVoiceOut *sw, void *buf, int size); int (*write) (SWVoiceOut *sw, void *buf, int size);
int (*ctl_out) (HWVoiceOut *hw, int cmd, ...); int (*ctl_out) (HWVoiceOut *hw, int cmd, ...);
int (*init_in) (HWVoiceIn *hw, struct audsettings *as); int (*init_in) (HWVoiceIn *hw, struct audsettings *as, void *drv_opaque);
void (*fini_in) (HWVoiceIn *hw); void (*fini_in) (HWVoiceIn *hw);
int (*run_in) (HWVoiceIn *hw); int (*run_in) (HWVoiceIn *hw);
int (*read) (SWVoiceIn *sw, void *buf, int size); int (*read) (SWVoiceIn *sw, void *buf, int size);
......
...@@ -262,7 +262,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as) ...@@ -262,7 +262,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as)
#ifdef DAC #ifdef DAC
QLIST_INIT (&hw->cap_head); QLIST_INIT (&hw->cap_head);
#endif #endif
if (glue (hw->pcm_ops->init_, TYPE) (hw, as)) { if (glue (hw->pcm_ops->init_, TYPE) (hw, as, s->drv_opaque)) {
goto err0; goto err0;
} }
......
...@@ -287,7 +287,8 @@ static int coreaudio_write (SWVoiceOut *sw, void *buf, int len) ...@@ -287,7 +287,8 @@ static int coreaudio_write (SWVoiceOut *sw, void *buf, int len)
return audio_pcm_sw_write (sw, buf, len); return audio_pcm_sw_write (sw, buf, len);
} }
static int coreaudio_init_out (HWVoiceOut *hw, struct audsettings *as) static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
OSStatus status; OSStatus status;
coreaudioVoiceOut *core = (coreaudioVoiceOut *) hw; coreaudioVoiceOut *core = (coreaudioVoiceOut *) hw;
......
...@@ -174,9 +174,11 @@ static void dsound_fini_out (HWVoiceOut *hw) ...@@ -174,9 +174,11 @@ static void dsound_fini_out (HWVoiceOut *hw)
} }
#ifdef DSBTYPE_IN #ifdef DSBTYPE_IN
static int dsound_init_in (HWVoiceIn *hw, struct audsettings *as) static int dsound_init_in(HWVoiceIn *hw, struct audsettings *as,
void *drv_opaque)
#else #else
static int dsound_init_out (HWVoiceOut *hw, struct audsettings *as) static int dsound_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
#endif #endif
{ {
int err; int err;
......
...@@ -63,7 +63,7 @@ static int no_write (SWVoiceOut *sw, void *buf, int len) ...@@ -63,7 +63,7 @@ static int no_write (SWVoiceOut *sw, void *buf, int len)
return audio_pcm_sw_write (sw, buf, len); return audio_pcm_sw_write (sw, buf, len);
} }
static int no_init_out (HWVoiceOut *hw, struct audsettings *as) static int no_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
{ {
audio_pcm_init_info (&hw->info, as); audio_pcm_init_info (&hw->info, as);
hw->samples = 1024; hw->samples = 1024;
...@@ -82,7 +82,7 @@ static int no_ctl_out (HWVoiceOut *hw, int cmd, ...) ...@@ -82,7 +82,7 @@ static int no_ctl_out (HWVoiceOut *hw, int cmd, ...)
return 0; return 0;
} }
static int no_init_in (HWVoiceIn *hw, struct audsettings *as) static int no_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{ {
audio_pcm_init_info (&hw->info, as); audio_pcm_init_info (&hw->info, as);
hw->samples = 1024; hw->samples = 1024;
......
...@@ -510,7 +510,8 @@ static void oss_fini_out (HWVoiceOut *hw) ...@@ -510,7 +510,8 @@ static void oss_fini_out (HWVoiceOut *hw)
} }
} }
static int oss_init_out (HWVoiceOut *hw, struct audsettings *as) static int oss_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
OSSVoiceOut *oss = (OSSVoiceOut *) hw; OSSVoiceOut *oss = (OSSVoiceOut *) hw;
struct oss_params req, obt; struct oss_params req, obt;
...@@ -677,7 +678,7 @@ static int oss_ctl_out (HWVoiceOut *hw, int cmd, ...) ...@@ -677,7 +678,7 @@ static int oss_ctl_out (HWVoiceOut *hw, int cmd, ...)
return 0; return 0;
} }
static int oss_init_in (HWVoiceIn *hw, struct audsettings *as) static int oss_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{ {
OSSVoiceIn *oss = (OSSVoiceIn *) hw; OSSVoiceIn *oss = (OSSVoiceIn *) hw;
struct oss_params req, obt; struct oss_params req, obt;
......
...@@ -534,7 +534,8 @@ fail: ...@@ -534,7 +534,8 @@ fail:
return NULL; return NULL;
} }
static int qpa_init_out (HWVoiceOut *hw, struct audsettings *as) static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
int error; int error;
static pa_sample_spec ss; static pa_sample_spec ss;
...@@ -601,7 +602,7 @@ static int qpa_init_out (HWVoiceOut *hw, struct audsettings *as) ...@@ -601,7 +602,7 @@ static int qpa_init_out (HWVoiceOut *hw, struct audsettings *as)
return -1; return -1;
} }
static int qpa_init_in (HWVoiceIn *hw, struct audsettings *as) static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{ {
int error; int error;
static pa_sample_spec ss; static pa_sample_spec ss;
......
...@@ -332,7 +332,8 @@ static void sdl_fini_out (HWVoiceOut *hw) ...@@ -332,7 +332,8 @@ static void sdl_fini_out (HWVoiceOut *hw)
sdl_close (&glob_sdl); sdl_close (&glob_sdl);
} }
static int sdl_init_out (HWVoiceOut *hw, struct audsettings *as) static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
SDLVoiceOut *sdl = (SDLVoiceOut *) hw; SDLVoiceOut *sdl = (SDLVoiceOut *) hw;
SDLAudioState *s = &glob_sdl; SDLAudioState *s = &glob_sdl;
......
...@@ -115,7 +115,8 @@ static int rate_get_samples (struct audio_pcm_info *info, SpiceRateCtl *rate) ...@@ -115,7 +115,8 @@ static int rate_get_samples (struct audio_pcm_info *info, SpiceRateCtl *rate)
/* playback */ /* playback */
static int line_out_init (HWVoiceOut *hw, struct audsettings *as) static int line_out_init(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
SpiceVoiceOut *out = container_of (hw, SpiceVoiceOut, hw); SpiceVoiceOut *out = container_of (hw, SpiceVoiceOut, hw);
struct audsettings settings; struct audsettings settings;
...@@ -243,7 +244,7 @@ static int line_out_ctl (HWVoiceOut *hw, int cmd, ...) ...@@ -243,7 +244,7 @@ static int line_out_ctl (HWVoiceOut *hw, int cmd, ...)
/* record */ /* record */
static int line_in_init (HWVoiceIn *hw, struct audsettings *as) static int line_in_init(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{ {
SpiceVoiceIn *in = container_of (hw, SpiceVoiceIn, hw); SpiceVoiceIn *in = container_of (hw, SpiceVoiceIn, hw);
struct audsettings settings; struct audsettings settings;
......
...@@ -105,7 +105,8 @@ static void le_store (uint8_t *buf, uint32_t val, int len) ...@@ -105,7 +105,8 @@ static void le_store (uint8_t *buf, uint32_t val, int len)
} }
} }
static int wav_init_out (HWVoiceOut *hw, struct audsettings *as) static int wav_init_out(HWVoiceOut *hw, struct audsettings *as,
void *drv_opaque)
{ {
WAVVoiceOut *wav = (WAVVoiceOut *) hw; WAVVoiceOut *wav = (WAVVoiceOut *) hw;
int bits16 = 0, stereo = 0; int bits16 = 0, stereo = 0;
...@@ -117,8 +118,6 @@ static int wav_init_out (HWVoiceOut *hw, struct audsettings *as) ...@@ -117,8 +118,6 @@ static int wav_init_out (HWVoiceOut *hw, struct audsettings *as)
}; };
struct audsettings wav_as = conf.settings; struct audsettings wav_as = conf.settings;
(void) as;
stereo = wav_as.nchannels == 2; stereo = wav_as.nchannels == 2;
switch (wav_as.fmt) { switch (wav_as.fmt) {
case AUD_FMT_S8: case AUD_FMT_S8:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册