From 1acee84acd67e69427c86cd21323ce96924d7ecf Mon Sep 17 00:00:00 2001 From: arpi Date: Sun, 29 Sep 2002 22:57:54 +0000 Subject: audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7564 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libao2/audio_out.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'libao2/audio_out.c') diff --git a/libao2/audio_out.c b/libao2/audio_out.c index 8b861ede6b..2c8c16ec29 100644 --- a/libao2/audio_out.c +++ b/libao2/audio_out.c @@ -5,6 +5,9 @@ #include "audio_out.h" #include "afmt.h" +#include "../mp_msg.h" +#include "../help_mp.h" + // there are some globals: ao_data_t ao_data={0,0,0,0,OUTBURST,-1,0}; char *ao_subdevice = NULL; @@ -85,5 +88,54 @@ ao_functions_t* audio_out_drivers[] = NULL }; +void list_audio_out(){ + int i=0; + mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AvailableAudioOutputDrivers); + while (audio_out_drivers[i]) { + const ao_info_t *info = audio_out_drivers[i++]->info; + printf("\t%s\t%s\n", info->short_name, info->name); + } + printf("\n"); +} +ao_functions_t* init_best_audio_out(char** ao_list,int use_plugin,int rate,int channels,int format,int flags){ + int i; + // first try the preferred drivers, with their optional subdevice param: + if(ao_list && ao_list[0]) + while(ao_list[0][0]){ + char* ao=strdup(ao_list[0]); + ao_subdevice=strchr(ao,':'); + if(ao_subdevice){ + ao_subdevice[0]=0; + ++ao_subdevice; + } + for(i=0;audio_out_drivers[i];i++){ + ao_functions_t* audio_out=audio_out_drivers[i]; + if(!strcmp(audio_out->info->short_name,ao)){ + // name matches, try it + if(use_plugin){ + audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,(int)audio_out); + audio_out=&audio_out_plugin; + } + if(audio_out->init(rate,channels,format,flags)) + return audio_out; // success! + } + } + // continue... + ++ao_list; + if(!(ao_list[0])) return NULL; // do NOT fallback to others + } + // now try the rest... + ao_subdevice=NULL; + for(i=0;audio_out_drivers[i];i++){ + ao_functions_t* audio_out=audio_out_drivers[i]; + if(use_plugin){ + audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,(int)audio_out); + audio_out=&audio_out_plugin; + } + if(audio_out->init(rate,channels,format,flags)) + return audio_out; // success! + } + return NULL; +} -- cgit v1.2.3