* [Qemu-devel] [PATCH 0/7] audio: modularize @ 2018-03-06 7:40 Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 1/7] audio: add driver registry Gerd Hoffmann ` (7 more replies) 0 siblings, 8 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Add audio driver (host backend) registry. Add audio module support. Enable module builds for alsa, oss, pulse and sdl. Gerd Hoffmann (7): audio: add driver registry audio: add module loading support build: enable audio modules audio/alsa: build as module audio/oss: build as module audio/pulseaudio: build as module audio/sdl: build as module configure | 7 ++++- Makefile | 4 +++ Makefile.objs | 1 + audio/audio_int.h | 14 ++++----- include/qemu/module.h | 1 + audio/alsaaudio.c | 8 ++++- audio/audio.c | 83 +++++++++++++++++++++++++++++++++++---------------- audio/coreaudio.c | 8 ++++- audio/dsoundaudio.c | 8 ++++- audio/noaudio.c | 8 ++++- audio/ossaudio.c | 8 ++++- audio/paaudio.c | 8 ++++- audio/sdlaudio.c | 8 ++++- audio/spiceaudio.c | 8 ++++- audio/wavaudio.c | 8 ++++- audio/Makefile.objs | 30 +++++++++++++------ scripts/create_config | 2 +- 17 files changed, 159 insertions(+), 55 deletions(-) -- 2.9.3 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 1/7] audio: add driver registry 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 10:58 ` Marc-André Lureau 2018-03-06 7:40 ` [Qemu-devel] [PATCH 2/7] audio: add module loading support Gerd Hoffmann ` (6 subsequent siblings) 7 siblings, 1 reply; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Add registry for audio drivers, using the existing audio_driver struct. Make all drivers register themself. The old list of audio_driver struct pointers is now a list of audio driver names, specifying the priority (aka probe order) in case no driver is explicitly asked for. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- audio/audio_int.h | 14 ++++-------- audio/alsaaudio.c | 8 ++++++- audio/audio.c | 63 ++++++++++++++++++++++++++++++--------------------- audio/coreaudio.c | 8 ++++++- audio/dsoundaudio.c | 8 ++++++- audio/noaudio.c | 8 ++++++- audio/ossaudio.c | 8 ++++++- audio/paaudio.c | 8 ++++++- audio/sdlaudio.c | 8 ++++++- audio/spiceaudio.c | 8 ++++++- audio/wavaudio.c | 8 ++++++- scripts/create_config | 2 +- 12 files changed, 106 insertions(+), 45 deletions(-) diff --git a/audio/audio_int.h b/audio/audio_int.h index 700bd43143..244b454012 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -141,6 +141,7 @@ struct SWVoiceIn { QLIST_ENTRY (SWVoiceIn) entries; }; +typedef struct audio_driver audio_driver; struct audio_driver { const char *name; const char *descr; @@ -154,6 +155,7 @@ struct audio_driver { int voice_size_out; int voice_size_in; int ctl_caps; + QLIST_ENTRY(audio_driver) next; }; struct audio_pcm_ops { @@ -203,17 +205,11 @@ struct AudioState { int vm_running; }; -extern struct audio_driver no_audio_driver; -extern struct audio_driver oss_audio_driver; -extern struct audio_driver sdl_audio_driver; -extern struct audio_driver wav_audio_driver; -extern struct audio_driver alsa_audio_driver; -extern struct audio_driver coreaudio_audio_driver; -extern struct audio_driver dsound_audio_driver; -extern struct audio_driver pa_audio_driver; -extern struct audio_driver spice_audio_driver; extern const struct mixeng_volume nominal_volume; +void audio_driver_register(audio_driver *drv); +audio_driver *audio_driver_lookup(const char *name); + void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as); void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len); diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c index 92a96f8b2b..362a2276fd 100644 --- a/audio/alsaaudio.c +++ b/audio/alsaaudio.c @@ -1213,7 +1213,7 @@ static struct audio_pcm_ops alsa_pcm_ops = { .ctl_in = alsa_ctl_in, }; -struct audio_driver alsa_audio_driver = { +static struct audio_driver alsa_audio_driver = { .name = "alsa", .descr = "ALSA http://www.alsa-project.org", .options = alsa_options, @@ -1226,3 +1226,9 @@ struct audio_driver alsa_audio_driver = { .voice_size_out = sizeof (ALSAVoiceOut), .voice_size_in = sizeof (ALSAVoiceIn) }; + +static void register_audio_alsa(void) +{ + audio_driver_register(&alsa_audio_driver); +} +type_init(register_audio_alsa); diff --git a/audio/audio.c b/audio/audio.c index 7658d2af66..2384612b87 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -45,15 +45,32 @@ The 1st one is the one used by default, that is the reason that we generate the list. */ -static struct audio_driver *drvtab[] = { -#ifdef CONFIG_SPICE - &spice_audio_driver, -#endif +static const char *audio_prio_list[] = { + "spice", CONFIG_AUDIO_DRIVERS - &no_audio_driver, - &wav_audio_driver + "none", + "wav", }; +static QLIST_HEAD(, audio_driver) audio_drivers; + +void audio_driver_register(audio_driver *drv) +{ + QLIST_INSERT_HEAD(&audio_drivers, drv, next); +} + +audio_driver *audio_driver_lookup(const char *name) +{ + struct audio_driver *d; + + QLIST_FOREACH(d, &audio_drivers, next) { + if (strcmp(name, d->name) == 0) { + return d; + } + } + return NULL; +} + struct fixed_settings { int enabled; int nb_voices; @@ -1656,11 +1673,10 @@ static void audio_pp_nb_voices (const char *typ, int nb) void AUD_help (void) { - size_t i; + struct audio_driver *d; audio_process_options ("AUDIO", audio_options); - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { - struct audio_driver *d = drvtab[i]; + QLIST_FOREACH(d, &audio_drivers, next) { if (d->options) { audio_process_options (d->name, d->options); } @@ -1672,8 +1688,7 @@ void AUD_help (void) printf ("Available drivers:\n"); - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { - struct audio_driver *d = drvtab[i]; + QLIST_FOREACH(d, &audio_drivers, next) { printf ("Name: %s\n", d->name); printf ("Description: %s\n", d->descr); @@ -1807,6 +1822,7 @@ static void audio_init (void) const char *drvname; VMChangeStateEntry *e; AudioState *s = &glob_audio_state; + struct audio_driver *driver; if (s->drv) { return; @@ -1842,32 +1858,27 @@ static void audio_init (void) } if (drvname) { - int found = 0; - - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { - if (!strcmp (drvname, drvtab[i]->name)) { - done = !audio_driver_init (s, drvtab[i]); - found = 1; - break; - } - } - - if (!found) { + driver = audio_driver_lookup(drvname); + if (driver) { + done = !audio_driver_init(s, driver); + } else { dolog ("Unknown audio driver `%s'\n", drvname); dolog ("Run with -audio-help to list available drivers\n"); } } if (!done) { - for (i = 0; !done && i < ARRAY_SIZE (drvtab); i++) { - if (drvtab[i]->can_be_default) { - done = !audio_driver_init (s, drvtab[i]); + for (i = 0; !done && i < ARRAY_SIZE(audio_prio_list); i++) { + driver = audio_driver_lookup(audio_prio_list[i]); + if (driver && driver->can_be_default) { + done = !audio_driver_init(s, driver); } } } if (!done) { - done = !audio_driver_init (s, &no_audio_driver); + driver = audio_driver_lookup("none"); + done = !audio_driver_init(s, driver); assert(done); dolog("warning: Using timer based audio emulation\n"); } diff --git a/audio/coreaudio.c b/audio/coreaudio.c index c75142084f..638c60b300 100644 --- a/audio/coreaudio.c +++ b/audio/coreaudio.c @@ -722,7 +722,7 @@ static struct audio_pcm_ops coreaudio_pcm_ops = { .ctl_out = coreaudio_ctl_out }; -struct audio_driver coreaudio_audio_driver = { +static struct audio_driver coreaudio_audio_driver = { .name = "coreaudio", .descr = "CoreAudio http://developer.apple.com/audio/coreaudio.html", .options = coreaudio_options, @@ -735,3 +735,9 @@ struct audio_driver coreaudio_audio_driver = { .voice_size_out = sizeof (coreaudioVoiceOut), .voice_size_in = 0 }; + +static void register_audio_coreaudio(void) +{ + audio_driver_register(&coreaudio_audio_driver); +} +type_init(register_audio_coreaudio); diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c index bc39cb9b4d..3ed73a30d1 100644 --- a/audio/dsoundaudio.c +++ b/audio/dsoundaudio.c @@ -890,7 +890,7 @@ static struct audio_pcm_ops dsound_pcm_ops = { .ctl_in = dsound_ctl_in }; -struct audio_driver dsound_audio_driver = { +static struct audio_driver dsound_audio_driver = { .name = "dsound", .descr = "DirectSound http://wikipedia.org/wiki/DirectSound", .options = dsound_options, @@ -903,3 +903,9 @@ struct audio_driver dsound_audio_driver = { .voice_size_out = sizeof (DSoundVoiceOut), .voice_size_in = sizeof (DSoundVoiceIn) }; + +static void register_audio_dsound(void) +{ + audio_driver_register(&dsound_audio_driver); +} +type_init(register_audio_dsound); diff --git a/audio/noaudio.c b/audio/noaudio.c index 9ca9eaf01f..1bfebeca7d 100644 --- a/audio/noaudio.c +++ b/audio/noaudio.c @@ -160,7 +160,7 @@ static struct audio_pcm_ops no_pcm_ops = { .ctl_in = no_ctl_in }; -struct audio_driver no_audio_driver = { +static struct audio_driver no_audio_driver = { .name = "none", .descr = "Timer based audio emulation", .options = NULL, @@ -173,3 +173,9 @@ struct audio_driver no_audio_driver = { .voice_size_out = sizeof (NoVoiceOut), .voice_size_in = sizeof (NoVoiceIn) }; + +static void register_audio_none(void) +{ + audio_driver_register(&no_audio_driver); +} +type_init(register_audio_none); diff --git a/audio/ossaudio.c b/audio/ossaudio.c index a0428881c2..6c69622b4c 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -922,7 +922,7 @@ static struct audio_pcm_ops oss_pcm_ops = { .ctl_in = oss_ctl_in }; -struct audio_driver oss_audio_driver = { +static struct audio_driver oss_audio_driver = { .name = "oss", .descr = "OSS http://www.opensound.com", .options = oss_options, @@ -935,3 +935,9 @@ struct audio_driver oss_audio_driver = { .voice_size_out = sizeof (OSSVoiceOut), .voice_size_in = sizeof (OSSVoiceIn) }; + +static void register_audio_oss(void) +{ + audio_driver_register(&oss_audio_driver); +} +type_init(register_audio_oss); diff --git a/audio/paaudio.c b/audio/paaudio.c index aa0a7477d3..949769774d 100644 --- a/audio/paaudio.c +++ b/audio/paaudio.c @@ -937,7 +937,7 @@ static struct audio_pcm_ops qpa_pcm_ops = { .ctl_in = qpa_ctl_in }; -struct audio_driver pa_audio_driver = { +static struct audio_driver pa_audio_driver = { .name = "pa", .descr = "http://www.pulseaudio.org/", .options = qpa_options, @@ -951,3 +951,9 @@ struct audio_driver pa_audio_driver = { .voice_size_in = sizeof (PAVoiceIn), .ctl_caps = VOICE_VOLUME_CAP }; + +static void register_audio_pa(void) +{ + audio_driver_register(&pa_audio_driver); +} +type_init(register_audio_pa); diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index e92135bd2f..9db5ac92bc 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -500,7 +500,7 @@ static struct audio_pcm_ops sdl_pcm_ops = { .ctl_out = sdl_ctl_out, }; -struct audio_driver sdl_audio_driver = { +static struct audio_driver sdl_audio_driver = { .name = "sdl", .descr = "SDL http://www.libsdl.org", .options = sdl_options, @@ -513,3 +513,9 @@ struct audio_driver sdl_audio_driver = { .voice_size_out = sizeof (SDLVoiceOut), .voice_size_in = 0 }; + +static void register_audio_sdl(void) +{ + audio_driver_register(&sdl_audio_driver); +} +type_init(register_audio_sdl); diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c index 5580e76307..6ad0eafbc6 100644 --- a/audio/spiceaudio.c +++ b/audio/spiceaudio.c @@ -391,7 +391,7 @@ static struct audio_pcm_ops audio_callbacks = { .ctl_in = line_in_ctl, }; -struct audio_driver spice_audio_driver = { +static struct audio_driver spice_audio_driver = { .name = "spice", .descr = "spice audio driver", .options = audio_options, @@ -411,3 +411,9 @@ void qemu_spice_audio_init (void) { spice_audio_driver.can_be_default = 1; } + +static void register_audio_spice(void) +{ + audio_driver_register(&spice_audio_driver); +} +type_init(register_audio_spice); diff --git a/audio/wavaudio.c b/audio/wavaudio.c index 068a595732..40adfa30c3 100644 --- a/audio/wavaudio.c +++ b/audio/wavaudio.c @@ -278,7 +278,7 @@ static struct audio_pcm_ops wav_pcm_ops = { .ctl_out = wav_ctl_out, }; -struct audio_driver wav_audio_driver = { +static struct audio_driver wav_audio_driver = { .name = "wav", .descr = "WAV renderer http://wikipedia.org/wiki/WAV", .options = wav_options, @@ -291,3 +291,9 @@ struct audio_driver wav_audio_driver = { .voice_size_out = sizeof (WAVVoiceOut), .voice_size_in = 0 }; + +static void register_audio_wav(void) +{ + audio_driver_register(&wav_audio_driver); +} +type_init(register_audio_wav); diff --git a/scripts/create_config b/scripts/create_config index 603b826886..d727e5e36e 100755 --- a/scripts/create_config +++ b/scripts/create_config @@ -36,7 +36,7 @@ case $line in drivers=${line#*=} echo "#define CONFIG_AUDIO_DRIVERS \\" for drv in $drivers; do - echo " &${drv}_audio_driver,\\" + echo " \"${drv}\",\\" done echo "" ;; -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 1/7] audio: add driver registry 2018-03-06 7:40 ` [Qemu-devel] [PATCH 1/7] audio: add driver registry Gerd Hoffmann @ 2018-03-06 10:58 ` Marc-André Lureau 0 siblings, 0 replies; 15+ messages in thread From: Marc-André Lureau @ 2018-03-06 10:58 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: QEMU On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote: > Add registry for audio drivers, using the existing audio_driver struct. > Make all drivers register themself. The old list of audio_driver struct > pointers is now a list of audio driver names, specifying the priority > (aka probe order) in case no driver is explicitly asked for. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > audio/audio_int.h | 14 ++++-------- > audio/alsaaudio.c | 8 ++++++- > audio/audio.c | 63 ++++++++++++++++++++++++++++++--------------------- > audio/coreaudio.c | 8 ++++++- > audio/dsoundaudio.c | 8 ++++++- > audio/noaudio.c | 8 ++++++- > audio/ossaudio.c | 8 ++++++- > audio/paaudio.c | 8 ++++++- > audio/sdlaudio.c | 8 ++++++- > audio/spiceaudio.c | 8 ++++++- > audio/wavaudio.c | 8 ++++++- > scripts/create_config | 2 +- > 12 files changed, 106 insertions(+), 45 deletions(-) > > diff --git a/audio/audio_int.h b/audio/audio_int.h > index 700bd43143..244b454012 100644 > --- a/audio/audio_int.h > +++ b/audio/audio_int.h > @@ -141,6 +141,7 @@ struct SWVoiceIn { > QLIST_ENTRY (SWVoiceIn) entries; > }; > > +typedef struct audio_driver audio_driver; > struct audio_driver { > const char *name; > const char *descr; > @@ -154,6 +155,7 @@ struct audio_driver { > int voice_size_out; > int voice_size_in; > int ctl_caps; > + QLIST_ENTRY(audio_driver) next; > }; > > struct audio_pcm_ops { > @@ -203,17 +205,11 @@ struct AudioState { > int vm_running; > }; > > -extern struct audio_driver no_audio_driver; > -extern struct audio_driver oss_audio_driver; > -extern struct audio_driver sdl_audio_driver; > -extern struct audio_driver wav_audio_driver; > -extern struct audio_driver alsa_audio_driver; > -extern struct audio_driver coreaudio_audio_driver; > -extern struct audio_driver dsound_audio_driver; > -extern struct audio_driver pa_audio_driver; > -extern struct audio_driver spice_audio_driver; > extern const struct mixeng_volume nominal_volume; > > +void audio_driver_register(audio_driver *drv); > +audio_driver *audio_driver_lookup(const char *name); > + > void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as); > void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len); > > diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c > index 92a96f8b2b..362a2276fd 100644 > --- a/audio/alsaaudio.c > +++ b/audio/alsaaudio.c > @@ -1213,7 +1213,7 @@ static struct audio_pcm_ops alsa_pcm_ops = { > .ctl_in = alsa_ctl_in, > }; > > -struct audio_driver alsa_audio_driver = { > +static struct audio_driver alsa_audio_driver = { > .name = "alsa", > .descr = "ALSA http://www.alsa-project.org", > .options = alsa_options, > @@ -1226,3 +1226,9 @@ struct audio_driver alsa_audio_driver = { > .voice_size_out = sizeof (ALSAVoiceOut), > .voice_size_in = sizeof (ALSAVoiceIn) > }; > + > +static void register_audio_alsa(void) > +{ > + audio_driver_register(&alsa_audio_driver); > +} > +type_init(register_audio_alsa); > diff --git a/audio/audio.c b/audio/audio.c > index 7658d2af66..2384612b87 100644 > --- a/audio/audio.c > +++ b/audio/audio.c > @@ -45,15 +45,32 @@ > The 1st one is the one used by default, that is the reason > that we generate the list. > */ > -static struct audio_driver *drvtab[] = { > -#ifdef CONFIG_SPICE > - &spice_audio_driver, > -#endif > +static const char *audio_prio_list[] = { > + "spice", > CONFIG_AUDIO_DRIVERS > - &no_audio_driver, > - &wav_audio_driver > + "none", > + "wav", > }; > > +static QLIST_HEAD(, audio_driver) audio_drivers; > + > +void audio_driver_register(audio_driver *drv) > +{ > + QLIST_INSERT_HEAD(&audio_drivers, drv, next); > +} > + > +audio_driver *audio_driver_lookup(const char *name) > +{ > + struct audio_driver *d; > + > + QLIST_FOREACH(d, &audio_drivers, next) { > + if (strcmp(name, d->name) == 0) { > + return d; > + } > + } > + return NULL; > +} > + > struct fixed_settings { > int enabled; > int nb_voices; > @@ -1656,11 +1673,10 @@ static void audio_pp_nb_voices (const char *typ, int nb) > > void AUD_help (void) > { > - size_t i; > + struct audio_driver *d; > > audio_process_options ("AUDIO", audio_options); > - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { > - struct audio_driver *d = drvtab[i]; > + QLIST_FOREACH(d, &audio_drivers, next) { > if (d->options) { > audio_process_options (d->name, d->options); > } > @@ -1672,8 +1688,7 @@ void AUD_help (void) > > printf ("Available drivers:\n"); > > - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { > - struct audio_driver *d = drvtab[i]; > + QLIST_FOREACH(d, &audio_drivers, next) { > > printf ("Name: %s\n", d->name); > printf ("Description: %s\n", d->descr); > @@ -1807,6 +1822,7 @@ static void audio_init (void) > const char *drvname; > VMChangeStateEntry *e; > AudioState *s = &glob_audio_state; > + struct audio_driver *driver; > > if (s->drv) { > return; > @@ -1842,32 +1858,27 @@ static void audio_init (void) > } > > if (drvname) { > - int found = 0; > - > - for (i = 0; i < ARRAY_SIZE (drvtab); i++) { > - if (!strcmp (drvname, drvtab[i]->name)) { > - done = !audio_driver_init (s, drvtab[i]); > - found = 1; > - break; > - } > - } > - > - if (!found) { > + driver = audio_driver_lookup(drvname); > + if (driver) { > + done = !audio_driver_init(s, driver); > + } else { > dolog ("Unknown audio driver `%s'\n", drvname); > dolog ("Run with -audio-help to list available drivers\n"); > } > } > > if (!done) { > - for (i = 0; !done && i < ARRAY_SIZE (drvtab); i++) { > - if (drvtab[i]->can_be_default) { > - done = !audio_driver_init (s, drvtab[i]); > + for (i = 0; !done && i < ARRAY_SIZE(audio_prio_list); i++) { > + driver = audio_driver_lookup(audio_prio_list[i]); > + if (driver && driver->can_be_default) { > + done = !audio_driver_init(s, driver); > } > } > } > > if (!done) { > - done = !audio_driver_init (s, &no_audio_driver); > + driver = audio_driver_lookup("none"); > + done = !audio_driver_init(s, driver); > assert(done); > dolog("warning: Using timer based audio emulation\n"); > } > diff --git a/audio/coreaudio.c b/audio/coreaudio.c > index c75142084f..638c60b300 100644 > --- a/audio/coreaudio.c > +++ b/audio/coreaudio.c > @@ -722,7 +722,7 @@ static struct audio_pcm_ops coreaudio_pcm_ops = { > .ctl_out = coreaudio_ctl_out > }; > > -struct audio_driver coreaudio_audio_driver = { > +static struct audio_driver coreaudio_audio_driver = { > .name = "coreaudio", > .descr = "CoreAudio http://developer.apple.com/audio/coreaudio.html", > .options = coreaudio_options, > @@ -735,3 +735,9 @@ struct audio_driver coreaudio_audio_driver = { > .voice_size_out = sizeof (coreaudioVoiceOut), > .voice_size_in = 0 > }; > + > +static void register_audio_coreaudio(void) > +{ > + audio_driver_register(&coreaudio_audio_driver); > +} > +type_init(register_audio_coreaudio); > diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c > index bc39cb9b4d..3ed73a30d1 100644 > --- a/audio/dsoundaudio.c > +++ b/audio/dsoundaudio.c > @@ -890,7 +890,7 @@ static struct audio_pcm_ops dsound_pcm_ops = { > .ctl_in = dsound_ctl_in > }; > > -struct audio_driver dsound_audio_driver = { > +static struct audio_driver dsound_audio_driver = { > .name = "dsound", > .descr = "DirectSound http://wikipedia.org/wiki/DirectSound", > .options = dsound_options, > @@ -903,3 +903,9 @@ struct audio_driver dsound_audio_driver = { > .voice_size_out = sizeof (DSoundVoiceOut), > .voice_size_in = sizeof (DSoundVoiceIn) > }; > + > +static void register_audio_dsound(void) > +{ > + audio_driver_register(&dsound_audio_driver); > +} > +type_init(register_audio_dsound); > diff --git a/audio/noaudio.c b/audio/noaudio.c > index 9ca9eaf01f..1bfebeca7d 100644 > --- a/audio/noaudio.c > +++ b/audio/noaudio.c > @@ -160,7 +160,7 @@ static struct audio_pcm_ops no_pcm_ops = { > .ctl_in = no_ctl_in > }; > > -struct audio_driver no_audio_driver = { > +static struct audio_driver no_audio_driver = { > .name = "none", > .descr = "Timer based audio emulation", > .options = NULL, > @@ -173,3 +173,9 @@ struct audio_driver no_audio_driver = { > .voice_size_out = sizeof (NoVoiceOut), > .voice_size_in = sizeof (NoVoiceIn) > }; > + > +static void register_audio_none(void) > +{ > + audio_driver_register(&no_audio_driver); > +} > +type_init(register_audio_none); > diff --git a/audio/ossaudio.c b/audio/ossaudio.c > index a0428881c2..6c69622b4c 100644 > --- a/audio/ossaudio.c > +++ b/audio/ossaudio.c > @@ -922,7 +922,7 @@ static struct audio_pcm_ops oss_pcm_ops = { > .ctl_in = oss_ctl_in > }; > > -struct audio_driver oss_audio_driver = { > +static struct audio_driver oss_audio_driver = { > .name = "oss", > .descr = "OSS http://www.opensound.com", > .options = oss_options, > @@ -935,3 +935,9 @@ struct audio_driver oss_audio_driver = { > .voice_size_out = sizeof (OSSVoiceOut), > .voice_size_in = sizeof (OSSVoiceIn) > }; > + > +static void register_audio_oss(void) > +{ > + audio_driver_register(&oss_audio_driver); > +} > +type_init(register_audio_oss); > diff --git a/audio/paaudio.c b/audio/paaudio.c > index aa0a7477d3..949769774d 100644 > --- a/audio/paaudio.c > +++ b/audio/paaudio.c > @@ -937,7 +937,7 @@ static struct audio_pcm_ops qpa_pcm_ops = { > .ctl_in = qpa_ctl_in > }; > > -struct audio_driver pa_audio_driver = { > +static struct audio_driver pa_audio_driver = { > .name = "pa", > .descr = "http://www.pulseaudio.org/", > .options = qpa_options, > @@ -951,3 +951,9 @@ struct audio_driver pa_audio_driver = { > .voice_size_in = sizeof (PAVoiceIn), > .ctl_caps = VOICE_VOLUME_CAP > }; > + > +static void register_audio_pa(void) > +{ > + audio_driver_register(&pa_audio_driver); > +} > +type_init(register_audio_pa); > diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c > index e92135bd2f..9db5ac92bc 100644 > --- a/audio/sdlaudio.c > +++ b/audio/sdlaudio.c > @@ -500,7 +500,7 @@ static struct audio_pcm_ops sdl_pcm_ops = { > .ctl_out = sdl_ctl_out, > }; > > -struct audio_driver sdl_audio_driver = { > +static struct audio_driver sdl_audio_driver = { > .name = "sdl", > .descr = "SDL http://www.libsdl.org", > .options = sdl_options, > @@ -513,3 +513,9 @@ struct audio_driver sdl_audio_driver = { > .voice_size_out = sizeof (SDLVoiceOut), > .voice_size_in = 0 > }; > + > +static void register_audio_sdl(void) > +{ > + audio_driver_register(&sdl_audio_driver); > +} > +type_init(register_audio_sdl); > diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c > index 5580e76307..6ad0eafbc6 100644 > --- a/audio/spiceaudio.c > +++ b/audio/spiceaudio.c > @@ -391,7 +391,7 @@ static struct audio_pcm_ops audio_callbacks = { > .ctl_in = line_in_ctl, > }; > > -struct audio_driver spice_audio_driver = { > +static struct audio_driver spice_audio_driver = { > .name = "spice", > .descr = "spice audio driver", > .options = audio_options, > @@ -411,3 +411,9 @@ void qemu_spice_audio_init (void) > { > spice_audio_driver.can_be_default = 1; > } > + > +static void register_audio_spice(void) > +{ > + audio_driver_register(&spice_audio_driver); > +} > +type_init(register_audio_spice); > diff --git a/audio/wavaudio.c b/audio/wavaudio.c > index 068a595732..40adfa30c3 100644 > --- a/audio/wavaudio.c > +++ b/audio/wavaudio.c > @@ -278,7 +278,7 @@ static struct audio_pcm_ops wav_pcm_ops = { > .ctl_out = wav_ctl_out, > }; > > -struct audio_driver wav_audio_driver = { > +static struct audio_driver wav_audio_driver = { > .name = "wav", > .descr = "WAV renderer http://wikipedia.org/wiki/WAV", > .options = wav_options, > @@ -291,3 +291,9 @@ struct audio_driver wav_audio_driver = { > .voice_size_out = sizeof (WAVVoiceOut), > .voice_size_in = 0 > }; > + > +static void register_audio_wav(void) > +{ > + audio_driver_register(&wav_audio_driver); > +} > +type_init(register_audio_wav); > diff --git a/scripts/create_config b/scripts/create_config > index 603b826886..d727e5e36e 100755 > --- a/scripts/create_config > +++ b/scripts/create_config > @@ -36,7 +36,7 @@ case $line in > drivers=${line#*=} > echo "#define CONFIG_AUDIO_DRIVERS \\" > for drv in $drivers; do > - echo " &${drv}_audio_driver,\\" > + echo " \"${drv}\",\\" > done > echo "" > ;; > -- > 2.9.3 > > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 2/7] audio: add module loading support 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 1/7] audio: add driver registry Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 10:59 ` Marc-André Lureau 2018-03-06 7:40 ` [Qemu-devel] [PATCH 3/7] build: enable audio modules Gerd Hoffmann ` (5 subsequent siblings) 7 siblings, 1 reply; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Make audio_driver_lookup() try load the module in case it doesn't find the driver in the registry. Also load all modules for -audio-help, so the help output includes the help text for modular audio drivers. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/qemu/module.h | 1 + audio/audio.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/qemu/module.h b/include/qemu/module.h index 9fea75aaeb..54300ab6e5 100644 --- a/include/qemu/module.h +++ b/include/qemu/module.h @@ -54,6 +54,7 @@ typedef enum { #define block_module_load_one(lib) module_load_one("block-", lib) #define ui_module_load_one(lib) module_load_one("ui-", lib) +#define audio_module_load_one(lib) module_load_one("audio-", lib) void register_module_init(void (*fn)(void), module_init_type type); void register_dso_module_init(void (*fn)(void), module_init_type type); diff --git a/audio/audio.c b/audio/audio.c index 2384612b87..6eccdb17ee 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -68,9 +68,26 @@ audio_driver *audio_driver_lookup(const char *name) return d; } } + + audio_module_load_one(name); + QLIST_FOREACH(d, &audio_drivers, next) { + if (strcmp(name, d->name) == 0) { + return d; + } + } + return NULL; } +static void audio_module_load_all(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(audio_prio_list); i++) { + audio_driver_lookup(audio_prio_list[i]); + } +} + struct fixed_settings { int enabled; int nb_voices; @@ -1675,6 +1692,9 @@ void AUD_help (void) { struct audio_driver *d; + /* make sure we print the help text for modular drivers too */ + audio_module_load_all(); + audio_process_options ("AUDIO", audio_options); QLIST_FOREACH(d, &audio_drivers, next) { if (d->options) { -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 2/7] audio: add module loading support 2018-03-06 7:40 ` [Qemu-devel] [PATCH 2/7] audio: add module loading support Gerd Hoffmann @ 2018-03-06 10:59 ` Marc-André Lureau 0 siblings, 0 replies; 15+ messages in thread From: Marc-André Lureau @ 2018-03-06 10:59 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: QEMU On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote: > Make audio_driver_lookup() try load the module in case it doesn't find > the driver in the registry. Also load all modules for -audio-help, so > the help output includes the help text for modular audio drivers. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/qemu/module.h | 1 + > audio/audio.c | 20 ++++++++++++++++++++ > 2 files changed, 21 insertions(+) > > diff --git a/include/qemu/module.h b/include/qemu/module.h > index 9fea75aaeb..54300ab6e5 100644 > --- a/include/qemu/module.h > +++ b/include/qemu/module.h > @@ -54,6 +54,7 @@ typedef enum { > > #define block_module_load_one(lib) module_load_one("block-", lib) > #define ui_module_load_one(lib) module_load_one("ui-", lib) > +#define audio_module_load_one(lib) module_load_one("audio-", lib) > > void register_module_init(void (*fn)(void), module_init_type type); > void register_dso_module_init(void (*fn)(void), module_init_type type); > diff --git a/audio/audio.c b/audio/audio.c > index 2384612b87..6eccdb17ee 100644 > --- a/audio/audio.c > +++ b/audio/audio.c > @@ -68,9 +68,26 @@ audio_driver *audio_driver_lookup(const char *name) > return d; > } > } > + > + audio_module_load_one(name); > + QLIST_FOREACH(d, &audio_drivers, next) { > + if (strcmp(name, d->name) == 0) { > + return d; > + } > + } > + > return NULL; > } > > +static void audio_module_load_all(void) > +{ > + int i; > + > + for (i = 0; i < ARRAY_SIZE(audio_prio_list); i++) { > + audio_driver_lookup(audio_prio_list[i]); > + } > +} > + > struct fixed_settings { > int enabled; > int nb_voices; > @@ -1675,6 +1692,9 @@ void AUD_help (void) > { > struct audio_driver *d; > > + /* make sure we print the help text for modular drivers too */ > + audio_module_load_all(); > + > audio_process_options ("AUDIO", audio_options); > QLIST_FOREACH(d, &audio_drivers, next) { > if (d->options) { > -- > 2.9.3 > > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 3/7] build: enable audio modules 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 1/7] audio: add driver registry Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 2/7] audio: add module loading support Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 4/7] audio/alsa: build as module Gerd Hoffmann ` (4 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Add audio/ to common-obj-m variable. Also run both audio and ui variables through unnest-vars. This avoids sdl.mo (exists in both audio/ and ui/) name clashes. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- Makefile | 4 ++++ Makefile.objs | 1 + 2 files changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 4df1f67fe4..20abbe66ad 100644 --- a/Makefile +++ b/Makefile @@ -425,6 +425,10 @@ dummy := $(call unnest-vars,, \ io-obj-y \ common-obj-y \ common-obj-m \ + ui-obj-y \ + ui-obj-m \ + audio-obj-y \ + audio-obj-m \ trace-obj-y) include $(SRC_PATH)/tests/Makefile.include diff --git a/Makefile.objs b/Makefile.objs index 69413d33b1..ffae665ea9 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -104,6 +104,7 @@ common-obj-$(CONFIG_LINUX) += fsdev/ common-obj-y += migration/ common-obj-y += audio/ +common-obj-m += audio/ common-obj-y += hw/ common-obj-y += replay/ -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 4/7] audio/alsa: build as module 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann ` (2 preceding siblings ...) 2018-03-06 7:40 ` [Qemu-devel] [PATCH 3/7] build: enable audio modules Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 5/7] audio/oss: " Gerd Hoffmann ` (3 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- configure | 7 ++++++- audio/Makefile.objs | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 27d3f66bd5..46274301bd 100755 --- a/configure +++ b/configure @@ -5982,7 +5982,12 @@ fi echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak for drv in $audio_drv_list; do def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') - echo "$def=y" >> $config_host_mak + case "$drv" in + alsa) + echo "$def=m" >> $config_host_mak ;; + *) + echo "$def=y" >> $config_host_mak ;; + esac done echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak diff --git a/audio/Makefile.objs b/audio/Makefile.objs index f6ce5c6744..97f22ec097 100644 --- a/audio/Makefile.objs +++ b/audio/Makefile.objs @@ -3,7 +3,6 @@ common-obj-$(CONFIG_AUDIO_SDL) += sdlaudio.o common-obj-$(CONFIG_AUDIO_OSS) += ossaudio.o common-obj-$(CONFIG_SPICE) += spiceaudio.o common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o -common-obj-$(CONFIG_AUDIO_ALSA) += alsaaudio.o common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o common-obj-$(CONFIG_AUDIO_PA) += paaudio.o common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o @@ -12,8 +11,12 @@ common-obj-y += wavcapture.o sdlaudio.o-cflags := $(SDL_CFLAGS) sdlaudio.o-libs := $(SDL_LIBS) -alsaaudio.o-libs := $(ALSA_LIBS) paaudio.o-libs := $(PULSE_LIBS) coreaudio.o-libs := $(COREAUDIO_LIBS) dsoundaudio.o-libs := $(DSOUND_LIBS) ossaudio.o-libs := $(OSS_LIBS) + +# alsa module +common-obj-$(CONFIG_AUDIO_ALSA) += alsa.mo +alsa.mo-objs = alsaaudio.o +alsa.mo-libs := $(ALSA_LIBS) -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 5/7] audio/oss: build as module 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann ` (3 preceding siblings ...) 2018-03-06 7:40 ` [Qemu-devel] [PATCH 4/7] audio/alsa: build as module Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 6/7] audio/pulseaudio: " Gerd Hoffmann ` (2 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- configure | 2 +- audio/Makefile.objs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 46274301bd..5014c900bd 100755 --- a/configure +++ b/configure @@ -5983,7 +5983,7 @@ echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak for drv in $audio_drv_list; do def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') case "$drv" in - alsa) + alsa | oss) echo "$def=m" >> $config_host_mak ;; *) echo "$def=y" >> $config_host_mak ;; diff --git a/audio/Makefile.objs b/audio/Makefile.objs index 97f22ec097..9ea19c6a87 100644 --- a/audio/Makefile.objs +++ b/audio/Makefile.objs @@ -1,6 +1,5 @@ common-obj-y = audio.o noaudio.o wavaudio.o mixeng.o common-obj-$(CONFIG_AUDIO_SDL) += sdlaudio.o -common-obj-$(CONFIG_AUDIO_OSS) += ossaudio.o common-obj-$(CONFIG_SPICE) += spiceaudio.o common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o @@ -14,9 +13,13 @@ sdlaudio.o-libs := $(SDL_LIBS) paaudio.o-libs := $(PULSE_LIBS) coreaudio.o-libs := $(COREAUDIO_LIBS) dsoundaudio.o-libs := $(DSOUND_LIBS) -ossaudio.o-libs := $(OSS_LIBS) # alsa module common-obj-$(CONFIG_AUDIO_ALSA) += alsa.mo alsa.mo-objs = alsaaudio.o alsa.mo-libs := $(ALSA_LIBS) + +# oss module +common-obj-$(CONFIG_AUDIO_OSS) += oss.mo +oss.mo-objs = ossaudio.o +oss.mo-libs := $(OSS_LIBS) -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 6/7] audio/pulseaudio: build as module 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann ` (4 preceding siblings ...) 2018-03-06 7:40 ` [Qemu-devel] [PATCH 5/7] audio/oss: " Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 7/7] audio/sdl: " Gerd Hoffmann 2018-03-06 11:22 ` [Qemu-devel] [PATCH 0/7] audio: modularize Marc-André Lureau 7 siblings, 0 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- configure | 2 +- audio/Makefile.objs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 5014c900bd..3abee54cfc 100755 --- a/configure +++ b/configure @@ -5983,7 +5983,7 @@ echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak for drv in $audio_drv_list; do def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') case "$drv" in - alsa | oss) + alsa | oss | pa) echo "$def=m" >> $config_host_mak ;; *) echo "$def=y" >> $config_host_mak ;; diff --git a/audio/Makefile.objs b/audio/Makefile.objs index 9ea19c6a87..b98835934d 100644 --- a/audio/Makefile.objs +++ b/audio/Makefile.objs @@ -3,14 +3,12 @@ common-obj-$(CONFIG_AUDIO_SDL) += sdlaudio.o common-obj-$(CONFIG_SPICE) += spiceaudio.o common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o -common-obj-$(CONFIG_AUDIO_PA) += paaudio.o common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o common-obj-y += wavcapture.o sdlaudio.o-cflags := $(SDL_CFLAGS) sdlaudio.o-libs := $(SDL_LIBS) -paaudio.o-libs := $(PULSE_LIBS) coreaudio.o-libs := $(COREAUDIO_LIBS) dsoundaudio.o-libs := $(DSOUND_LIBS) @@ -23,3 +21,8 @@ alsa.mo-libs := $(ALSA_LIBS) common-obj-$(CONFIG_AUDIO_OSS) += oss.mo oss.mo-objs = ossaudio.o oss.mo-libs := $(OSS_LIBS) + +# pulseaudio module +common-obj-$(CONFIG_AUDIO_PA) += pa.mo +pa.mo-objs = paaudio.o +pa.mo-libs := $(PULSE_LIBS) -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 7/7] audio/sdl: build as module 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann ` (5 preceding siblings ...) 2018-03-06 7:40 ` [Qemu-devel] [PATCH 6/7] audio/pulseaudio: " Gerd Hoffmann @ 2018-03-06 7:40 ` Gerd Hoffmann 2018-03-06 11:22 ` [Qemu-devel] [PATCH 0/7] audio: modularize Marc-André Lureau 7 siblings, 0 replies; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 7:40 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- configure | 2 +- audio/Makefile.objs | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 3abee54cfc..b1930cd828 100755 --- a/configure +++ b/configure @@ -5983,7 +5983,7 @@ echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak for drv in $audio_drv_list; do def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') case "$drv" in - alsa | oss | pa) + alsa | oss | pa | sdl) echo "$def=m" >> $config_host_mak ;; *) echo "$def=y" >> $config_host_mak ;; diff --git a/audio/Makefile.objs b/audio/Makefile.objs index b98835934d..db4fa7f18f 100644 --- a/audio/Makefile.objs +++ b/audio/Makefile.objs @@ -1,5 +1,4 @@ common-obj-y = audio.o noaudio.o wavaudio.o mixeng.o -common-obj-$(CONFIG_AUDIO_SDL) += sdlaudio.o common-obj-$(CONFIG_SPICE) += spiceaudio.o common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o @@ -7,8 +6,6 @@ common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o common-obj-y += wavcapture.o -sdlaudio.o-cflags := $(SDL_CFLAGS) -sdlaudio.o-libs := $(SDL_LIBS) coreaudio.o-libs := $(COREAUDIO_LIBS) dsoundaudio.o-libs := $(DSOUND_LIBS) @@ -26,3 +23,9 @@ oss.mo-libs := $(OSS_LIBS) common-obj-$(CONFIG_AUDIO_PA) += pa.mo pa.mo-objs = paaudio.o pa.mo-libs := $(PULSE_LIBS) + +# sdl module +common-obj-$(CONFIG_AUDIO_SDL) += sdl.mo +sdl.mo-objs = sdlaudio.o +sdl.mo-cflags := $(SDL_CFLAGS) +sdl.mo-libs := $(SDL_LIBS) -- 2.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/7] audio: modularize 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann ` (6 preceding siblings ...) 2018-03-06 7:40 ` [Qemu-devel] [PATCH 7/7] audio/sdl: " Gerd Hoffmann @ 2018-03-06 11:22 ` Marc-André Lureau 2018-03-06 11:42 ` Gerd Hoffmann 7 siblings, 1 reply; 15+ messages in thread From: Marc-André Lureau @ 2018-03-06 11:22 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: QEMU Hi On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote: > Add audio driver (host backend) registry. Add audio module support. > Enable module builds for alsa, oss, pulse and sdl. > > Gerd Hoffmann (7): > audio: add driver registry > audio: add module loading support > build: enable audio modules > audio/alsa: build as module > audio/oss: build as module > audio/pulseaudio: build as module > audio/sdl: build as module > Is this a problem on my side? (configure '--audio-drv-list=oss,alsa,pa,sdl' '--enable-modules') elmarco@boraha:~/src/qemu/build (master %)$ x86_64-softmmu/qemu-system-x86_64 -audio-help Failed to open module: /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-oss.so: undefined symbol: _TRACE_OSS_INVALID_AVAILABLE_SIZE_DSTATE Failed to open module: /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-alsa.so: undefined symbol: _TRACE_ALSA_XRUN_OUT_DSTATE Failed to open module: /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-pa.so: undefined symbol: audio_pt_unlock_and_signal Failed to open module: /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-sdl.so: undefined symbol: audio_pcm_sw_write > configure | 7 ++++- > Makefile | 4 +++ > Makefile.objs | 1 + > audio/audio_int.h | 14 ++++----- > include/qemu/module.h | 1 + > audio/alsaaudio.c | 8 ++++- > audio/audio.c | 83 +++++++++++++++++++++++++++++++++++---------------- > audio/coreaudio.c | 8 ++++- > audio/dsoundaudio.c | 8 ++++- > audio/noaudio.c | 8 ++++- > audio/ossaudio.c | 8 ++++- > audio/paaudio.c | 8 ++++- > audio/sdlaudio.c | 8 ++++- > audio/spiceaudio.c | 8 ++++- > audio/wavaudio.c | 8 ++++- > audio/Makefile.objs | 30 +++++++++++++------ > scripts/create_config | 2 +- > 17 files changed, 159 insertions(+), 55 deletions(-) > > -- > 2.9.3 > > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/7] audio: modularize 2018-03-06 11:22 ` [Qemu-devel] [PATCH 0/7] audio: modularize Marc-André Lureau @ 2018-03-06 11:42 ` Gerd Hoffmann 2018-03-06 12:43 ` Marc-André Lureau 0 siblings, 1 reply; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 11:42 UTC (permalink / raw) To: Marc-André Lureau; +Cc: QEMU On Tue, Mar 06, 2018 at 12:22:49PM +0100, Marc-André Lureau wrote: > Hi > > On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote: > > Add audio driver (host backend) registry. Add audio module support. > > Enable module builds for alsa, oss, pulse and sdl. > > > > Gerd Hoffmann (7): > > audio: add driver registry > > audio: add module loading support > > build: enable audio modules > > audio/alsa: build as module > > audio/oss: build as module > > audio/pulseaudio: build as module > > audio/sdl: build as module > > > > Is this a problem on my side? (configure > '--audio-drv-list=oss,alsa,pa,sdl' '--enable-modules') > > elmarco@boraha:~/src/qemu/build (master %)$ > x86_64-softmmu/qemu-system-x86_64 -audio-help > Failed to open module: > /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-oss.so: undefined > symbol: _TRACE_OSS_INVALID_AVAILABLE_SIZE_DSTATE > Failed to open module: > /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-alsa.so: > undefined symbol: _TRACE_ALSA_XRUN_OUT_DSTATE > Failed to open module: > /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-pa.so: undefined > symbol: audio_pt_unlock_and_signal > Failed to open module: > /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-sdl.so: undefined > symbol: audio_pcm_sw_write Works fine here. Tried "make clean && make"? Qemu build system seems to not rebuild object files when the compiler flags change. So you can't switch between --enable-modules and --disable-modules without "make clean" inbetween. Same issue when patches switch code from compiled-in to modular and you try an incremental build. I've seen only build failues due to this, not module load errors. But possibly only because I stopped doing incremental builds when working on module patches ... cheers, Gerd ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/7] audio: modularize 2018-03-06 11:42 ` Gerd Hoffmann @ 2018-03-06 12:43 ` Marc-André Lureau 2018-03-06 13:27 ` Gerd Hoffmann 0 siblings, 1 reply; 15+ messages in thread From: Marc-André Lureau @ 2018-03-06 12:43 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: QEMU Hi On Tue, Mar 6, 2018 at 12:42 PM, Gerd Hoffmann <kraxel@redhat.com> wrote: > On Tue, Mar 06, 2018 at 12:22:49PM +0100, Marc-André Lureau wrote: >> Hi >> >> On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote: >> > Add audio driver (host backend) registry. Add audio module support. >> > Enable module builds for alsa, oss, pulse and sdl. >> > >> > Gerd Hoffmann (7): >> > audio: add driver registry >> > audio: add module loading support >> > build: enable audio modules >> > audio/alsa: build as module >> > audio/oss: build as module >> > audio/pulseaudio: build as module >> > audio/sdl: build as module >> > >> >> Is this a problem on my side? (configure >> '--audio-drv-list=oss,alsa,pa,sdl' '--enable-modules') >> >> elmarco@boraha:~/src/qemu/build (master %)$ >> x86_64-softmmu/qemu-system-x86_64 -audio-help >> Failed to open module: >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-oss.so: undefined >> symbol: _TRACE_OSS_INVALID_AVAILABLE_SIZE_DSTATE >> Failed to open module: >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-alsa.so: >> undefined symbol: _TRACE_ALSA_XRUN_OUT_DSTATE >> Failed to open module: >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-pa.so: undefined >> symbol: audio_pt_unlock_and_signal >> Failed to open module: >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-sdl.so: undefined >> symbol: audio_pcm_sw_write > > Works fine here. Tried "make clean && make"? > > Qemu build system seems to not rebuild object files when the compiler > flags change. So you can't switch between --enable-modules and > --disable-modules without "make clean" inbetween. Same issue when > patches switch code from compiled-in to modular and you try an > incremental build. Fresh directory, cleaned ccache. That didn't help. fwiw, I am compiling on f27, gcc (GCC) 7.3.1 20180130. I'll investigate further if you can't reproduce. > I've seen only build failues due to this, not module load errors. But > possibly only because I stopped doing incremental builds when working on > module patches ... > > cheers, > Gerd > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/7] audio: modularize 2018-03-06 12:43 ` Marc-André Lureau @ 2018-03-06 13:27 ` Gerd Hoffmann 2018-03-06 15:28 ` Marc-André Lureau 0 siblings, 1 reply; 15+ messages in thread From: Gerd Hoffmann @ 2018-03-06 13:27 UTC (permalink / raw) To: Marc-André Lureau; +Cc: QEMU > >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-pa.so: undefined > >> symbol: audio_pt_unlock_and_signal > Fresh directory, cleaned ccache. That didn't help. fwiw, I am > compiling on f27, gcc (GCC) 7.3.1 20180130. I'll investigate further > if you can't reproduce. Hmm, working fine here (both rhel-7 and fedora-27 testbuild container, default build flags). The symbol in question should be provided by qemu: kraxel@fedora-64bit ~/projects/qemu/build/fedora# objdump -x audio-pa.so | grep audio_pt_unlock_and_signal 0000000000000000 *UND* 0000000000000000 audio_pt_unlock_and_signal kraxel@fedora-64bit ~/projects/qemu/build/fedora# objdump -x x86_64-softmmu/qemu-system-x86_64 | grep audio_pt_unlock_and_signal 00000000004735f0 g F .text 0000000000000067 audio_pt_unlock_and_signal Possibly your linker throws it away, thinking there is no user because of the modular drivers? cheers, Gerd ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/7] audio: modularize 2018-03-06 13:27 ` Gerd Hoffmann @ 2018-03-06 15:28 ` Marc-André Lureau 0 siblings, 0 replies; 15+ messages in thread From: Marc-André Lureau @ 2018-03-06 15:28 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: QEMU Hi On Tue, Mar 6, 2018 at 2:27 PM, Gerd Hoffmann <kraxel@redhat.com> wrote: >> >> /home/elmarco/src/qemu/build/x86_64-softmmu/../audio-pa.so: undefined >> >> symbol: audio_pt_unlock_and_signal > >> Fresh directory, cleaned ccache. That didn't help. fwiw, I am >> compiling on f27, gcc (GCC) 7.3.1 20180130. I'll investigate further >> if you can't reproduce. > > Hmm, working fine here (both rhel-7 and fedora-27 testbuild container, default > build flags). > > The symbol in question should be provided by qemu: > > kraxel@fedora-64bit ~/projects/qemu/build/fedora# objdump -x audio-pa.so | grep audio_pt_unlock_and_signal > 0000000000000000 *UND* 0000000000000000 audio_pt_unlock_and_signal > kraxel@fedora-64bit ~/projects/qemu/build/fedora# objdump -x x86_64-softmmu/qemu-system-x86_64 | grep audio_pt_unlock_and_signal > 00000000004735f0 g F .text 0000000000000067 audio_pt_unlock_and_signal > > Possibly your linker throws it away, thinking there is no user because of the > modular drivers? It's not that, but it works if I build qemu with -rdynamic. dlopen(3): External references in the shared object are resolved using the shared objects in that object's dependency list and any other objects previously opened with the RTLD_GLOBAL flag. If the executable was linked with the flag "-rdynamic" (or, synonymously, "--export-dynamic"), then the global symbols in the executable will also be used to resolve references in a dynamically loaded shared object. (If I understand right, there is some magic rules.mk process-archive-undefs to make sure the used symbols from modules are always linked in) Could it be that -rdynamic / --export-dynamic is assumed in our build system since modules have been added? yes, it's pulled from /usr/lib64/pkgconfig/gmodule-2.0.pc, but glib upstream built with meson doesn't have the flag anymore. That's probably worth fixing in glib: https://bugzilla.gnome.org/show_bug.cgi?id=794123 We should switch to using gmodule-export-2.0.pc (since 2.6), which is also broken in meson build. I'll send a patch for that. -- Marc-André Lureau ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2018-03-06 15:29 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-03-06 7:40 [Qemu-devel] [PATCH 0/7] audio: modularize Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 1/7] audio: add driver registry Gerd Hoffmann 2018-03-06 10:58 ` Marc-André Lureau 2018-03-06 7:40 ` [Qemu-devel] [PATCH 2/7] audio: add module loading support Gerd Hoffmann 2018-03-06 10:59 ` Marc-André Lureau 2018-03-06 7:40 ` [Qemu-devel] [PATCH 3/7] build: enable audio modules Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 4/7] audio/alsa: build as module Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 5/7] audio/oss: " Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 6/7] audio/pulseaudio: " Gerd Hoffmann 2018-03-06 7:40 ` [Qemu-devel] [PATCH 7/7] audio/sdl: " Gerd Hoffmann 2018-03-06 11:22 ` [Qemu-devel] [PATCH 0/7] audio: modularize Marc-André Lureau 2018-03-06 11:42 ` Gerd Hoffmann 2018-03-06 12:43 ` Marc-André Lureau 2018-03-06 13:27 ` Gerd Hoffmann 2018-03-06 15:28 ` Marc-André Lureau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).