annotate libao2/audio_out.c @ 26883:a365271c97a5

Revert commit r26897. XviD is the correct spelling of the codec. You can see it written in the codec own documentation and header files. Prefered name capitalization confirmed in conversation with XviD developer (prunedtree).
author iive
date Wed, 28 May 2008 23:04:41 +0000
parents 4980ed598e8a
children 66e998895707
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
1 #include <stdio.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
2 #include <stdlib.h>
7848
3c1d30a1afc0 compiler warning fixes by Dominik
arpi
parents: 7609
diff changeset
3 #include <string.h>
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
4
14123
a92101a7eb49 Make include paths consistent.
diego
parents: 13878
diff changeset
5 #include "config.h"
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
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
a92101a7eb49 Make include paths consistent.
diego
parents: 13878
diff changeset
8 #include "mp_msg.h"
a92101a7eb49 Make include paths consistent.
diego
parents: 13878
diff changeset
9 #include "help_mp.h"
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14254
diff changeset
10 #include "mplayer.h" /* for exit_player() */
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
11
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
12 // there are some globals:
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2900
diff changeset
13 ao_data_t ao_data={0,0,0,0,OUTBURST,-1,0};
1185
e21c96e28062 ao_subdevice implemented
al3x
parents: 1121
diff changeset
14 char *ao_subdevice = NULL;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
15
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
16 extern ao_functions_t audio_out_oss;
12792
0d9fe5027971 ao_macosx is fixed, moving it back to top
nplourde
parents: 12662
diff changeset
17 extern ao_functions_t audio_out_macosx;
6214
0398cb49fe5e aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents: 6069
diff changeset
18 extern ao_functions_t audio_out_arts;
8572
46dbfa8c1999 new EsounD audio driver (-ao esd)
jkeil
parents: 7916
diff changeset
19 extern ao_functions_t audio_out_esd;
24781
84adab7a8f97 Replace Polyp- by PulseAudio output.
reimar
parents: 23905
diff changeset
20 extern ao_functions_t audio_out_pulse;
12662
05d46af5e2bf JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents: 12636
diff changeset
21 extern ao_functions_t audio_out_jack;
17633
e0ef5688cce7 OpenAL audio support, actual output is mono-only (no positioning yet).
reimar
parents: 17566
diff changeset
22 extern ao_functions_t audio_out_openal;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
23 extern ao_functions_t audio_out_null;
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
24 extern ao_functions_t audio_out_alsa5;
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
25 extern ao_functions_t audio_out_alsa;
3276
e279cc05f189 -ao NAS support by Tobias Diedrich <ranma@gmx.at>
arpi
parents: 3095
diff changeset
26 extern ao_functions_t audio_out_nas;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents: 954
diff changeset
27 extern ao_functions_t audio_out_sdl;
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1032
diff changeset
28 extern ao_functions_t audio_out_sun;
2450
f51307170f69 MIPS support by oliver.schoenbrunner@jku.at
arpi
parents: 1725
diff changeset
29 extern ao_functions_t audio_out_sgi;
7916
01198a05d97c add ao_win32
faust3
parents: 7848
diff changeset
30 extern ao_functions_t audio_out_win32;
13460
70d8f1975fc8 directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents: 12792
diff changeset
31 extern ao_functions_t audio_out_dsound;
6069
8e88e92fe331 Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents: 5192
diff changeset
32 extern ao_functions_t audio_out_dxr2;
19224
3fc39ced158e added audio output for ivtv cards
ben
parents: 18237
diff changeset
33 extern ao_functions_t audio_out_ivtv;
23905
fb63124c7920 v4l2 audio/video outputs for linux 2.6.22+ kernels (outputs formerly known as ivtv)
ben
parents: 19409
diff changeset
34 extern ao_functions_t audio_out_v4l2;
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4097
diff changeset
35 extern ao_functions_t audio_out_mpegpes;
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents: 1058
diff changeset
36 extern ao_functions_t audio_out_pcm;
1185
e21c96e28062 ao_subdevice implemented
al3x
parents: 1121
diff changeset
37 extern ao_functions_t audio_out_pss;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
38
25913
21a1dc062bc5 ao_functions_t should be const, part 1
reimar
parents: 24781
diff changeset
39 const ao_functions_t* const audio_out_drivers[] =
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
40 {
7609
arpi
parents: 7563
diff changeset
41 // 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
42 #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
43 &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
44 #endif
8729
561aa9c850f7 Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents: 8572
diff changeset
45 #ifdef HAVE_WIN32WAVEOUT
561aa9c850f7 Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents: 8572
diff changeset
46 &audio_out_win32,
561aa9c850f7 Rearrange the vo and ao driver order to prefer the native drivers and give
diego
parents: 8572
diff changeset
47 #endif
26208
4980ed598e8a Introduce a separate definition for Mac OS X coreaudio support.
diego
parents: 26102
diff changeset
48 #ifdef HAVE_COREAUDIO
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
49 &audio_out_macosx,
16732
644baf91233c ao_macosx is a native audio output driver and should thus have priority
diego
parents: 15789
diff changeset
50 #endif
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1032
diff changeset
51 #ifdef USE_OSS_AUDIO
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
52 &audio_out_oss,
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1032
diff changeset
53 #endif
26102
5eb017bb1568 Merge two #ifdefs.
diego
parents: 26101
diff changeset
54 #if defined (HAVE_ALSA1X) || defined (HAVE_ALSA9)
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
55 &audio_out_alsa,
6214
0398cb49fe5e aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents: 6069
diff changeset
56 #endif
7609
arpi
parents: 7563
diff changeset
57 #ifdef HAVE_ALSA5
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
58 &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
59 #endif
2450
f51307170f69 MIPS support by oliver.schoenbrunner@jku.at
arpi
parents: 1725
diff changeset
60 #ifdef USE_SGI_AUDIO
f51307170f69 MIPS support by oliver.schoenbrunner@jku.at
arpi
parents: 1725
diff changeset
61 &audio_out_sgi,
f51307170f69 MIPS support by oliver.schoenbrunner@jku.at
arpi
parents: 1725
diff changeset
62 #endif
7609
arpi
parents: 7563
diff changeset
63 #ifdef USE_SUN_AUDIO
arpi
parents: 7563
diff changeset
64 &audio_out_sun,
6069
8e88e92fe331 Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents: 5192
diff changeset
65 #endif
7609
arpi
parents: 7563
diff changeset
66 // wrappers:
arpi
parents: 7563
diff changeset
67 #ifdef USE_ARTS
arpi
parents: 7563
diff changeset
68 &audio_out_arts,
1032
e34336f4feaf add esd support and disabled default.
pontscho
parents: 1007
diff changeset
69 #endif
8572
46dbfa8c1999 new EsounD audio driver (-ao esd)
jkeil
parents: 7916
diff changeset
70 #ifdef USE_ESD
46dbfa8c1999 new EsounD audio driver (-ao esd)
jkeil
parents: 7916
diff changeset
71 &audio_out_esd,
46dbfa8c1999 new EsounD audio driver (-ao esd)
jkeil
parents: 7916
diff changeset
72 #endif
24781
84adab7a8f97 Replace Polyp- by PulseAudio output.
reimar
parents: 23905
diff changeset
73 #ifdef USE_PULSE
84adab7a8f97 Replace Polyp- by PulseAudio output.
reimar
parents: 23905
diff changeset
74 &audio_out_pulse,
13878
66637fa67531 polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents: 13632
diff changeset
75 #endif
12662
05d46af5e2bf JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents: 12636
diff changeset
76 #ifdef USE_JACK
05d46af5e2bf JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents: 12636
diff changeset
77 &audio_out_jack,
05d46af5e2bf JACK audio support through bio2jack by Kamil Strzelecki <esack@o2.pl>
alex
parents: 12636
diff changeset
78 #endif
3276
e279cc05f189 -ao NAS support by Tobias Diedrich <ranma@gmx.at>
arpi
parents: 3095
diff changeset
79 #ifdef HAVE_NAS
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
80 &audio_out_nas,
3276
e279cc05f189 -ao NAS support by Tobias Diedrich <ranma@gmx.at>
arpi
parents: 3095
diff changeset
81 #endif
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents: 954
diff changeset
82 #ifdef HAVE_SDL
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents: 954
diff changeset
83 &audio_out_sdl,
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents: 954
diff changeset
84 #endif
17634
8dc8353c4ee8 fix compilation without openal
aurel
parents: 17633
diff changeset
85 #ifdef USE_OPENAL
17633
e0ef5688cce7 OpenAL audio support, actual output is mono-only (no positioning yet).
reimar
parents: 17566
diff changeset
86 &audio_out_openal,
17634
8dc8353c4ee8 fix compilation without openal
aurel
parents: 17633
diff changeset
87 #endif
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
88 &audio_out_mpegpes,
19409
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
89 #ifdef HAVE_DXR2
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
90 &audio_out_dxr2,
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
91 #endif
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
92 #ifdef HAVE_IVTV
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
93 &audio_out_ivtv,
37decab2ed46 Move mpeg aos to the end of the autodetection list. At least mpegpes
uau
parents: 19224
diff changeset
94 #endif
23905
fb63124c7920 v4l2 audio/video outputs for linux 2.6.22+ kernels (outputs formerly known as ivtv)
ben
parents: 19409
diff changeset
95 #ifdef HAVE_V4L2_DECODER
fb63124c7920 v4l2 audio/video outputs for linux 2.6.22+ kernels (outputs formerly known as ivtv)
ben
parents: 19409
diff changeset
96 &audio_out_v4l2,
fb63124c7920 v4l2 audio/video outputs for linux 2.6.22+ kernels (outputs formerly known as ivtv)
ben
parents: 19409
diff changeset
97 #endif
7609
arpi
parents: 7563
diff changeset
98 &audio_out_null,
arpi
parents: 7563
diff changeset
99 // should not be auto-selected:
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
100 &audio_out_pcm,
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
101 NULL
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
102 };
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2900
diff changeset
103
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16732
diff changeset
104 void list_audio_out(void){
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
105 int i=0;
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
106 mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AvailableAudioOutputDrivers);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
107 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_OUTPUTS\n");
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
108 while (audio_out_drivers[i]) {
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
109 const ao_info_t *info = audio_out_drivers[i++]->info;
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
110 mp_msg(MSGT_GLOBAL, MSGL_INFO,"\t%s\t%s\n", info->short_name, info->name);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
111 }
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
112 mp_msg(MSGT_GLOBAL, MSGL_INFO,"\n");
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
113 }
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2900
diff changeset
114
25913
21a1dc062bc5 ao_functions_t should be const, part 1
reimar
parents: 24781
diff changeset
115 const ao_functions_t* init_best_audio_out(char** ao_list,int use_plugin,int rate,int channels,int format,int flags){
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
116 int i;
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
117 // 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
118 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
119 while(ao_list[0][0]){
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
120 char* ao=ao_list[0];
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
121 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
122 if (strncmp(ao, "alsa9", 5) == 0 || strncmp(ao, "alsa1x", 6) == 0) {
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
123 mp_msg(MSGT_AO, MSGL_FATAL, MSGTR_AO_ALSA9_1x_Removed);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
124 exit_player(NULL);
13542
ed7e91827ead removing ao_alsa9.c and ao_alsa1x.c as they are superseded by ao_alsa.c
reimar
parents: 13520
diff changeset
125 }
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
126 if (ao_subdevice) {
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
127 free(ao_subdevice);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
128 ao_subdevice = NULL;
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
129 }
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
130 ao_subdevice=strchr(ao,':');
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
131 if(ao_subdevice){
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
132 ao_len = ao_subdevice - ao;
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
133 ao_subdevice = strdup(&ao[ao_len + 1]);
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
134 }
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
135 else
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
136 ao_len = strlen(ao);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
137 for(i=0;audio_out_drivers[i];i++){
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
138 const ao_functions_t* audio_out=audio_out_drivers[i];
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
139 if(!strncmp(audio_out->info->short_name,ao,ao_len)){
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
140 // name matches, try it
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
141 if(audio_out->init(rate,channels,format,flags))
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
142 return audio_out; // success!
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
143 }
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
144 }
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
145 // continue...
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
146 ++ao_list;
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
147 if(!(ao_list[0])) return NULL; // do NOT fallback to others
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
148 }
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
149 if (ao_subdevice) {
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
150 free(ao_subdevice);
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
151 ao_subdevice = NULL;
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 13542
diff changeset
152 }
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
153 // now try the rest...
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
154 for(i=0;audio_out_drivers[i];i++){
26101
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
155 const ao_functions_t* audio_out=audio_out_drivers[i];
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
156 // if(audio_out->control(AOCONTROL_QUERY_FORMAT, (int)format) == CONTROL_TRUE)
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
157 if(audio_out->init(rate,channels,format,flags))
a65168348ad5 cosmetics: reindent, detabify
diego
parents: 26100
diff changeset
158 return audio_out; // success!
7563
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
159 }
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
160 return NULL;
e9e4398029de audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents: 6214
diff changeset
161 }
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2900
diff changeset
162