Mercurial > mplayer.hg
annotate libao2/audio_out.c @ 14802:63b1cc62fc9b
MEncoder multiple files patch by Oded Shimon (ods15)
Seems to work, or at least not to cause problems with existing
functionality (encoding single files).
Please test and report bugs, if there are any!
author | rfelker |
---|---|
date | Fri, 25 Feb 2005 02:32:29 +0000 |
parents | 21e72b6d8d11 |
children | f48dc20c9185 |
rev | line source |
---|---|
954 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
7848 | 3 #include <string.h> |
954 | 4 |
14123 | 5 #include "config.h" |
954 | 6 #include "audio_out.h" |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
7 |
14123 | 8 #include "mp_msg.h" |
9 #include "help_mp.h" | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
10 |
954 | 11 // there are some globals: |
3095 | 12 ao_data_t ao_data={0,0,0,0,OUTBURST,-1,0}; |
1185 | 13 char *ao_subdevice = NULL; |
954 | 14 |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
15 #ifdef USE_OSS_AUDIO |
954 | 16 extern ao_functions_t audio_out_oss; |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
17 #endif |
12792 | 18 #ifdef MACOSX |
19 extern ao_functions_t audio_out_macosx; | |
20 #endif | |
6214
0398cb49fe5e
aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents:
6069
diff
changeset
|
21 #ifdef USE_ARTS |
0398cb49fe5e
aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents:
6069
diff
changeset
|
22 extern ao_functions_t audio_out_arts; |
0398cb49fe5e
aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents:
6069
diff
changeset
|
23 #endif |
8572 | 24 #ifdef USE_ESD |
25 extern ao_functions_t audio_out_esd; | |
26 #endif | |
13878
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
27 #ifdef USE_POLYP |
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
28 extern ao_functions_t audio_out_polyp; |
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
29 #endif |
12662
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
30 #ifdef USE_JACK |
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
31 extern ao_functions_t audio_out_jack; |
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
32 #endif |
954 | 33 extern ao_functions_t audio_out_null; |
1007 | 34 #ifdef HAVE_ALSA5 |
35 extern ao_functions_t audio_out_alsa5; | |
36 #endif | |
1032 | 37 #ifdef HAVE_ALSA9 |
12462 | 38 extern ao_functions_t audio_out_alsa; |
1032 | 39 #endif |
11775 | 40 #ifdef HAVE_ALSA1X |
12462 | 41 extern ao_functions_t audio_out_alsa; |
11775 | 42 #endif |
3276 | 43 #ifdef HAVE_NAS |
44 extern ao_functions_t audio_out_nas; | |
45 #endif | |
966
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
46 #ifdef HAVE_SDL |
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
47 extern ao_functions_t audio_out_sdl; |
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
48 #endif |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
49 #ifdef USE_SUN_AUDIO |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
50 extern ao_functions_t audio_out_sun; |
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
51 #endif |
2450 | 52 #ifdef USE_SGI_AUDIO |
53 extern ao_functions_t audio_out_sgi; | |
54 #endif | |
7916 | 55 #ifdef HAVE_WIN32WAVEOUT |
56 extern ao_functions_t audio_out_win32; | |
57 #endif | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
58 #ifdef HAVE_DIRECTX |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
59 extern ao_functions_t audio_out_dsound; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
60 #endif |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
5192
diff
changeset
|
61 #ifdef HAVE_DXR2 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
5192
diff
changeset
|
62 extern ao_functions_t audio_out_dxr2; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
5192
diff
changeset
|
63 #endif |
4788
d678ce495a75
Moved HW dependent mixer stuff to libao and removed master switch
anders
parents:
4097
diff
changeset
|
64 extern ao_functions_t audio_out_mpegpes; |
1107 | 65 extern ao_functions_t audio_out_pcm; |
1185 | 66 extern ao_functions_t audio_out_pss; |
954 | 67 |
68 ao_functions_t* audio_out_drivers[] = | |
69 { | |
7609 | 70 // vo-related: will fail unless you also do -vo mpegpes/dxr2 |
71 &audio_out_mpegpes, | |
72 #ifdef HAVE_DXR2 | |
73 &audio_out_dxr2, | |
74 #endif | |
75 // native: | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
76 #ifdef HAVE_DIRECTX |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
77 &audio_out_dsound, |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
12792
diff
changeset
|
78 #endif |
8729
561aa9c850f7
Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents:
8572
diff
changeset
|
79 #ifdef HAVE_WIN32WAVEOUT |
561aa9c850f7
Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents:
8572
diff
changeset
|
80 &audio_out_win32, |
561aa9c850f7
Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents:
8572
diff
changeset
|
81 #endif |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
82 #ifdef USE_OSS_AUDIO |
954 | 83 &audio_out_oss, |
1038
b36fb1ae4b53
applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents:
1032
diff
changeset
|
84 #endif |
11775 | 85 #ifdef HAVE_ALSA1X |
12462 | 86 &audio_out_alsa, |
11775 | 87 #endif |
7609 | 88 #ifdef HAVE_ALSA9 |
12462 | 89 &audio_out_alsa, |
6214
0398cb49fe5e
aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents:
6069
diff
changeset
|
90 #endif |
7609 | 91 #ifdef HAVE_ALSA5 |
92 &audio_out_alsa5, | |
1725
24e75b632740
Move the sun audio driver near the start of the list of audio drivers, so
jkeil
parents:
1528
diff
changeset
|
93 #endif |
2450 | 94 #ifdef USE_SGI_AUDIO |
95 &audio_out_sgi, | |
96 #endif | |
7609 | 97 #ifdef USE_SUN_AUDIO |
98 &audio_out_sun, | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
5192
diff
changeset
|
99 #endif |
7609 | 100 // wrappers: |
101 #ifdef USE_ARTS | |
102 &audio_out_arts, | |
1032 | 103 #endif |
8572 | 104 #ifdef USE_ESD |
105 &audio_out_esd, | |
106 #endif | |
13878
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
107 #ifdef USE_POLYP |
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
108 &audio_out_polyp, |
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
109 #endif |
12662
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
110 #ifdef USE_JACK |
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
111 &audio_out_jack, |
05d46af5e2bf
JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents:
12636
diff
changeset
|
112 #endif |
3276 | 113 #ifdef HAVE_NAS |
114 &audio_out_nas, | |
115 #endif | |
966
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
116 #ifdef HAVE_SDL |
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
117 &audio_out_sdl, |
69b4f944ce08
Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
954
diff
changeset
|
118 #endif |
12636
58dca847caa0
move macosx in the priority list after sdl, patch by Dan Christiansen
alex
parents:
12462
diff
changeset
|
119 #ifdef MACOSX |
58dca847caa0
move macosx in the priority list after sdl, patch by Dan Christiansen
alex
parents:
12462
diff
changeset
|
120 &audio_out_macosx, |
58dca847caa0
move macosx in the priority list after sdl, patch by Dan Christiansen
alex
parents:
12462
diff
changeset
|
121 #endif |
7609 | 122 &audio_out_null, |
123 // should not be auto-selected: | |
1107 | 124 &audio_out_pcm, |
954 | 125 NULL |
126 }; | |
3095 | 127 |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
128 void list_audio_out(){ |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
129 int i=0; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
130 mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AvailableAudioOutputDrivers); |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
131 while (audio_out_drivers[i]) { |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
132 const ao_info_t *info = audio_out_drivers[i++]->info; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
133 printf("\t%s\t%s\n", info->short_name, info->name); |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
134 } |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
135 printf("\n"); |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
136 } |
3095 | 137 |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
138 ao_functions_t* init_best_audio_out(char** ao_list,int use_plugin,int rate,int channels,int format,int flags){ |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
139 int i; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
140 // first try the preferred drivers, with their optional subdevice param: |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
141 if(ao_list && ao_list[0]) |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
142 while(ao_list[0][0]){ |
13632 | 143 char* ao=ao_list[0]; |
144 int ao_len; | |
13542
ed7e91827ead
removing ao_alsa9.c and ao_alsa1x.c as they are superseded by ao_alsa.c
reimar
parents:
13520
diff
changeset
|
145 if (strncmp(ao, "alsa9", 5) == 0 || strncmp(ao, "alsa1x", 6) == 0) { |
ed7e91827ead
removing ao_alsa9.c and ao_alsa1x.c as they are superseded by ao_alsa.c
reimar
parents:
13520
diff
changeset
|
146 mp_msg(MSGT_AO, MSGL_FATAL, MSGTR_AO_ALSA9_1x_Removed); |
ed7e91827ead
removing ao_alsa9.c and ao_alsa1x.c as they are superseded by ao_alsa.c
reimar
parents:
13520
diff
changeset
|
147 exit_player(NULL); |
ed7e91827ead
removing ao_alsa9.c and ao_alsa1x.c as they are superseded by ao_alsa.c
reimar
parents:
13520
diff
changeset
|
148 } |
13632 | 149 if (ao_subdevice) { |
150 free(ao_subdevice); | |
151 ao_subdevice = NULL; | |
152 } | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
153 ao_subdevice=strchr(ao,':'); |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
154 if(ao_subdevice){ |
13632 | 155 ao_len = ao_subdevice - ao; |
156 ao_subdevice = strdup(&ao[ao_len + 1]); | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
157 } |
13632 | 158 else |
159 ao_len = strlen(ao); | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
160 for(i=0;audio_out_drivers[i];i++){ |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
161 ao_functions_t* audio_out=audio_out_drivers[i]; |
13632 | 162 if(!strncmp(audio_out->info->short_name,ao,ao_len)){ |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
163 // name matches, try it |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
164 if(audio_out->init(rate,channels,format,flags)) |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
165 return audio_out; // success! |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
166 } |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
167 } |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
168 // continue... |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
169 ++ao_list; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
170 if(!(ao_list[0])) return NULL; // do NOT fallback to others |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
171 } |
13632 | 172 if (ao_subdevice) { |
173 free(ao_subdevice); | |
174 ao_subdevice = NULL; | |
175 } | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
176 // now try the rest... |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
177 for(i=0;audio_out_drivers[i];i++){ |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
178 ao_functions_t* audio_out=audio_out_drivers[i]; |
14245 | 179 // if(audio_out->control(AOCONTROL_QUERY_FORMAT, (int)format) == CONTROL_TRUE) |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
180 if(audio_out->init(rate,channels,format,flags)) |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
181 return audio_out; // success! |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
182 } |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
183 return NULL; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
184 } |
3095 | 185 |