[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