Mercurial > mplayer.hg
annotate libao2/audio_out.c @ 27975:806c541d03dd
Do not draw in window if our image has not yet been adjusted to the new window size.
Fixes some cases of borders not being black in fullscreen when fullscreen image
is scaled down.
author | reimar |
---|---|
date | Sun, 23 Nov 2008 20:39:15 +0000 |
parents | 9d95dc936e66 |
children | e45b08f2f5d3 |
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" | |
15058 | 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 | 12 // there are some globals: |
3095 | 13 ao_data_t ao_data={0,0,0,0,OUTBURST,-1,0}; |
1185 | 14 char *ao_subdevice = NULL; |
954 | 15 |
16 extern ao_functions_t audio_out_oss; | |
12792 | 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 | 19 extern ao_functions_t audio_out_esd; |
24781 | 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 | 23 extern ao_functions_t audio_out_null; |
26101 | 24 extern ao_functions_t audio_out_alsa5; |
25 extern ao_functions_t audio_out_alsa; | |
3276 | 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 | 29 extern ao_functions_t audio_out_sgi; |
7916 | 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 | 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 | 36 extern ao_functions_t audio_out_pcm; |
1185 | 37 extern ao_functions_t audio_out_pss; |
954 | 38 |
25913 | 39 const ao_functions_t* const audio_out_drivers[] = |
954 | 40 { |
7609 | 41 // native: |
27387
eb7bdbd98210
Rename some audio-output-related preprocessor directives.
diego
parents:
27370
diff
changeset
|
42 #ifdef CONFIG_DIRECTX |
13460
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 |
27387
eb7bdbd98210
Rename some audio-output-related preprocessor directives.
diego
parents:
27370
diff
changeset
|
45 #ifdef CONFIG_WIN32WAVEOUT |
8729
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 |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
27387
diff
changeset
|
48 #ifdef CONFIG_COREAUDIO |
26101 | 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 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
51 #ifdef CONFIG_OSS_AUDIO |
954 | 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 |
27390
9d95dc936e66
Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents:
27388
diff
changeset
|
54 #ifdef CONFIG_ALSA |
26101 | 55 &audio_out_alsa, |
6214
0398cb49fe5e
aRts audio out support by Michele Balistreri <brain at email.it>
atmos4
parents:
6069
diff
changeset
|
56 #endif |
27387
eb7bdbd98210
Rename some audio-output-related preprocessor directives.
diego
parents:
27370
diff
changeset
|
57 #ifdef CONFIG_ALSA5 |
26101 | 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 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
60 #ifdef CONFIG_SGI_AUDIO |
2450 | 61 &audio_out_sgi, |
62 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
63 #ifdef CONFIG_SUN_AUDIO |
7609 | 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 | 66 // wrappers: |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
67 #ifdef CONFIG_ARTS |
7609 | 68 &audio_out_arts, |
1032 | 69 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
70 #ifdef CONFIG_ESD |
8572 | 71 &audio_out_esd, |
72 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
73 #ifdef CONFIG_PULSE |
24781 | 74 &audio_out_pulse, |
13878
66637fa67531
polyaudio audio driver patch by Lennart Poettering <mzzcynlre at 0pointer.de>
faust3
parents:
13632
diff
changeset
|
75 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
76 #ifdef CONFIG_JACK |
12662
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 |
27387
eb7bdbd98210
Rename some audio-output-related preprocessor directives.
diego
parents:
27370
diff
changeset
|
79 #ifdef CONFIG_NAS |
26101 | 80 &audio_out_nas, |
3276 | 81 #endif |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
82 #ifdef CONFIG_SDL |
966
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 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27091
diff
changeset
|
85 #ifdef CONFIG_OPENAL |
17633
e0ef5688cce7
OpenAL audio support, actual output is mono-only (no positioning yet).
reimar
parents:
17566
diff
changeset
|
86 &audio_out_openal, |
17634 | 87 #endif |
26101 | 88 &audio_out_mpegpes, |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
89 #ifdef CONFIG_DXR2 |
19409
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 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
92 #ifdef CONFIG_IVTV |
19409
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 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
95 #ifdef CONFIG_V4L2_DECODER |
23905
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 | 98 &audio_out_null, |
99 // should not be auto-selected: | |
26101 | 100 &audio_out_pcm, |
101 NULL | |
954 | 102 }; |
3095 | 103 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
16732
diff
changeset
|
104 void list_audio_out(void){ |
26101 | 105 int i=0; |
106 mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AvailableAudioOutputDrivers); | |
107 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_OUTPUTS\n"); | |
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 | 110 mp_msg(MSGT_GLOBAL, MSGL_INFO,"\t%s\t%s\n", info->short_name, info->name); |
111 } | |
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 | 114 |
25913 | 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 | 120 char* ao=ao_list[0]; |
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 | 123 mp_msg(MSGT_AO, MSGL_FATAL, MSGTR_AO_ALSA9_1x_Removed); |
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 | 126 if (ao_subdevice) { |
26101 | 127 free(ao_subdevice); |
128 ao_subdevice = NULL; | |
129 } | |
130 ao_subdevice=strchr(ao,':'); | |
131 if(ao_subdevice){ | |
132 ao_len = ao_subdevice - ao; | |
133 ao_subdevice = strdup(&ao[ao_len + 1]); | |
13632 | 134 } |
26101 | 135 else |
136 ao_len = strlen(ao); | |
27091
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
137 |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
138 mp_msg(MSGT_AO, MSGL_V, MSGTR_AO_TryingPreferredAudioDriver, |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
139 ao_len, ao, ao_subdevice ? ao_subdevice : "[none]"); |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
140 |
26101 | 141 for(i=0;audio_out_drivers[i];i++){ |
142 const ao_functions_t* audio_out=audio_out_drivers[i]; | |
143 if(!strncmp(audio_out->info->short_name,ao,ao_len)){ | |
144 // name matches, try it | |
145 if(audio_out->init(rate,channels,format,flags)) | |
146 return audio_out; // success! | |
27091
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
147 else |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
148 mp_msg(MSGT_AO, MSGL_WARN, MSGTR_AO_FailedInit, ao); |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
149 break; |
26101 | 150 } |
151 } | |
27091
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
152 if (!audio_out_drivers[i]) // we searched through the entire list |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
153 mp_msg(MSGT_AO, MSGL_WARN, MSGTR_AO_NoSuchDriver, ao_len, ao); |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
154 // continue... |
26101 | 155 ++ao_list; |
156 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
|
157 } |
13632 | 158 if (ao_subdevice) { |
26101 | 159 free(ao_subdevice); |
160 ao_subdevice = NULL; | |
13632 | 161 } |
27091
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
162 |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
163 mp_msg(MSGT_AO, MSGL_V, MSGTR_AO_TryingEveryKnown); |
66e998895707
Add verbose messages about trying and searching for audio output drivers.
corey
parents:
26208
diff
changeset
|
164 |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
165 // now try the rest... |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
166 for(i=0;audio_out_drivers[i];i++){ |
26101 | 167 const ao_functions_t* audio_out=audio_out_drivers[i]; |
168 // if(audio_out->control(AOCONTROL_QUERY_FORMAT, (int)format) == CONTROL_TRUE) | |
169 if(audio_out->init(rate,channels,format,flags)) | |
170 return audio_out; // success! | |
7563
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
171 } |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
172 return NULL; |
e9e4398029de
audio out driver list support (example: -ao alsa9,sdl:esd,oss,sdl:oss,)
arpi
parents:
6214
diff
changeset
|
173 } |
3095 | 174 |