@samitouri / QOSamiQemu / commits / 4879e3936c

audio: simplify audio_init()

Factorize looking up the driver in audio_driver_init() Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> 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 Jan 16, 2026 at 00:37 UTC 4879e3936c409f71e4d3023be6d320a7baefd010
1 file changed +29 -37
audio/audio.c
+29 -37
@@ -1562,11 +1562,18 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
1562 return total;
1563 }
1564
1565 -static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv,
1566 - Audiodev *dev, Error **errp)
1565 +static bool audio_driver_do_init(AudioMixengBackend *d, Error **errp)
1566 {
1568 - s->drv_opaque = drv->init(dev, errp);
1569 - if (!s->drv_opaque) {
1567 + const char *drvname = AudiodevDriver_str(d->dev->driver);
1568 + struct audio_driver *drv = audio_driver_lookup(drvname);
1569 +
1570 + if (!drv) {
1571 + error_setg(errp, "Unknown audio driver `%s'", drvname);
1572 + return false;
1573 + }
1574 +
1575 + d->drv_opaque = drv->init(d->dev, errp);
1576 + if (!d->drv_opaque) {
1577 return false;
1578 }
1579
@@ -1579,14 +1586,14 @@ static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv
1586 drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
1587 }
1588
1582 - audio_init_nb_voices_out(s, drv, 1);
1583 - audio_init_nb_voices_in(s, drv, 0);
1584 - s->drv = drv;
1589 + audio_init_nb_voices_out(d, drv, 1);
1590 + audio_init_nb_voices_in(d, drv, 0);
1591 + d->drv = drv;
1592
1586 - if (dev->timer_period <= 0) {
1587 - s->period_ticks = 1;
1593 + if (d->dev->timer_period <= 0) {
1594 + d->period_ticks = 1;
1595 } else {
1589 - s->period_ticks = dev->timer_period * (int64_t)SCALE_US;
1596 + d->period_ticks = d->dev->timer_period * (int64_t)SCALE_US;
1597 }
1598
1599 return true;
@@ -1786,24 +1793,12 @@ void audio_create_default_audiodevs(void)
1793 */
1794 static AudioBackend *audio_init(Audiodev *dev, Error **errp)
1795 {
1789 - int done = 0;
1790 - const char *drvname;
1791 - AudioMixengBackend *s;
1792 - struct audio_driver *driver;
1796 + AudioMixengBackend *d;
1797
1794 - s = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
1795 -
1796 - if (dev) {
1797 - /* -audiodev option */
1798 - s->dev = dev;
1799 - drvname = AudiodevDriver_str(dev->driver);
1800 - driver = audio_driver_lookup(drvname);
1801 - if (driver) {
1802 - done = audio_driver_do_init(s, driver, dev, errp);
1803 - } else {
1804 - error_setg(errp, "Unknown audio driver `%s'", drvname);
1805 - }
1806 - if (!done) {
1798 + d = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
1799 + d->dev = dev;
1800 + if (d->dev) {
1801 + if (!audio_driver_do_init(d, errp)) {
1802 goto out;
1803 }
1804 } else {
@@ -1814,27 +1809,24 @@ static AudioBackend *audio_init(Audiodev *dev, Error **errp)
1809 error_setg(errp, "no default audio driver available");
1810 goto out;
1811 }
1817 - s->dev = dev = e->dev;
1812 + d->dev = e->dev;
1813 QSIMPLEQ_REMOVE_HEAD(&default_audiodevs, next);
1814 g_free(e);
1820 - drvname = AudiodevDriver_str(dev->driver);
1821 - driver = audio_driver_lookup(drvname);
1822 - if (audio_driver_do_init(s, driver, dev, NULL)) {
1815 + if (audio_driver_do_init(d, NULL)) {
1816 break;
1817 }
1825 - qapi_free_Audiodev(dev);
1826 - s->dev = NULL;
1818 }
1819 }
1820
1830 - if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
1821 + if (!object_property_try_add_child(get_audiodevs_root(),
1822 + d->dev->id, OBJECT(d), errp)) {
1823 goto out;
1824 }
1833 - object_unref(s);
1834 - return AUDIO_BACKEND(s);
1825 + object_unref(d);
1826 + return AUDIO_BACKEND(d);
1827
1828 out:
1837 - object_unref(s);
1829 + object_unref(d);
1830 return NULL;
1831 }
1832