]> git.sesse.net Git - vlc/blobdiff - lib/audio.c
Real RTSP: discard unsupported legacy username and password syntax
[vlc] / lib / audio.c
index c0e50ce3917d8c9a19aae0ef0b0b045a09354ce9..0165d16214de009e7fbc154ce7e2470203cb3553 100644 (file)
@@ -139,6 +139,44 @@ int libvlc_audio_output_set( libvlc_media_player_t *mp, const char *psz_name )
     return 0;
 }
 
+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, **pp = &list;
+    char **values, **texts;
+
+    int n = aout_DevicesList( aout, &values, &texts );
+    vlc_object_release( aout );
+    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:
+    *pp = NULL;
+    return list;
+}
+
 libvlc_audio_output_device_t *
 libvlc_audio_output_device_list_get( libvlc_instance_t *p_instance,
                                      const char *aout )
@@ -232,13 +270,26 @@ void libvlc_audio_output_device_set( libvlc_media_player_t *mp,
     }
 
     audio_output_t *aout = GetAOut( mp );
-    if( aout != NULL )
+    if( aout == NULL )
         return;
 
     aout_DeviceSet( aout, devid );
     vlc_object_release( aout );
 }
 
+char *libvlc_audio_output_device_get( libvlc_media_player_t *mp )
+{
+    audio_output_t *aout = GetAOut( mp );
+    if( aout == NULL )
+        return NULL;
+
+    char *devid = aout_DeviceGet( aout );
+
+    vlc_object_release( aout );
+
+    return devid;
+}
+
 int libvlc_audio_output_get_device_type( libvlc_media_player_t *mp )
 {
     (void) mp;
@@ -298,7 +349,7 @@ int libvlc_audio_get_volume( libvlc_media_player_t *mp )
 int libvlc_audio_set_volume( libvlc_media_player_t *mp, int volume )
 {
     float vol = volume / 100.f;
-    if (vol < 0.f)
+    if (!isgreaterequal(vol, 0.f))
     {
         libvlc_printerr( "Volume out of range" );
         return -1;
@@ -542,10 +593,12 @@ void libvlc_audio_equalizer_release( libvlc_equalizer_t *p_equalizer )
  *****************************************************************************/
 int libvlc_audio_equalizer_set_preamp( libvlc_equalizer_t *p_equalizer, float f_preamp )
 {
-    if ( f_preamp < -20.0f )
-        f_preamp = -20.0f;
-    else if ( f_preamp > 20.0f )
-        f_preamp = 20.0f;
+    if( isnan(f_preamp) )
+        return -1;
+    if( f_preamp < -20.f )
+        f_preamp = -20.f;
+    else if( f_preamp > 20.f )
+        f_preamp = 20.f;
 
     p_equalizer->f_preamp = f_preamp;
     return 0;
@@ -564,13 +617,14 @@ float libvlc_audio_equalizer_get_preamp( libvlc_equalizer_t *p_equalizer )
  *****************************************************************************/
 int libvlc_audio_equalizer_set_amp_at_index( libvlc_equalizer_t *p_equalizer, float f_amp, unsigned u_band )
 {
-    if ( u_band >= EQZ_BANDS_MAX )
+    if( u_band >= EQZ_BANDS_MAX || isnan(f_amp) )
         return -1;
 
-    if ( f_amp < -20.0f )
-        f_amp = -20.0f;
-    else if ( f_amp > 20.0f )
-        f_amp = 20.0f;
+
+    if( f_amp < -20.f )
+        f_amp = -20.f;
+    else if( f_amp > 20.f )
+        f_amp = 20.f;
 
     p_equalizer->f_amp[ u_band ] = f_amp;
     return 0;
@@ -582,7 +636,7 @@ int libvlc_audio_equalizer_set_amp_at_index( libvlc_equalizer_t *p_equalizer, fl
 float libvlc_audio_equalizer_get_amp_at_index( libvlc_equalizer_t *p_equalizer, unsigned u_band )
 {
     if ( u_band >= EQZ_BANDS_MAX )
-        return 0.f;
+        return nanf("");
 
     return p_equalizer->f_amp[ u_band ];
 }