diff options
| author | Daniel Mack <daniel@caiaq.de> | 2009-11-02 18:09:57 +0100 | 
|---|---|---|
| committer | Daniel Mack <daniel@caiaq.de> | 2009-11-02 18:09:57 +0100 | 
| commit | 21ffcd55a5a425870f8f4c3b4933bc7cb352e339 (patch) | |
| tree | 0c403ccb610b7155e06b8eb0d48617c957e8effb /src | |
| parent | c4e276edbd84cbb8c5b594c9f427b0a25a7fb2ab (diff) | |
| parent | 7938442f77fafbc6c14d5072d14b773b289dc809 (diff) | |
Merge branch 'master' of git://0pointer.de/pulseaudio
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/daemon/main.c | 40 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-input.conf.common | 31 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output-headphones-2.conf | 82 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output-headphones.conf | 7 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf | 4 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output-mono.conf | 4 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output-speaker.conf | 94 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/paths/analog-output.conf | 15 | ||||
| -rw-r--r-- | src/modules/alsa/mixer/profile-sets/default.conf | 14 | ||||
| -rw-r--r-- | src/modules/module-equalizer-sink.c | 36 | ||||
| -rw-r--r-- | src/pulsecore/core-util.c | 16 | ||||
| -rw-r--r-- | src/pulsecore/core-util.h | 2 | 
13 files changed, 299 insertions, 48 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index 98c04683..f0d5a5e8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -141,8 +141,10 @@ EXTRA_DIST = \  		modules/alsa/mixer/paths/analog-input-tvtuner.conf \  		modules/alsa/mixer/paths/analog-input-video.conf \  		modules/alsa/mixer/paths/analog-output.conf \ +		modules/alsa/mixer/paths/analog-output-speaker.conf \  		modules/alsa/mixer/paths/analog-output.conf.common \  		modules/alsa/mixer/paths/analog-output-headphones.conf \ +		modules/alsa/mixer/paths/analog-output-headphones-2.conf \  		modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \  		modules/alsa/mixer/paths/analog-output-mono.conf diff --git a/src/daemon/main.c b/src/daemon/main.c index c73e9afc..cc6f24bd 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -657,7 +657,7 @@ int main(int argc, char *argv[]) {  #ifdef HAVE_FORK          if (pipe(daemon_pipe) < 0) { -            pa_log(_("pipe failed: %s"), pa_cstrerror(errno)); +            pa_log(_("pipe() failed: %s"), pa_cstrerror(errno));              goto finish;          } @@ -708,22 +708,27 @@ int main(int argc, char *argv[]) {              pa_log_set_target(PA_LOG_SYSLOG);  #ifdef HAVE_SETSID -        setsid(); -#endif -#ifdef HAVE_SETPGID -        setpgid(0,0); +        if (setsid() < 0) { +            pa_log(_("setsid() failed: %s"), pa_cstrerror(errno)); +            goto finish; +        }  #endif -#ifndef OS_IS_WIN32 -        pa_close(0); -        pa_close(1); -        pa_close(2); +        /* We now are a session and process group leader. Let's fork +         * again and let the father die, so that we'll become a +         * process that can never acquire a TTY again, in a session and +         * process group without leader */ -        pa_assert_se(open("/dev/null", O_RDONLY) == 0); -        pa_assert_se(open("/dev/null", O_WRONLY) == 1); -        pa_assert_se(open("/dev/null", O_WRONLY) == 2); -#else -        FreeConsole(); +#ifdef HAVE_FORK +        if ((child = fork()) < 0) { +            pa_log(_("fork() failed: %s"), pa_cstrerror(errno)); +            goto finish; +        } + +        if (child != 0) { +            retval = 0; +            goto finish; +        }  #endif  #ifdef SIGTTOU @@ -736,12 +741,7 @@ int main(int argc, char *argv[]) {          signal(SIGTSTP, SIG_IGN);  #endif -#ifdef TIOCNOTTY -        if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) { -            ioctl(tty_fd, TIOCNOTTY, (char*) 0); -            pa_assert_se(pa_close(tty_fd) == 0); -        } -#endif +        pa_nullify_stdfds();      }      pa_set_env_and_record("PULSE_INTERNAL", "1"); diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common index 87af38b3..951e11fa 100644 --- a/src/modules/alsa/mixer/paths/analog-input.conf.common +++ b/src/modules/alsa/mixer/paths/analog-input.conf.common @@ -98,7 +98,11 @@ priority = 18  name = input-docking  priority = 17 -;;; ' Capture Source' +[Option Input Source:AUX IN] +name = input +priority = 10 + +;;; 'Capture Source'  [Element Capture Source]  enumeration = select @@ -244,6 +248,31 @@ name = input-docking  [Option Capture Source:Dock Mic]  name = input-docking-microphone +;;; 'Mic Jack Mode' + +[Element Mic Jack Mode] +enumeration = select + +[Option Mic Jack Mode:Mic In] +name = input-microphone + +[Option Mic Jack Mode:Line In] +name = input-linein + +;;; 'Digital Input Source' + +[Element Digital Input Source] +enumeration = select + +[Option Digital Input Source:Analog Inputs] +name = input + +[Option Digital Input Source:Digital Mic 1] +name = input-microphone + +[Option Digital Input Source:Digital Mic 2] +name = input-microphone +  ;;; Various Boosts  [Element Capture Boost] diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf new file mode 100644 index 00000000..f2fd31c7 --- /dev/null +++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf @@ -0,0 +1,82 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +; Path for mixers that have a 'Headphone2' control +; +; See analog-output.conf.common for an explanation on the directives + +[General] +priority = 89 + +[Element Hardware Master] +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Master] +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Master Mono] +switch = off +volume = off + +; This profile path is intended to control the second headphones, not +; the first headphones. But it should not hurt if we leave the +; headphone jack enabled nonetheless. +[Element Headphone] +switch = mute +volume = zero + +[Element Headphone2] +required = any +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Speaker] +switch = off +volume = off + +[Element Front] +switch = off +volume = off + +[Element Rear] +switch = off +volume = off + +[Element Surround] +switch = off +volume = off + +[Element Side] +switch = off +volume = off + +[Element Center] +switch = off +volume = off + +[Element LFE] +switch = off +volume = off + +.include analog-output.conf.common diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf index 61d2e297..2131cfe8 100644 --- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf +++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf @@ -44,6 +44,13 @@ volume = merge  override-map.1 = all  override-map.2 = all-left,all-right +; This profile path is intended to control the first headphones, not +; the second headphones. But it should not hurt if we leave the second +; headphone jack enabled nonetheless. +[Element Headphone2] +switch = mute +volume = zero +  [Element Speaker]  switch = off  volume = off diff --git a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf index 911361d7..0a43e271 100644 --- a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf +++ b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf @@ -48,6 +48,10 @@ override-map.2 = lfe,lfe  switch = mute  volume = zero +[Element Headphone2] +switch = mute +volume = zero +  [Element Speaker]  switch = mute  volume = merge diff --git a/src/modules/alsa/mixer/paths/analog-output-mono.conf b/src/modules/alsa/mixer/paths/analog-output-mono.conf index 2fbc60b7..542edc40 100644 --- a/src/modules/alsa/mixer/paths/analog-output-mono.conf +++ b/src/modules/alsa/mixer/paths/analog-output-mono.conf @@ -45,6 +45,10 @@ override-map.2 = all-left,all-right  switch = mute  volume = zero +[Element Headphone2] +switch = mute +volume = zero +  [Element Speaker]  switch = mute  volume = merge diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf new file mode 100644 index 00000000..aea78534 --- /dev/null +++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf @@ -0,0 +1,94 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +; Path for mixers that have a 'Speaker' control +; +; See analog-output.conf.common for an explanation on the directives + +[General] +priority = 100 + +[Element Hardware Master] +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Master] +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Master Mono] +switch = off +volume = off + +; This profile path is intended to control the speaker, not the +; headphones. But it should not hurt if we leave the headphone jack +; enabled nonetheless. +[Element Headphone] +switch = mute +volume = zero + +[Element Headphone2] +switch = mute +volume = zero + +[Element Speaker] +required = any +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element Front] +switch = mute +volume = merge +override-map.1 = all-front +override-map.2 = front-left,front-right + +[Element Rear] +switch = mute +volume = merge +override-map.1 = all-rear +override-map.2 = rear-left,rear-right + +[Element Surround] +switch = mute +volume = merge +override-map.1 = all-rear +override-map.2 = rear-left,rear-right + +[Element Side] +switch = mute +volume = merge +override-map.1 = all-side +override-map.2 = side-left,side-right + +[Element Center] +switch = mute +volume = merge +override-map.1 = all-center +override-map.2 = all-center,all-center + +[Element LFE] +switch = mute +volume = merge +override-map.1 = lfe +override-map.2 = lfe,lfe + +.include analog-output.conf.common diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf index f71a05a1..d7c1223b 100644 --- a/src/modules/alsa/mixer/paths/analog-output.conf +++ b/src/modules/alsa/mixer/paths/analog-output.conf @@ -14,12 +14,13 @@  # along with PulseAudio; if not, write to the Free Software Foundation,  # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -; Intended for the 'default' output +; Intended for the 'default' output. Note that a-o-speaker.conf has a +; higher priority than this  ;  ; See analog-output.conf.common for an explanation on the directives  [General] -priority = 100 +priority = 99  [Element Hardware Master]  switch = mute @@ -37,18 +38,20 @@ override-map.2 = all-left,all-right  switch = off  volume = off -; This profile path is intended to control the speaker, not the +; This profile path is intended to control the default output, not the  ; headphones. But it should not hurt if we leave the headphone jack  ; enabled nonetheless.  [Element Headphone]  switch = mute  volume = zero +[Element Headphone2] +switch = mute +volume = zero +  [Element Speaker]  switch = mute -volume = merge -override-map.1 = all -override-map.2 = all-left,all-right +volume = off  [Element Front]  switch = mute diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf index ac41a8d3..046938fc 100644 --- a/src/modules/alsa/mixer/profile-sets/default.conf +++ b/src/modules/alsa/mixer/profile-sets/default.conf @@ -62,42 +62,42 @@ auto-profiles = yes  [Mapping analog-mono]  device-strings = hw:%f  channel-map = mono -paths-output = analog-output analog-output-headphones analog-output-mono analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono  paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line  priority = 1  [Mapping analog-stereo]  device-strings = front:%f hw:%f  channel-map = left,right -paths-output = analog-output analog-output-headphones analog-output-mono analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono  paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line  priority = 10  [Mapping analog-surround-40]  device-strings = surround40:%f  channel-map = front-left,front-right,rear-left,rear-right -paths-output = analog-output analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono  priority = 7  direction = output  [Mapping analog-surround-41]  device-strings = surround41:%f  channel-map = front-left,front-right,rear-left,rear-right,lfe -paths-output = analog-output analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono  priority = 8  direction = output  [Mapping analog-surround-50]  device-strings = surround50:%f  channel-map = front-left,front-right,rear-left,rear-right,front-center -paths-output = analog-output analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono  priority = 7  direction = output  [Mapping analog-surround-51]  device-strings = surround51:%f  channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe -paths-output = analog-output analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono  priority = 8  direction = output @@ -105,7 +105,7 @@ direction = output  device-strings = surround71:%f  channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right  description = Analog Surround 7.1 -paths-output = analog-output analog-output-lfe-on-mono +paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono  priority = 7  direction = output diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c index 814a00fa..7c0ccd3a 100644 --- a/src/modules/module-equalizer-sink.c +++ b/src/modules/module-equalizer-sink.c @@ -412,7 +412,8 @@ static void dsp_logic(      fftwf_complex * restrict output_window,//The transformed window'd src      struct userdata *u){//Collection of constants      const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size); - +    float_vector_t x; +    x.f[0] = x.f[1] = x.f[2] = x.f[3] = X;      //assert(u->samples_gathered >= u->R);      //use a linear-phase sliding STFT and overlap-add method @@ -422,9 +423,8 @@ static void dsp_logic(          float_vector_t *w = (float_vector_t*) (W + j);          float_vector_t *s = (float_vector_t*) (src + j);  //#if __SSE2__ -        d->m = _mm_mul_ps(w->m, s->m); -//#else -//        d->v = w->v * s->v; +        d->m = _mm_mul_ps(x.m, _mm_mul_ps(w->m, s->m)); +//        d->v = x->v * w->v * s->v;  //#endif      }      //zero padd the the remaining fft window @@ -556,33 +556,41 @@ static void input_buffer(struct userdata *u, pa_memchunk *in){  /* Called from I/O thread context */  static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {      struct userdata *u; -    size_t fs, target_samples; -    struct timeval start, end; +    size_t fs, target_samples, mbs; +    //struct timeval start, end;      pa_memchunk tchunk;      pa_sink_input_assert_ref(i);      pa_assert_se(u = i->userdata);      pa_assert(chunk);      pa_assert(u->sink);      fs = pa_frame_size(&(u->sink->sample_spec)); +    nbytes = PA_MIN(nbytes, pa_mempool_block_size_max(u->sink->core->mempool));      target_samples = PA_ROUND_UP(nbytes / fs, u->R); +    mbs = pa_mempool_block_size_max(u->sink->core->mempool); +    //pa_log_debug("vanilla mbs = %ld",mbs); +    mbs = PA_ROUND_DOWN(mbs / fs, u->R); +    mbs = PA_MAX(mbs, u->R); +    target_samples = PA_MAX(target_samples, mbs); +    //pa_log_debug("target samples: %ld", target_samples);      if(u->first_iteration){          //allocate request_size          target_samples = PA_MAX(target_samples, u->window_size);      }else{          //allocate request_size + overlap          target_samples += u->overlap_size; -        alloc_input_buffers(u, target_samples);      }      alloc_input_buffers(u, target_samples); +    //pa_log_debug("post target samples: %ld", target_samples);      chunk->memblock = NULL;      /* Hmm, process any rewind request that might be queued up */      pa_sink_process_rewind(u->sink, 0);      //pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested); -    pa_rtclock_get(&start); +    //pa_rtclock_get(&start);      do{          size_t input_remaining = target_samples - u->samples_gathered; +       // pa_log_debug("input remaining %ld samples", input_remaining);          pa_assert(input_remaining > 0);          while(pa_memblockq_peek(u->input_q, &tchunk) < 0){              //pa_sink_render(u->sink, input_remaining * fs, &tchunk); @@ -597,23 +605,23 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk          //pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);          /* copy new input */          //pa_rtclock_get(start); +       // pa_log_debug("buffering %ld bytes", tchunk.length);          input_buffer(u, &tchunk);          //pa_rtclock_get(&end);          //pa_log_debug("Took %0.5f seconds to setup", pa_timeval_diff(end, start) / (double) PA_USEC_PER_SEC);          pa_memblock_unref(tchunk.memblock);      }while(u->samples_gathered < target_samples); -    pa_rtclock_get(&end); -    pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC); +    //pa_rtclock_get(&end); +    //pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);      pa_assert(u->fft_size >= u->window_size);      pa_assert(u->R < u->window_size); -    /* set the H filter */ -    pa_rtclock_get(&start); +    //pa_rtclock_get(&start);      /* process a block */      process_samples(u, chunk); -    pa_rtclock_get(&end); -    pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC); +    //pa_rtclock_get(&end); +    //pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);      pa_assert(chunk->memblock);      //pa_log_debug("gave %ld", chunk->length/fs); diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 738bf065..2b0a60a8 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -2999,3 +2999,19 @@ finish:      pa_make_fd_cloexec(fileno(f));      return f;  } + +void pa_nullify_stdfds(void) { + +#ifndef OS_IS_WIN32 +        pa_close(STDIN_FILENO); +        pa_close(STDOUT_FILENO); +        pa_close(STDERR_FILENO); + +        pa_assert_se(open("/dev/null", O_RDONLY) == STDIN_FILENO); +        pa_assert_se(open("/dev/null", O_WRONLY) == STDOUT_FILENO); +        pa_assert_se(open("/dev/null", O_WRONLY) == STDERR_FILENO); +#else +        FreeConsole(); +#endif + +} diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index d50f79a2..9c9cf78a 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -265,4 +265,6 @@ int pa_pipe_cloexec(int pipefd[2]);  int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen);  FILE* pa_fopen_cloexec(const char *path, const char *mode); +void pa_nullify_stdfds(void); +  #endif | 
