[vlc-commits] audio: support for enumerating devices of current aoout (fixes #10720)

Rémi Denis-Courmont git at videolan.org
Thu May 15 15:50:49 CEST 2014


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu May 15 21:38:50 2014 +0800| [e9571522152087765ab40d074d3d5d8f165db175] | committer: Rémi Denis-Courmont

audio: support for enumerating devices of current aoout (fixes #10720)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e9571522152087765ab40d074d3d5d8f165db175
---

 include/vlc/libvlc_media_player.h |   24 ++++++++++++++++++++++++
 lib/audio.c                       |   36 ++++++++++++++++++++++++++++++++++++
 lib/libvlc.sym                    |    1 +
 3 files changed, 61 insertions(+)

diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index ff7d8d0..291343a 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -1474,6 +1474,27 @@ LIBVLC_DEPRECATED LIBVLC_API
 char *libvlc_audio_output_device_id( libvlc_instance_t *, const char *, int );
 
 /**
+ * Gets a list of potential audio output devices,
+ * \see libvlc_audio_output_device_set().
+ *
+ * \note Not all audio outputs support enumerating devices.
+ * The audio output may be functional even if the list is empty (NULL).
+ *
+ * \note The list may not be exhaustive.
+ *
+ * \warning Some audio output devices in the list might not actually work in
+ * some circumstances. By default, it is recommended to not specify any
+ * explicit audio device.
+ *
+ * \param mp media player
+ * \return A NULL-terminated linked list of potential audio output devices.
+ * It must be freed it with libvlc_audio_output_device_list_release()
+ * \version LibVLC 2.2.0 or later.
+ */
+LIBVLC_API libvlc_audio_output_device_t *
+libvlc_audio_output_device_enum( libvlc_media_player_t *mp );
+
+/**
  * Gets a list of audio output devices for a given audio output module,
  * \see libvlc_audio_output_device_set().
  *
@@ -1514,6 +1535,9 @@ LIBVLC_API void libvlc_audio_output_device_list_release(
  * specified by the device identifier string immediately. This is the
  * recommended usage.
  *
+ * A list of adequate potential device strings can be obtained with
+ * libvlc_audio_output_device_enum().
+ *
  * However passing NULL is supported in LibVLC version 2.2.0 and later only;
  * in earlier versions, this function would have no effects when the module
  * parameter was NULL.
diff --git a/lib/audio.c b/lib/audio.c
index c0e50ce..8b93b55 100644
--- a/lib/audio.c
+++ b/lib/audio.c
@@ -140,6 +140,42 @@ int libvlc_audio_output_set( libvlc_media_player_t *mp, const char *psz_name )
 }
 
 libvlc_audio_output_device_t *
+libvlc_audio_output_device_enum( libvlc_media_player_t *mp )
+{
+    audio_output_t *aout = GetAOut( mp );
+    if( aout == NULL )
+        return NULL;
+
+    libvlc_audio_output_device_t *list = NULL, **pp = &list;
+    char **values, **texts;
+
+    int n = aout_DevicesList( aout, &values, &texts );
+    if( n < 0 )
+        goto err;
+
+    for (int i = 0; i < n; i++)
+    {
+        libvlc_audio_output_device_t *item = malloc( sizeof(*item) );
+        if( unlikely(item == NULL) )
+        {
+            free( texts[i] );
+            free( values[i] );
+            continue;
+        }
+
+        *pp = item;
+        pp = &item->p_next;
+        item->psz_device = values[i];
+        item->psz_description = texts[i];
+    }
+
+    free( texts );
+    free( values );
+err:
+    return list;
+}
+
+libvlc_audio_output_device_t *
 libvlc_audio_output_device_list_get( libvlc_instance_t *p_instance,
                                      const char *aout )
 {
diff --git a/lib/libvlc.sym b/lib/libvlc.sym
index fdfd164..c0c66dd 100644
--- a/lib/libvlc.sym
+++ b/lib/libvlc.sym
@@ -15,6 +15,7 @@ libvlc_audio_equalizer_release
 libvlc_audio_equalizer_set_amp_at_index
 libvlc_audio_equalizer_set_preamp
 libvlc_audio_output_device_count
+libvlc_audio_output_device_enum
 libvlc_audio_output_device_id
 libvlc_audio_output_device_list_get
 libvlc_audio_output_device_list_release



More information about the vlc-commits mailing list