@samitouri / QOSamiQemu / commits / b06d3bafbe

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);