vlc | branch: master | Steve Lhomme <[email protected]> | Mon Nov 23 15:59:24 2020 +0100| [e0198d566107b357af23ebf95436a85fb9f2152f] | committer: Steve Lhomme
audio_output: use vlc_list to keep the list of plugged devices The aout_dev_t type doesn't need to be shared anymore. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e0198d566107b357af23ebf95436a85fb9f2152f --- src/audio_output/aout_internal.h | 3 +-- src/audio_output/output.c | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/audio_output/aout_internal.h b/src/audio_output/aout_internal.h index ad71fcc038..86b42c6087 100644 --- a/src/audio_output/aout_internal.h +++ b/src/audio_output/aout_internal.h @@ -41,7 +41,6 @@ enum { }; typedef struct aout_volume aout_volume_t; -typedef struct aout_dev aout_dev_t; typedef struct { @@ -54,7 +53,7 @@ typedef struct struct { vlc_mutex_t lock; - aout_dev_t *list; + struct vlc_list list; unsigned count; } dev; diff --git a/src/audio_output/output.c b/src/audio_output/output.c index 1d4c01421d..00cccc005f 100644 --- a/src/audio_output/output.c +++ b/src/audio_output/output.c @@ -35,12 +35,12 @@ #include "libvlc.h" #include "aout_internal.h" -struct aout_dev +typedef struct aout_dev { - aout_dev_t *next; + struct vlc_list node; char *name; char id[1]; -}; +} aout_dev_t; /* Local functions */ @@ -102,14 +102,16 @@ static void aout_HotplugNotify (audio_output_t *aout, const char *id, const char *name) { aout_owner_t *owner = aout_owner (aout); - aout_dev_t *dev, **pp = &owner->dev.list; + aout_dev_t *dev = NULL, *p; vlc_mutex_lock (&owner->dev.lock); - while ((dev = *pp) != NULL) + vlc_list_foreach(p, &owner->dev.list, node) { - if (!strcmp (id, dev->id)) + if (!strcmp (id, p->id)) + { + dev = p; break; - pp = &dev->next; + } } if (name != NULL) @@ -119,9 +121,8 @@ static void aout_HotplugNotify (audio_output_t *aout, dev = malloc (sizeof (*dev) + strlen (id)); if (unlikely(dev == NULL)) goto out; - dev->next = NULL; strcpy (dev->id, id); - *pp = dev; + vlc_list_append(&dev->node, &owner->dev.list); owner->dev.count++; } else /* Modified device */ @@ -133,7 +134,7 @@ static void aout_HotplugNotify (audio_output_t *aout, if (dev != NULL) /* Removed device */ { owner->dev.count--; - *pp = dev->next; + vlc_list_remove(&dev->node); free (dev->name); free (dev); } @@ -222,6 +223,7 @@ audio_output_t *aout_New (vlc_object_t *parent) vlc_mutex_init (&owner->dev.lock); vlc_mutex_init (&owner->vp.lock); vlc_viewpoint_init (&owner->vp.value); + vlc_list_init(&owner->dev.list); atomic_init (&owner->vp.update, false); vlc_atomic_rc_init(&owner->rc); vlc_audio_meter_Init(&owner->meter, aout); @@ -386,9 +388,10 @@ void aout_Release(audio_output_t *aout) atomic_thread_fence(memory_order_acquire); - for (aout_dev_t *dev = owner->dev.list, *next; dev != NULL; dev = next) + aout_dev_t *dev; + vlc_list_foreach(dev, &owner->dev.list, node) { - next = dev->next; + vlc_list_remove(&dev->node); free (dev->name); free (dev); } @@ -766,7 +769,8 @@ int aout_DevicesList (audio_output_t *aout, char ***ids, char ***names) *ids = tabid; *names = tabname; - for (aout_dev_t *dev = owner->dev.list; dev != NULL; dev = dev->next) + aout_dev_t *dev; + vlc_list_foreach(dev, &owner->dev.list, node) { tabid[i] = strdup(dev->id); if (unlikely(tabid[i] == NULL)) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
