+
+ aout_instance_t * p_aout = input_GetAout( p_input );
+ vlc_object_release( p_input );
+ if( p_aout == NULL )
+ libvlc_printerr( "No active audio output" );
+ return p_aout;
+}
+
+/*****************************************
+ * Get the list of available audio outputs
+ *****************************************/
+libvlc_audio_output_t *
+ libvlc_audio_output_list_get( libvlc_instance_t *p_instance )
+{
+ VLC_UNUSED( p_instance );
+ libvlc_audio_output_t *p_list = NULL,
+ *p_actual = NULL,
+ *p_previous = NULL;
+ module_t **module_list = module_list_get( NULL );
+
+ for (size_t i = 0; module_list[i]; i++)
+ {
+ module_t *p_module = module_list[i];
+
+ if( module_provides( p_module, "audio output" ) )
+ {
+ if( p_actual == NULL)
+ {
+ p_actual = ( libvlc_audio_output_t * )
+ malloc( sizeof( libvlc_audio_output_t ) );
+ if( p_actual == NULL )
+ {
+ libvlc_printerr( "Not enough memory" );
+ libvlc_audio_output_list_release( p_list );
+ module_list_free( module_list );
+ return NULL;
+ }
+ if( p_list == NULL )
+ {
+ p_list = p_actual;
+ p_previous = p_actual;
+ }
+ }
+ p_actual->psz_name = strdup( module_get_object( p_module ) );
+ p_actual->psz_description = strdup( module_get_name( p_module, true ) );
+ p_actual->p_next = NULL;
+ if( p_previous != p_actual ) /* not first item */
+ p_previous->p_next = p_actual;
+ p_previous = p_actual;
+ p_actual = p_actual->p_next;
+ }