summaryrefslogtreecommitdiffstats
path: root/libao2/audio_out.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-09-29 22:57:54 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-09-29 22:57:54 +0000
commit1acee84acd67e69427c86cd21323ce96924d7ecf (patch)
treeeea57498474dd8b427f7de9b1bdd099de780983f /libao2/audio_out.c
parent1a6f3e1d60c13d0d654d90b24bef63f19ab9b3b0 (diff)
downloadmpv-1acee84acd67e69427c86cd21323ce96924d7ecf.tar.bz2
mpv-1acee84acd67e69427c86cd21323ce96924d7ecf.tar.xz
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
Diffstat (limited to 'libao2/audio_out.c')
-rw-r--r--libao2/audio_out.c52
1 files changed, 52 insertions, 0 deletions
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;
+}