audio: replace type_init() with DEFINE_TYPES
Use the convenience macro to register types. Note that jack backend was using the type registration to initialize some globals. Use a ctor function instead. Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Marc-André Lureau committed
Feb 4, 2026 at 18:19 UTC
b06d3bafbe4ccb39df78c185eabe424a8495ca82
13 files changed
+106
-132
audio/alsaaudio.c
+8
-11
@@ -962,17 +962,14 @@ static struct audio_driver alsa_audio_driver = {
962
.voice_size_in = sizeof (ALSAVoiceIn)
963
};
964
965
-static const TypeInfo audio_alsa_info = {
966
- .name = TYPE_AUDIO_ALSA,
967
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
968
- .instance_size = sizeof(AudioALSA),
969
- .class_init = audio_alsa_class_init,
965
+static const TypeInfo audio_types[] = {
966
+ {
967
+ .name = TYPE_AUDIO_ALSA,
968
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
969
+ .instance_size = sizeof(AudioALSA),
970
+ .class_init = audio_alsa_class_init,
971
+ },
972
};
973
972
-
973
-static void register_audio_alsa(void)
974
-{
975
- type_register_static(&audio_alsa_info);
976
-}
977
-type_init(register_audio_alsa);
974
+DEFINE_TYPES(audio_types)
975
module_obj(TYPE_AUDIO_ALSA);
audio/coreaudio.m
+8
-10
@@ -690,16 +690,14 @@ static struct audio_driver coreaudio_audio_driver = {
690
.voice_size_in = 0
691
};
692
693
-static const TypeInfo audio_coreaudio_info = {
694
- .name = TYPE_AUDIO_COREAUDIO,
695
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
696
- .instance_size = sizeof(AudioCoreaudio),
697
- .class_init = audio_coreaudio_class_init,
693
+static const TypeInfo audio_types[] = {
694
+ {
695
+ .name = TYPE_AUDIO_COREAUDIO,
696
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
697
+ .instance_size = sizeof(AudioCoreaudio),
698
+ .class_init = audio_coreaudio_class_init,
699
+ },
700
};
701
700
-static void register_audio_coreaudio(void)
701
-{
702
- type_register_static(&audio_coreaudio_info);
703
-}
704
-type_init(register_audio_coreaudio);
702
+DEFINE_TYPES(audio_types)
703
module_obj(TYPE_AUDIO_COREAUDIO);
audio/dbusaudio.c
+8
-10
@@ -729,18 +729,16 @@ static void audio_dbus_class_init(ObjectClass *klass, const void *data)
729
k->driver = &dbus_audio_driver;
730
}
731
732
-static const TypeInfo audio_dbus_info = {
733
- .name = TYPE_AUDIO_DBUS,
734
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
735
- .instance_size = sizeof(AudioDbus),
736
- .class_init = audio_dbus_class_init,
732
+static const TypeInfo audio_types[] = {
733
+ {
734
+ .name = TYPE_AUDIO_DBUS,
735
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
736
+ .instance_size = sizeof(AudioDbus),
737
+ .class_init = audio_dbus_class_init,
738
+ },
739
};
740
739
-static void register_audio_dbus(void)
740
-{
741
- type_register_static(&audio_dbus_info);
742
-}
743
-type_init(register_audio_dbus);
741
+DEFINE_TYPES(audio_types)
742
743
module_dep("ui-dbus")
744
module_obj(TYPE_AUDIO_DBUS)
audio/dsoundaudio.c
+8
-10
@@ -711,16 +711,14 @@ static struct audio_driver dsound_audio_driver = {
711
.voice_size_in = sizeof (DSoundVoiceIn)
712
};
713
714
-static const TypeInfo audio_dsound_info = {
715
- .name = TYPE_AUDIO_DSOUND,
716
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
717
- .instance_size = sizeof(AudioDsound),
718
- .class_init = audio_dsound_class_init,
714
+static const TypeInfo audio_types[] = {
715
+ {
716
+ .name = TYPE_AUDIO_DSOUND,
717
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
718
+ .instance_size = sizeof(AudioDsound),
719
+ .class_init = audio_dsound_class_init,
720
+ },
721
};
722
721
-static void register_audio_dsound(void)
722
-{
723
- type_register_static(&audio_dsound_info);
724
-}
725
-type_init(register_audio_dsound);
723
+DEFINE_TYPES(audio_types)
724
module_obj(TYPE_AUDIO_DSOUND);
audio/jackaudio.c
+10
-8
@@ -708,22 +708,24 @@ static void qjack_info(const char *msg)
708
dolog("I: %s\n", msg);
709
}
710
711
-static const TypeInfo audio_jack_info = {
712
- .name = TYPE_AUDIO_JACK,
713
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
714
- .instance_size = sizeof(AudioJack),
715
- .class_init = audio_jack_class_init,
711
+static const TypeInfo audio_types[] = {
712
+ {
713
+ .name = TYPE_AUDIO_JACK,
714
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
715
+ .instance_size = sizeof(AudioJack),
716
+ .class_init = audio_jack_class_init,
717
+ },
718
};
719
718
-static void register_audio_jack(void)
720
+static void __attribute__((__constructor__)) audio_jack_init(void)
721
{
722
qemu_mutex_init(&qjack_shutdown_lock);
721
- type_register_static(&audio_jack_info);
723
#if !defined(WIN32) && defined(CONFIG_PTHREAD_SETNAME_NP_W_TID)
724
jack_set_thread_creator(qjack_thread_creator);
725
#endif
726
jack_set_error_function(qjack_error);
727
jack_set_info_function(qjack_info);
728
}
728
-type_init(register_audio_jack);
729
+
730
+DEFINE_TYPES(audio_types)
731
module_obj(TYPE_AUDIO_JACK);
audio/noaudio.c
+8
-10
@@ -155,16 +155,14 @@ static struct audio_driver no_audio_driver = {
155
.voice_size_in = sizeof (NoVoiceIn)
156
};
157
158
-static const TypeInfo audio_none_info = {
159
- .name = TYPE_AUDIO_NONE,
160
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
161
- .instance_size = sizeof(AudioNone),
162
- .class_init = audio_none_class_init,
158
+static const TypeInfo audio_types[] = {
159
+ {
160
+ .name = TYPE_AUDIO_NONE,
161
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
162
+ .instance_size = sizeof(AudioNone),
163
+ .class_init = audio_none_class_init,
164
+ },
165
};
166
165
-static void register_audio_none(void)
166
-{
167
- type_register_static(&audio_none_info);
168
-}
169
-type_init(register_audio_none);
167
+DEFINE_TYPES(audio_types)
168
module_obj(TYPE_AUDIO_NONE);
audio/ossaudio.c
+8
-10
@@ -789,16 +789,14 @@ static struct audio_driver oss_audio_driver = {
789
.voice_size_in = sizeof (OSSVoiceIn)
790
};
791
792
-static const TypeInfo audio_oss_info = {
793
- .name = TYPE_AUDIO_OSS,
794
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
795
- .instance_size = sizeof(AudioOss),
796
- .class_init = audio_oss_class_init,
792
+static const TypeInfo audio_types[] = {
793
+ {
794
+ .name = TYPE_AUDIO_OSS,
795
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
796
+ .instance_size = sizeof(AudioOss),
797
+ .class_init = audio_oss_class_init,
798
+ },
799
};
800
799
-static void register_audio_oss(void)
800
-{
801
- type_register_static(&audio_oss_info);
802
-}
803
-type_init(register_audio_oss);
801
+DEFINE_TYPES(audio_types)
802
module_obj(TYPE_AUDIO_OSS);
audio/paaudio.c
+8
-10
@@ -948,16 +948,14 @@ static struct audio_driver pa_audio_driver = {
948
.voice_size_in = sizeof (PAVoiceIn),
949
};
950
951
-static const TypeInfo audio_pa_info = {
952
- .name = TYPE_AUDIO_PA,
953
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
954
- .instance_size = sizeof(AudioPa),
955
- .class_init = audio_pa_class_init,
951
+static const TypeInfo audio_types[] = {
952
+ {
953
+ .name = TYPE_AUDIO_PA,
954
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
955
+ .instance_size = sizeof(AudioPa),
956
+ .class_init = audio_pa_class_init,
957
+ },
958
};
959
958
-static void register_audio_pa(void)
959
-{
960
- type_register_static(&audio_pa_info);
961
-}
962
-type_init(register_audio_pa);
960
+DEFINE_TYPES(audio_types)
961
module_obj(TYPE_AUDIO_PA);
audio/pwaudio.c
+8
-12
@@ -864,18 +864,14 @@ static struct audio_driver pw_audio_driver = {
864
.voice_size_in = sizeof(PWVoiceIn),
865
};
866
867
-static const TypeInfo audio_pw_info = {
868
- .name = TYPE_AUDIO_PW,
869
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
870
- .instance_size = sizeof(AudioPw),
871
- .class_init = audio_pw_class_init,
867
+static const TypeInfo audio_types[] = {
868
+ {
869
+ .name = TYPE_AUDIO_PW,
870
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
871
+ .instance_size = sizeof(AudioPw),
872
+ .class_init = audio_pw_class_init,
873
+ },
874
};
875
874
-static void
875
-register_audio_pw(void)
876
-{
877
- type_register_static(&audio_pw_info);
878
-}
879
-
880
-type_init(register_audio_pw);
876
+DEFINE_TYPES(audio_types)
877
module_obj(TYPE_AUDIO_PW);
audio/sdlaudio.c
+8
-10
@@ -508,16 +508,14 @@ static struct audio_driver sdl_audio_driver = {
508
.voice_size_in = sizeof(SDLVoiceIn),
509
};
510
511
-static const TypeInfo audio_sdl_info = {
512
- .name = TYPE_AUDIO_SDL,
513
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
514
- .instance_size = sizeof(AudioSdl),
515
- .class_init = audio_sdl_class_init,
511
+static const TypeInfo audio_types[] = {
512
+ {
513
+ .name = TYPE_AUDIO_SDL,
514
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
515
+ .instance_size = sizeof(AudioSdl),
516
+ .class_init = audio_sdl_class_init,
517
+ },
518
};
519
518
-static void register_audio_sdl(void)
519
-{
520
- type_register_static(&audio_sdl_info);
521
-}
522
-type_init(register_audio_sdl);
520
+DEFINE_TYPES(audio_types)
521
module_obj(TYPE_AUDIO_SDL);
audio/sndioaudio.c
+8
-11
@@ -572,17 +572,14 @@ static struct audio_driver sndio_audio_driver = {
572
.voice_size_in = sizeof(SndioVoice)
573
};
574
575
-static const TypeInfo audio_sndio_info = {
576
- .name = TYPE_AUDIO_SNDIO,
577
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
578
- .instance_size = sizeof(AudioSndio),
579
- .class_init = audio_sndio_class_init,
575
+static const TypeInfo audio_types[] = {
576
+ {
577
+ .name = TYPE_AUDIO_SNDIO,
578
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
579
+ .instance_size = sizeof(AudioSndio),
580
+ .class_init = audio_sndio_class_init,
581
+ },
582
};
583
582
-static void register_audio_sndio(void)
583
-{
584
- type_register_static(&audio_sndio_info);
585
-}
586
-
587
-type_init(register_audio_sndio);
584
+DEFINE_TYPES(audio_types)
585
module_obj(TYPE_AUDIO_SNDIO);
audio/spiceaudio.c
+8
-10
@@ -342,18 +342,16 @@ static struct audio_driver spice_audio_driver = {
342
.voice_size_in = sizeof (SpiceVoiceIn),
343
};
344
345
-static const TypeInfo audio_spice_info = {
346
- .name = TYPE_AUDIO_SPICE,
347
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
348
- .instance_size = sizeof(AudioSpice),
349
- .class_init = audio_spice_class_init,
345
+static const TypeInfo audio_types[] = {
346
+ {
347
+ .name = TYPE_AUDIO_SPICE,
348
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
349
+ .instance_size = sizeof(AudioSpice),
350
+ .class_init = audio_spice_class_init,
351
+ },
352
};
353
352
-static void register_audio_spice(void)
353
-{
354
- type_register_static(&audio_spice_info);
355
-}
356
-type_init(register_audio_spice);
354
+DEFINE_TYPES(audio_types)
355
module_obj(TYPE_AUDIO_SPICE);
356
357
module_dep("ui-spice-core");
audio/wavaudio.c
+8
-10
@@ -231,16 +231,14 @@ static struct audio_driver wav_audio_driver = {
231
.voice_size_in = 0
232
};
233
234
-static const TypeInfo audio_wav_info = {
235
- .name = TYPE_AUDIO_WAV,
236
- .parent = TYPE_AUDIO_MIXENG_BACKEND,
237
- .instance_size = sizeof(AudioWav),
238
- .class_init = audio_wav_class_init,
234
+static const TypeInfo audio_types[] = {
235
+ {
236
+ .name = TYPE_AUDIO_WAV,
237
+ .parent = TYPE_AUDIO_MIXENG_BACKEND,
238
+ .instance_size = sizeof(AudioWav),
239
+ .class_init = audio_wav_class_init,
240
+ }
241
};
242
241
-static void register_audio_wav(void)
242
-{
243
- type_register_static(&audio_wav_info);
244
-}
245
-type_init(register_audio_wav);
243
+DEFINE_TYPES(audio_types)
244
module_obj(TYPE_AUDIO_WAV);