ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/Audio.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/Audio.pm (file contents):
Revision 1.1 by root, Wed Jan 18 00:51:23 2012 UTC vs.
Revision 1.3 by root, Wed May 1 20:38:50 2013 UTC

17use common::sense; 17use common::sense;
18use DC (); 18use DC ();
19 19
20our $SDL_MIXER; 20our $SDL_MIXER;
21 21
22sub init { 22sub init() {
23 unless ($::SDL_MIXER) { 23 unless ($::SDL_MIXER) {
24 if (length $::CFG->{audio_driver}) { 24 if (length $::CFG->{audio_driver}) {
25 local $ENV{SDL_AUDIODRIVER} = $::CFG->{audio_driver}; 25 local $ENV{SDL_AUDIODRIVER} = $::CFG->{audio_driver};
26 DC::SDL_Init DC::SDL_INIT_AUDIO 26 DC::SDL_InitSubSystem DC::SDL_INIT_AUDIO
27 and die "SDL::Init failed!\n"; 27 and die "SDL::Init failed!\n";
28 } else { 28 } else {
29 DC::SDL_Init DC::SDL_INIT_AUDIO 29 DC::SDL_InitSubSystem DC::SDL_INIT_AUDIO
30 and die "SDL::Init failed!\n"; 30 and die "SDL::Init failed!\n";
31 } 31 }
32 32
33 $ENV{MIX_EFFECTSMAXSPEED} = 1; 33 $ENV{MIX_EFFECTSMAXSPEED} = 1;
34 $::SDL_MIXER = !DC::Mix_OpenAudio 34 $::SDL_MIXER = !DC::Mix_OpenAudio
40 DC::Mix_AllocateChannels $::CFG->{audio_mix_channels} 40 DC::Mix_AllocateChannels $::CFG->{audio_mix_channels}
41 if $::SDL_MIXER; 41 if $::SDL_MIXER;
42 } 42 }
43} 43}
44 44
45sub _probe {
46 my $pid = fork;
47
48 return 1 unless defined $pid;
49
50 unless ($pid) {
51 eval {
52 DC::SDL_Init DC::SDL_INIT_NOPARACHUTE;
53 init;
54 };
55 DC::_exit $@ ? 1 : 0;
56 }
57
58 waitpid $pid, 0
59 and !$?
60}
61
62sub probe {
63 return unless $^O eq "linux";
64
65 # on linux, both alsa and pulse (especially the latter)
66 # are prone to segfaults, while the other interfaces are
67 # simply unreliable.
68
69 # let's check whether the default config and a few others segfault,
70 # then decide
71
72 return if _probe; # user selected config
73 $::CFG->{audio_driver} = "" ; return if _probe; # default sdl config
74 $::CFG->{audio_driver} = "pulse"; return if _probe;
75 $::CFG->{audio_driver} = "alsa" ; return if _probe;
76 $::CFG->{audio_driver} = "esd" ; return if _probe;
77 $::CFG->{audio_driver} = "dsp" ; return if _probe;
78 $::CFG->{audio_driver} = "none" ;
79}
80
451; 811;
46 82
47=back 83=back
48 84
49=head1 AUTHOR 85=head1 AUTHOR

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines