]> code.delx.au - pulseaudio/commitdiff
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
authorLennart Poettering <lennart@poettering.net>
Fri, 20 Feb 2009 02:21:46 +0000 (03:21 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 20 Feb 2009 02:21:46 +0000 (03:21 +0100)
1  2 
src/modules/alsa/alsa-util.c
src/modules/bluetooth/module-bluetooth-device.c

index 8607e469af860370614e6122d50d7ebb249d00bd,a0907c4d34e1d932e993cc232b40f331be665396..d00a80f157412ab34a504c69da33e7e2e359b1b5
@@@ -1,7 -1,7 +1,7 @@@
  /***
    This file is part of PulseAudio.
  
-   Copyright 2004-2006 Lennart Poettering
+   Copyright 2004-2009 Lennart Poettering
    Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
  
    PulseAudio is free software; you can redistribute it and/or modify
@@@ -32,7 -32,6 +32,7 @@@
  #include <pulse/xmalloc.h>
  #include <pulse/timeval.h>
  #include <pulse/util.h>
 +#include <pulse/i18n.h>
  
  #include <pulsecore/log.h>
  #include <pulsecore/macro.h>
@@@ -114,7 -113,7 +114,7 @@@ static void io_cb(pa_mainloop_api*a, pa
  static void defer_cb(pa_mainloop_api*a, pa_defer_event* e, void *userdata) {
      struct pa_alsa_fdlist *fdl = userdata;
      unsigned num_fds, i;
-     int err;
+     int err, n;
      struct pollfd *temp;
  
      pa_assert(a);
  
      a->defer_enable(fdl->defer, 0);
  
-     num_fds = (unsigned) snd_mixer_poll_descriptors_count(fdl->mixer);
+     if ((n = snd_mixer_poll_descriptors_count(fdl->mixer)) < 0) {
+         pa_log("snd_mixer_poll_descriptors_count() failed: %s", snd_strerror(n));
+         return;
+     }
+     num_fds = (unsigned) n;
  
      if (num_fds != fdl->num_fds) {
          if (fdl->fds)
@@@ -465,7 -468,6 +469,7 @@@ finish
  
  int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
      snd_pcm_sw_params_t *swparams;
 +    snd_pcm_uframes_t boundary;
      int err;
  
      pa_assert(pcm);
          return err;
      }
  
 -    if ((err = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, (snd_pcm_uframes_t) -1)) < 0) {
 +    if ((err = snd_pcm_sw_params_set_period_event(pcm, swparams, 0)) < 0) {
 +        pa_log_warn("Unable to disable period event: %s\n", snd_strerror(err));
 +        return err;
 +    }
 +
 +    if ((err = snd_pcm_sw_params_set_tstamp_mode(pcm, swparams, SND_PCM_TSTAMP_ENABLE)) < 0) {
 +        pa_log_warn("Unable to enable time stamping: %s\n", snd_strerror(err));
 +        return err;
 +    }
 +
 +    if ((err = snd_pcm_sw_params_get_boundary(swparams, &boundary)) < 0) {
 +        pa_log_warn("Unable to get boundary: %s\n", snd_strerror(err));
 +        return err;
 +    }
 +
 +    if ((err = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, boundary)) < 0) {
          pa_log_warn("Unable to set stop threshold: %s\n", snd_strerror(err));
          return err;
      }
  static const struct pa_alsa_profile_info device_table[] = {
      {{ 1, { PA_CHANNEL_POSITION_MONO }},
       "hw",
 -     "Analog Mono",
 +     N_("Analog Mono"),
       "analog-mono",
       1 },
  
      {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
       "front",
 -     "Analog Stereo",
 +     N_("Analog Stereo"),
       "analog-stereo",
       10 },
  
      {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
       "iec958",
 -     "IEC958 Digital Stereo",
 +     N_("Digital Stereo (IEC958)"),
       "iec958-stereo",
       5 },
  
      {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
       "hdmi",
 -     "HDMI Digital Stereo",
 +     N_("Digital Stereo (HDMI)"),
       "hdmi-stereo",
       4 },
  
      {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
              PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
       "surround40",
 -     "Analog Surround 4.0",
 +     N_("Analog Surround 4.0"),
       "analog-surround-40",
       7 },
  
      {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
              PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
       "a52",
 -     "IEC958/AC3 Digital Surround 4.0",
 +     N_("Digital Surround 4.0 (IEC958/AC3)"),
       "iec958-ac3-surround-40",
       2 },
  
              PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
              PA_CHANNEL_POSITION_LFE }},
       "surround41",
 -     "Analog Surround 4.1",
 +     N_("Analog Surround 4.1"),
       "analog-surround-41",
       7 },
  
              PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
              PA_CHANNEL_POSITION_CENTER }},
       "surround50",
 -     "Analog Surround 5.0",
 +     N_("Analog Surround 5.0"),
       "analog-surround-50",
       7 },
  
              PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
              PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE }},
       "surround51",
 -     "Analog Surround 5.1",
 +     N_("Analog Surround 5.1"),
       "analog-surround-51",
       8 },
  
              PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT,
              PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_LFE}},
       "a52",
 -     "IEC958/AC3 Digital Surround 5.1",
 +     N_("Digital Surround 5.1 (IEC958/AC3)"),
       "iec958-ac3-surround-51",
       3 },
  
              PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE,
              PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT }},
       "surround71",
 -     "Analog Surround 7.1",
 +     N_("Analog Surround 7.1"),
       "analog-surround-71",
       7 },
  
@@@ -1405,7 -1392,7 +1409,7 @@@ void pa_alsa_init_proplist_pcm_info(pa_
  
      snd_pcm_class_t class;
      snd_pcm_subclass_t subclass;
-     const char *n, *id, *sdn, *cn;
+     const char *n, *id, *sdn, *cn = NULL;
      int card;
  
      pa_assert(p);
@@@ -1550,7 -1537,7 +1554,7 @@@ pa_rtpoll_item* pa_alsa_build_pollfd(sn
      return item;
  }
  
 -snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss) {
 +snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss) {
      snd_pcm_sframes_t n;
      size_t k;
  
      /* Some ALSA driver expose weird bugs, let's inform the user about
       * what is going on */
  
 -    n = snd_pcm_avail_update(pcm);
 +    n = snd_pcm_avail(pcm);
  
      if (n <= 0)
          return n;
  
      if (k >= hwbuf_size * 3 ||
          k >= pa_bytes_per_second(ss)*10)
 -        pa_log("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
 -               "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
 +        pa_log(_("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
 +                 "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
                 (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
  
      return n;
@@@ -1602,8 -1589,8 +1606,8 @@@ int pa_alsa_safe_mmap_begin(snd_pcm_t *
          k >= hwbuf_size * 3 ||
          k >= pa_bytes_per_second(ss)*10)
  
 -        pa_log("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
 -               "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
 +        pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
 +                 "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
                 (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
  
      return r;
index 27f9e7c27dc184697113556e05508c69eda3f403,b8f67299faa6e1bb4da07d7d34ef9047aba9223a..ac8344f0450d4bd37b957a2d517bb2a6aae11ebe
@@@ -33,8 -33,6 +33,8 @@@
  #include <pulse/xmalloc.h>
  #include <pulse/timeval.h>
  #include <pulse/sample.h>
 +#include <pulse/i18n.h>
 +
  #include <pulsecore/module.h>
  #include <pulsecore/modargs.h>
  #include <pulsecore/core-util.h>
@@@ -906,6 -904,11 +906,11 @@@ static int a2dp_process_render(struct u
                               (void*) p, u->write_memchunk.length,
                               d, left,
                               &written);
+         PA_ONCE_BEGIN {
+             pa_log_debug("Using SBC encoder implementation: %s", pa_strnull(sbc_get_implementation_info(&a2dp->sbc)));
+         } PA_ONCE_END;
          pa_memblock_release(u->write_memchunk.memblock);
  
          if (encoded <= 0) {
@@@ -1351,9 -1354,6 +1356,6 @@@ static int add_sink(struct userdata *u
  
          u->sink->userdata = u;
          u->sink->parent.process_msg = sink_process_msg;
-         pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
-         pa_sink_set_rtpoll(u->sink, u->rtpoll);
      }
  
  /*     u->sink->get_volume = sink_get_volume_cb; */
@@@ -1398,9 -1398,6 +1400,6 @@@ static int add_source(struct userdata *
  
          u->source->userdata = u;
          u->source->parent.process_msg = source_process_msg;
-         pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
-         pa_source_set_rtpoll(u->source, u->rtpoll);
      }
  
  /*     u->source->get_volume = source_get_volume_cb; */
@@@ -1525,9 -1522,9 +1524,9 @@@ static void stop_thread(struct userdat
          u->source = NULL;
      }
  
-     pa_thread_mq_done(&u->thread_mq);
      if (u->rtpoll) {
+         pa_thread_mq_done(&u->thread_mq);
          pa_rtpoll_free(u->rtpoll);
          u->rtpoll = NULL;
      }
@@@ -1561,11 -1558,17 +1560,17 @@@ static int start_thread(struct userdat
          return -1;
      }
  
-     if (u->sink)
+     if (u->sink) {
+         pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
+         pa_sink_set_rtpoll(u->sink, u->rtpoll);
          pa_sink_put(u->sink);
+     }
  
-     if (u->source)
+     if (u->source) {
+         pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
+         pa_source_set_rtpoll(u->source, u->rtpoll);
          pa_source_put(u->source);
+     }
  
      return 0;
  }
@@@ -1657,7 -1660,7 +1662,7 @@@ static int add_card(struct userdata *u
      data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
  
      if (u->device->audio_sink_info_valid > 0) {
 -        p = pa_card_profile_new("a2dp", "A2DP Advanced Audio Distribution Profile", sizeof(enum profile));
 +        p = pa_card_profile_new("a2dp", _("High Fidelity Playback (A2DP)"), sizeof(enum profile));
          p->priority = 10;
          p->n_sinks = 1;
          p->n_sources = 0;
      }
  
      if (u->device->headset_info_valid > 0) {
 -        p = pa_card_profile_new("hsp", "HSP/HFP Headset/Hands-Free Profile", sizeof(enum profile));
 +        p = pa_card_profile_new("hsp", _("Telephony Duplex (HSP/HFP)"), sizeof(enum profile));
          p->priority = 20;
          p->n_sinks = 1;
          p->n_sources = 1;
  
      pa_assert(!pa_hashmap_isempty(data.profiles));
  
 -    p = pa_card_profile_new("off", "Off", sizeof(enum profile));
 +    p = pa_card_profile_new("off", _("Off"), sizeof(enum profile));
      d = PA_CARD_PROFILE_DATA(p);
      *d = PROFILE_OFF;
      pa_hashmap_put(data.profiles, p->name, p);