]> code.delx.au - pulseaudio/blobdiff - src/modules/alsa/alsa-sink.c
Merge most of elmarco/rtclock2
[pulseaudio] / src / modules / alsa / alsa-sink.c
index 2226bc6f3fae2bc3ac55f416e8aa191bdf4fbff1..c584362dc553c486f3d02257e67f9e1533a2d387 100644 (file)
 #include <valgrind/memcheck.h>
 #endif
 
-#include <pulse/xmalloc.h>
-#include <pulse/util.h>
-#include <pulse/timeval.h>
 #include <pulse/i18n.h>
+#include <pulse/rtclock.h>
+#include <pulse/timeval.h>
+#include <pulse/util.h>
+#include <pulse/xmalloc.h>
 
 #include <pulsecore/core.h>
 #include <pulsecore/module.h>
 #include <pulsecore/memchunk.h>
 #include <pulsecore/sink.h>
 #include <pulsecore/modargs.h>
+#include <pulsecore/core-rtclock.h>
 #include <pulsecore/core-util.h>
 #include <pulsecore/sample-util.h>
 #include <pulsecore/log.h>
@@ -50,7 +52,6 @@
 #include <pulsecore/core-error.h>
 #include <pulsecore/thread-mq.h>
 #include <pulsecore/rtpoll.h>
-#include <pulsecore/rtclock.h>
 #include <pulsecore/time-smoother.h>
 
 #include <modules/reserve-wrap.h>
@@ -707,7 +708,7 @@ static void update_smoother(struct userdata *u) {
 
     /* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
     if (now1 <= 0)
-        now1 = pa_rtclock_usec();
+        now1 = pa_rtclock_now();
 
     now2 = pa_bytes_to_usec((uint64_t) position, &u->sink->sample_spec);
 
@@ -721,7 +722,7 @@ static pa_usec_t sink_get_latency(struct userdata *u) {
 
     pa_assert(u);
 
-    now1 = pa_rtclock_usec();
+    now1 = pa_rtclock_now();
     now2 = pa_smoother_get(u->smoother, now1);
 
     delay = (int64_t) pa_bytes_to_usec(u->write_count, &u->sink->sample_spec) - (int64_t) now2;
@@ -752,7 +753,7 @@ static int suspend(struct userdata *u) {
     pa_assert(u);
     pa_assert(u->pcm_handle);
 
-    pa_smoother_pause(u->smoother, pa_rtclock_usec());
+    pa_smoother_pause(u->smoother, pa_rtclock_now());
 
     /* Let's suspend -- we don't call snd_pcm_drain() here since that might
      * take awfully long with our long buffer sizes today. */
@@ -838,7 +839,6 @@ static int unsuspend(struct userdata *u) {
 
     pa_log_info("Trying resume...");
 
-    snd_config_update_free_global();
     if ((err = snd_pcm_open(&u->pcm_handle, u->device_name, SND_PCM_STREAM_PLAYBACK,
                             /*SND_PCM_NONBLOCK|*/
                             SND_PCM_NO_AUTO_RESAMPLE|
@@ -1213,7 +1213,6 @@ static void thread_func(void *userdata) {
         pa_make_realtime(u->core->realtime_priority);
 
     pa_thread_mq_install(&u->thread_mq);
-    pa_rtpoll_install(u->rtpoll);
 
     for (;;) {
         int ret;
@@ -1247,7 +1246,7 @@ static void thread_func(void *userdata) {
                     pa_log_info("Starting playback.");
                     snd_pcm_start(u->pcm_handle);
 
-                    pa_smoother_resume(u->smoother, pa_rtclock_usec(), TRUE);
+                    pa_smoother_resume(u->smoother, pa_rtclock_now(), TRUE);
                 }
 
                 update_smoother(u);
@@ -1276,7 +1275,7 @@ static void thread_func(void *userdata) {
 
                 /* Convert from the sound card time domain to the
                  * system time domain */
-                cusec = pa_smoother_translate(u->smoother, pa_rtclock_usec(), sleep_usec);
+                cusec = pa_smoother_translate(u->smoother, pa_rtclock_now(), sleep_usec);
 
 /*                 pa_log_debug("Waking up in %0.2fms (system clock).", (double) cusec / PA_USEC_PER_MSEC); */
 
@@ -1335,7 +1334,7 @@ finish:
     pa_log_debug("Thread shutting down");
 }
 
-static void set_sink_name(pa_sink_new_data *data, pa_modargs *ma, const char *device_id, const char *device_name) {
+static void set_sink_name(pa_sink_new_data *data, pa_modargs *ma, const char *device_id, const char *device_name, pa_alsa_mapping *mapping) {
     const char *n;
     char *t;
 
@@ -1356,7 +1355,11 @@ static void set_sink_name(pa_sink_new_data *data, pa_modargs *ma, const char *de
         data->namereg_fail = FALSE;
     }
 
-    t = pa_sprintf_malloc("alsa_output.%s", n);
+    if (mapping)
+        t = pa_sprintf_malloc("alsa_output.%s.%s", n, mapping->name);
+    else
+        t = pa_sprintf_malloc("alsa_output.%s", n);
+
     pa_sink_new_data_set_name(data, t);
     pa_xfree(t);
 }
@@ -1578,7 +1581,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
             TRUE,
             TRUE,
             5,
-            pa_rtclock_usec(),
+            pa_rtclock_now(),
             TRUE);
 
     dev_id = pa_modargs_get_value(
@@ -1679,7 +1682,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
     data.driver = driver;
     data.module = m;
     data.card = card;
-    set_sink_name(&data, ma, dev_id, u->device_name);
+    set_sink_name(&data, ma, dev_id, u->device_name, mapping);
     pa_sink_new_data_set_sample_spec(&data, &ss);
     pa_sink_new_data_set_channel_map(&data, &map);