~ubuntu-audio-dev/pulseaudio/pulseaudio-5

« back to all changes in this revision

Viewing changes to debian/patches/0207-Enable-pulseaudio-droid.patch

  • Committer: Luke Yelavich
  • Date: 2014-08-08 03:04:07 UTC
  • Revision ID: luke.yelavich@canonical.com-20140808030407-w9o34zc22uzt2s5a
Update droid patch with latest utopic fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
From: Ricardo Salveti de Araujo <rsalveti@rsalveti.net>
2
 
Subject: [PATCH] Adding Pulseaudio Droid module
3
 
 
4
 
Module that uses the Android Audio HAL for sink/source and mixing.
5
 
 
6
 
Work done mostly by Juho Hämäläinen <juho.hamalainen@tieto.com>
7
 
 
8
 
Signed-off-by: Ricardo Salveti de Araujo <rsalveti@rsalveti.net>
9
 
 
10
 
diff --git a/configure.ac b/configure.ac
11
 
index 388fae2..34311cf 100644
12
 
--- a/configure.ac
13
 
+++ b/configure.ac
14
 
@@ -783,6 +783,21 @@ AC_SUBST(HAVE_ALSA)
15
 
 AM_CONDITIONAL([HAVE_ALSA], [test "x$HAVE_ALSA" = x1])
 
1
Index: pulseaudio-5.0/configure.ac
 
2
===================================================================
 
3
--- pulseaudio-5.0.orig/configure.ac
 
4
+++ pulseaudio-5.0/configure.ac
 
5
@@ -794,6 +794,21 @@ AM_CONDITIONAL([HAVE_ALSA], [test "x$HAV
16
6
 AS_IF([test "x$HAVE_ALSA" = "x1"], AC_DEFINE([HAVE_ALSA], 1, [Have ALSA?]))
 
7
 AS_IF([test "x$HAVE_ALSA_UCM" = "x1"], AC_DEFINE([HAVE_ALSA_UCM], 1, [Have ALSA UCM?]))
17
8
 
18
9
+#### Android Audio HAL support (optional) ####
19
10
+
33
24
 #### EsounD support (optional) ####
34
25
 
35
26
 AC_ARG_ENABLE([esound],
36
 
@@ -1402,6 +1417,7 @@ AS_IF([test "x$HAVE_X11" = "x1"], ENABLE_X11=yes, ENABLE_X11=no)
 
27
@@ -1415,6 +1430,7 @@ AS_IF([test "x$HAVE_X11" = "x1"], ENABLE
37
28
 AS_IF([test "x$HAVE_OSS_OUTPUT" = "x1"], ENABLE_OSS_OUTPUT=yes, ENABLE_OSS_OUTPUT=no)
38
29
 AS_IF([test "x$HAVE_OSS_WRAPPER" = "x1"], ENABLE_OSS_WRAPPER=yes, ENABLE_OSS_WRAPPER=no)
39
30
 AS_IF([test "x$HAVE_ALSA" = "x1"], ENABLE_ALSA=yes, ENABLE_ALSA=no)
41
32
 AS_IF([test "x$HAVE_COREAUDIO" = "x1"], ENABLE_COREAUDIO=yes, ENABLE_COREAUDIO=no)
42
33
 AS_IF([test "x$HAVE_SOLARIS" = "x1"], ENABLE_SOLARIS=yes, ENABLE_SOLARIS=no)
43
34
 AS_IF([test "x$HAVE_WAVEOUT" = "x1"], ENABLE_WAVEOUT=yes, ENABLE_WAVEOUT=no)
44
 
@@ -1455,6 +1471,7 @@ echo "
 
35
@@ -1471,6 +1487,7 @@ echo "
45
36
     Enable OSS Wrapper:            ${ENABLE_OSS_WRAPPER}
46
37
     Enable EsounD:                 ${ENABLE_ESOUND}
47
38
     Enable Alsa:                   ${ENABLE_ALSA}
49
40
     Enable CoreAudio:              ${ENABLE_COREAUDIO}
50
41
     Enable Solaris:                ${ENABLE_SOLARIS}
51
42
     Enable WaveOut:                ${ENABLE_WAVEOUT}
52
 
diff --git a/src/Makefile.am b/src/Makefile.am
53
 
index b8fb4b0..174f811 100644
54
 
--- a/src/Makefile.am
55
 
+++ b/src/Makefile.am
56
 
@@ -1175,6 +1175,16 @@ modlibexec_LTLIBRARIES += \
 
43
Index: pulseaudio-5.0/src/Makefile.am
 
44
===================================================================
 
45
--- pulseaudio-5.0.orig/src/Makefile.am
 
46
+++ pulseaudio-5.0/src/Makefile.am
 
47
@@ -1196,6 +1196,16 @@ modlibexec_LTLIBRARIES += \
57
48
                module-alsa-source.la \
58
49
                module-alsa-card.la
59
50
 
70
61
 dist_alsaprofilesets_DATA = \
71
62
                modules/alsa/mixer/profile-sets/default.conf \
72
63
                modules/alsa/mixer/profile-sets/extra-hdmi.conf \
73
 
@@ -1424,6 +1434,13 @@ SYMDEF_FILES = \
 
64
@@ -1459,6 +1469,13 @@ SYMDEF_FILES = \
74
65
                module-filter-apply-symdef.h \
75
66
                module-filter-heuristics-symdef.h
76
67
 
84
75
 if HAVE_ESOUND
85
76
 SYMDEF_FILES += \
86
77
                module-esound-protocol-tcp-symdef.h \
87
 
@@ -1725,6 +1742,44 @@ libalsa_util_la_LIBADD += $(DBUS_LIBS)
 
78
@@ -1768,6 +1785,44 @@ libalsa_util_la_LIBADD += $(DBUS_LIBS)
88
79
 libalsa_util_la_CFLAGS += $(DBUS_CFLAGS)
89
80
 endif
90
81
 
129
120
 module_alsa_sink_la_SOURCES = modules/alsa/module-alsa-sink.c
130
121
 module_alsa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
131
122
 module_alsa_sink_la_LIBADD = $(MODULE_LIBADD) $(ASOUNDLIB_LIBS) libalsa-util.la
132
 
diff --git a/src/modules/droid/droid-extcon.c b/src/modules/droid/droid-extcon.c
133
 
new file mode 100644
134
 
index 0000000..088afb3
 
123
Index: pulseaudio-5.0/src/modules/droid/droid-extcon.c
 
124
===================================================================
135
125
--- /dev/null
136
 
+++ b/src/modules/droid/droid-extcon.c
 
126
+++ pulseaudio-5.0/src/modules/droid/droid-extcon.c
137
127
@@ -0,0 +1,269 @@
138
128
+/***
139
129
+  This file is part of PulseAudio.
259
249
+    pa_log_debug("Value of switch %s is now %d.", as->name, as->current_value);
260
250
+
261
251
+    PA_HASHMAP_FOREACH(p, u->card->ports, state) {
262
 
+        if (p->is_output) {
 
252
+        if (p->direction == PA_DIRECTION_OUTPUT) {
263
253
+            if (!strcmp(p->name, "output-wired_headset"))
264
254
+                pa_device_port_set_available(p, hsmic_avail(as->current_value));
265
255
+            if (!strcmp(p->name, "output-wired_headphone"))
266
256
+                pa_device_port_set_available(p, hponly_avail(as->current_value));
267
257
+        }
268
 
+        if (p->is_input) {
 
258
+        if (p->direction == PA_DIRECTION_INPUT) {
269
259
+            if (!strcmp(p->name, "input-wired_headset"))
270
260
+                pa_device_port_set_available(p, hsmic_avail(as->current_value));
271
261
+        }
404
394
+
405
395
+    pa_xfree(u);
406
396
+}
407
 
diff --git a/src/modules/droid/droid-extcon.h b/src/modules/droid/droid-extcon.h
408
 
new file mode 100644
409
 
index 0000000..7cb7ad2
 
397
Index: pulseaudio-5.0/src/modules/droid/droid-extcon.h
 
398
===================================================================
410
399
--- /dev/null
411
 
+++ b/src/modules/droid/droid-extcon.h
 
400
+++ pulseaudio-5.0/src/modules/droid/droid-extcon.h
412
401
@@ -0,0 +1,32 @@
413
402
+#ifndef foodroidextconhfoo
414
403
+#define foodroidextconhfoo
442
431
+void pa_droid_extcon_free(pa_droid_extcon *);
443
432
+
444
433
+#endif
445
 
diff --git a/src/modules/droid/droid-sink.c b/src/modules/droid/droid-sink.c
446
 
new file mode 100644
447
 
index 0000000..68e3cef
 
434
Index: pulseaudio-5.0/src/modules/droid/droid-sink.c
 
435
===================================================================
448
436
--- /dev/null
449
 
+++ b/src/modules/droid/droid-sink.c
 
437
+++ pulseaudio-5.0/src/modules/droid/droid-sink.c
450
438
@@ -0,0 +1,1245 @@
451
439
+/*
452
440
+ * Copyright (C) 2013 Jolla Ltd.
603
591
+    u->extra_devices &= ~devices;
604
592
+}
605
593
+
 
594
+static void parameter_free(droid_parameter_mapping *m) {
 
595
+    pa_assert(m);
 
596
+
 
597
+    pa_xfree(m->key);
 
598
+    pa_xfree(m->value);
 
599
+    pa_xfree(m);
 
600
+}
 
601
+
606
602
+static void set_fake_sco_sink_transport_property(struct userdata *u, const char *value) {
607
603
+    pa_proplist *pl;
608
604
+
1396
1392
+    u->deferred_volume = deferred_volume;
1397
1393
+    u->rtpoll = pa_rtpoll_new();
1398
1394
+    pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
1399
 
+    u->parameters = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
 
1395
+    u->parameters = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) parameter_free);
1400
1396
+    u->voice_property_key   = pa_xstrdup(pa_modargs_get_value(ma, "voice_property_key", DEFAULT_VOICE_CONTROL_PROPERTY_KEY));
1401
1397
+    u->voice_property_value = pa_xstrdup(pa_modargs_get_value(ma, "voice_property_value", DEFAULT_VOICE_CONTROL_PROPERTY_VALUE));
1402
1398
+    u->sco_fake_sink = pa_sco_fake_sink_discover(u->core, pa_modargs_get_value(ma, "sco_fake_sink", DEFAULT_SCO_FAKE_SINK));
1633
1629
+    userdata_free(u);
1634
1630
+}
1635
1631
+
1636
 
+static void parameter_free(droid_parameter_mapping *m) {
1637
 
+    pa_assert(m);
1638
 
+
1639
 
+    pa_xfree(m->key);
1640
 
+    pa_xfree(m->value);
1641
 
+    pa_xfree(m);
1642
 
+}
1643
 
+
1644
1632
+static void userdata_free(struct userdata *u) {
1645
1633
+
1646
1634
+    if (u->sink)
1669
1657
+        pa_sink_unref(u->sink);
1670
1658
+
1671
1659
+    if (u->parameters)
1672
 
+        pa_hashmap_free(u->parameters, (pa_free_cb_t) parameter_free);
 
1660
+        pa_hashmap_free(u->parameters);
1673
1661
+
1674
1662
+    if (u->hw_module && u->stream_out) {
1675
1663
+        pa_droid_hw_module_lock(u->hw_module);
1693
1681
+
1694
1682
+    pa_xfree(u);
1695
1683
+}
1696
 
diff --git a/src/modules/droid/droid-sink.h b/src/modules/droid/droid-sink.h
1697
 
new file mode 100644
1698
 
index 0000000..a3483a9
 
1684
Index: pulseaudio-5.0/src/modules/droid/droid-sink.h
 
1685
===================================================================
1699
1686
--- /dev/null
1700
 
+++ b/src/modules/droid/droid-sink.h
 
1687
+++ pulseaudio-5.0/src/modules/droid/droid-sink.h
1701
1688
@@ -0,0 +1,57 @@
1702
1689
+#ifndef foodroidsinkfoo
1703
1690
+#define foodroidsinkfoo
1756
1743
+void pa_droid_sink_set_voice_control(pa_sink* sink, bool enable);
1757
1744
+
1758
1745
+#endif
1759
 
diff --git a/src/modules/droid/droid-source.c b/src/modules/droid/droid-source.c
1760
 
new file mode 100644
1761
 
index 0000000..1fbea89
 
1746
Index: pulseaudio-5.0/src/modules/droid/droid-source.c
 
1747
===================================================================
1762
1748
--- /dev/null
1763
 
+++ b/src/modules/droid/droid-source.c
 
1749
+++ pulseaudio-5.0/src/modules/droid/droid-source.c
1764
1750
@@ -0,0 +1,667 @@
1765
1751
+/*
1766
1752
+ * Copyright (C) 2013 Jolla Ltd.
2429
2415
+
2430
2416
+    pa_xfree(u);
2431
2417
+}
2432
 
diff --git a/src/modules/droid/droid-source.h b/src/modules/droid/droid-source.h
2433
 
new file mode 100644
2434
 
index 0000000..342af00
 
2418
Index: pulseaudio-5.0/src/modules/droid/droid-source.h
 
2419
===================================================================
2435
2420
--- /dev/null
2436
 
+++ b/src/modules/droid/droid-source.h
 
2421
+++ pulseaudio-5.0/src/modules/droid/droid-source.h
2437
2422
@@ -0,0 +1,56 @@
2438
2423
+#ifndef foodroidsourcefoo
2439
2424
+#define foodroidsourcefoo
2491
2476
+void pa_droid_source_set_routing(pa_source *s, bool enabled);
2492
2477
+
2493
2478
+#endif
2494
 
diff --git a/src/modules/droid/droid-util-41qc.h b/src/modules/droid/droid-util-41qc.h
2495
 
new file mode 100644
2496
 
index 0000000..a791565
 
2479
Index: pulseaudio-5.0/src/modules/droid/droid-util-41qc.h
 
2480
===================================================================
2497
2481
--- /dev/null
2498
 
+++ b/src/modules/droid/droid-util-41qc.h
 
2482
+++ pulseaudio-5.0/src/modules/droid/droid-util-41qc.h
2499
2483
@@ -0,0 +1,274 @@
2500
2484
+/*
2501
2485
+ * Copyright (C) 2013 Jolla Ltd.
2771
2755
+#undef STRING_ENTRY
2772
2756
+
2773
2757
+#endif
2774
 
diff --git a/src/modules/droid/droid-util-42.h b/src/modules/droid/droid-util-42.h
2775
 
new file mode 100644
2776
 
index 0000000..3f1759b
 
2758
Index: pulseaudio-5.0/src/modules/droid/droid-util-42.h
 
2759
===================================================================
2777
2760
--- /dev/null
2778
 
+++ b/src/modules/droid/droid-util-42.h
 
2761
+++ pulseaudio-5.0/src/modules/droid/droid-util-42.h
2779
2762
@@ -0,0 +1,286 @@
2780
2763
+/*
2781
2764
+ * Copyright (C) 2013 Jolla Ltd.
3063
3046
+
3064
3047
+
3065
3048
+#endif
3066
 
diff --git a/src/modules/droid/droid-util.c b/src/modules/droid/droid-util.c
3067
 
new file mode 100644
3068
 
index 0000000..185bd23
 
3049
Index: pulseaudio-5.0/src/modules/droid/droid-util.c
 
3050
===================================================================
3069
3051
--- /dev/null
3070
 
+++ b/src/modules/droid/droid-util.c
3071
 
@@ -0,0 +1,1186 @@
 
3052
+++ pulseaudio-5.0/src/modules/droid/droid-util.c
 
3053
@@ -0,0 +1,1189 @@
3072
3054
+/*
3073
3055
+ * Copyright (C) 2013 Jolla Ltd.
3074
3056
+ *
3243
3225
+    return str;
3244
3226
+}
3245
3227
+
 
3228
+static void droid_port_free(pa_droid_port *p) {
 
3229
+    pa_assert(p);
 
3230
+
 
3231
+    pa_xfree(p->name);
 
3232
+    pa_xfree(p->description);
 
3233
+    pa_xfree(p);
 
3234
+}
3246
3235
+
3247
3236
+/* Output device */
3248
3237
+bool pa_string_convert_output_device_num_to_str(audio_devices_t value, const char **to_str) {
3727
3716
+
3728
3717
+    ps = pa_xnew0(pa_droid_profile_set, 1);
3729
3718
+    ps->config = module->config;
3730
 
+    ps->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
3731
 
+    ps->output_mappings = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
3732
 
+    ps->input_mappings = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
3733
 
+    ps->all_ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
 
3719
+    ps->profiles = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) pa_droid_profile_free);
 
3720
+    ps->output_mappings = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) pa_droid_mapping_free);
 
3721
+    ps->input_mappings = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) pa_droid_mapping_free);
 
3722
+    ps->all_ports = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) droid_port_free);
3734
3723
+
3735
3724
+    /* Each distinct hw module output matches one profile. If there are multiple inputs
3736
3725
+     * combinations are made so that all possible outputs and inputs can be selected.
3767
3756
+    pa_xfree(ap);
3768
3757
+}
3769
3758
+
3770
 
+static void droid_port_free(pa_droid_port *p) {
3771
 
+    pa_assert(p);
3772
 
+
3773
 
+    pa_xfree(p->name);
3774
 
+    pa_xfree(p->description);
3775
 
+    pa_xfree(p);
3776
 
+}
3777
 
+
3778
3759
+void pa_droid_profile_set_free(pa_droid_profile_set *ps) {
3779
3760
+    pa_assert(ps);
3780
3761
+
3781
3762
+    if (ps->output_mappings)
3782
 
+        pa_hashmap_free(ps->output_mappings, (pa_free_cb_t) pa_droid_mapping_free);
 
3763
+        pa_hashmap_free(ps->output_mappings);
3783
3764
+
3784
3765
+    if (ps->input_mappings)
3785
 
+        pa_hashmap_free(ps->input_mappings, (pa_free_cb_t) pa_droid_mapping_free);
 
3766
+        pa_hashmap_free(ps->input_mappings);
3786
3767
+
3787
3768
+    if (ps->all_ports)
3788
 
+        pa_hashmap_free(ps->all_ports, (pa_free_cb_t) droid_port_free);
 
3769
+        pa_hashmap_free(ps->all_ports);
3789
3770
+
3790
3771
+    if (ps->profiles)
3791
 
+        pa_hashmap_free(ps->profiles, (pa_free_cb_t) pa_droid_profile_free);
 
3772
+        pa_hashmap_free(ps->profiles);
3792
3773
+
3793
3774
+    pa_xfree(ps);
3794
3775
+}
4027
4008
+    PA_IDXSET_FOREACH(p, am->ports, idx) {
4028
4009
+        if (!(dp = pa_hashmap_get(ports, p->name))) {
4029
4010
+            pa_log_debug("  New port %s", p->name);
4030
 
+            dp = pa_device_port_new(core, p->name, p->description, sizeof(pa_droid_port_data));
 
4011
+
 
4012
+            pa_device_port_new_data port_data;
 
4013
+            pa_device_port_new_data_init(&port_data);
 
4014
+            pa_device_port_new_data_set_name(&port_data, p->name);
 
4015
+            pa_device_port_new_data_set_description(&port_data, p->description);
 
4016
+            pa_device_port_new_data_set_direction(&port_data, p->mapping->direction);
 
4017
+            dp = pa_device_port_new(core, &port_data, sizeof(pa_droid_port_data));
 
4018
+            pa_device_port_new_data_done(&port_data);
4031
4019
+            dp->priority = p->priority;
4032
4020
+
4033
4021
+            pa_hashmap_put(ports, dp->name, dp);
4034
 
+            dp->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
 
4022
+            dp->profiles = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) pa_droid_profile_free);
4035
4023
+
4036
4024
+            data = PA_DEVICE_PORT_DATA(dp);
4037
4025
+            data->device = p->device;
4038
4026
+        } else
4039
4027
+            pa_log_debug("  Port %s from cache", p->name);
4040
4028
+
4041
 
+        dp->is_output = p->mapping->direction == PA_DIRECTION_OUTPUT;
4042
 
+        dp->is_input = p->mapping->direction == PA_DIRECTION_INPUT;
4043
 
+
4044
4029
+        /* If port/jack detection is available, start as not available by default */
4045
4030
+        dp->available = check_port_availability(p->name) ? PA_AVAILABLE_NO : PA_AVAILABLE_UNKNOWN;
4046
4031
+
4255
4240
+
4256
4241
+    pa_mutex_unlock(hw->hw_mutex);
4257
4242
+}
4258
 
diff --git a/src/modules/droid/droid-util.h b/src/modules/droid/droid-util.h
4259
 
new file mode 100644
4260
 
index 0000000..fc0ca70
 
4243
Index: pulseaudio-5.0/src/modules/droid/droid-util.h
 
4244
===================================================================
4261
4245
--- /dev/null
4262
 
+++ b/src/modules/droid/droid-util.h
 
4246
+++ pulseaudio-5.0/src/modules/droid/droid-util.h
4263
4247
@@ -0,0 +1,253 @@
4264
4248
+#ifndef foodroidutilfoo
4265
4249
+#define foodroidutilfoo
4514
4498
+bool pa_droid_input_port_name(audio_devices_t value, const char **to_str);
4515
4499
+
4516
4500
+#endif
4517
 
diff --git a/src/modules/droid/module-droid-card.c b/src/modules/droid/module-droid-card.c
4518
 
new file mode 100644
4519
 
index 0000000..82a04ce
 
4501
Index: pulseaudio-5.0/src/modules/droid/module-droid-card.c
 
4502
===================================================================
4520
4503
--- /dev/null
4521
 
+++ b/src/modules/droid/module-droid-card.c
 
4504
+++ pulseaudio-5.0/src/modules/droid/module-droid-card.c
4522
4505
@@ -0,0 +1,632 @@
4523
4506
+/*
4524
4507
+ * Copyright (C) 2013 Jolla Ltd.
5152
5135
+        pa_xfree(u);
5153
5136
+    }
5154
5137
+}
5155
 
diff --git a/src/modules/droid/module-droid-sink.c b/src/modules/droid/module-droid-sink.c
5156
 
new file mode 100644
5157
 
index 0000000..720749c
 
5138
Index: pulseaudio-5.0/src/modules/droid/module-droid-sink.c
 
5139
===================================================================
5158
5140
--- /dev/null
5159
 
+++ b/src/modules/droid/module-droid-sink.c
 
5141
+++ pulseaudio-5.0/src/modules/droid/module-droid-sink.c
5160
5142
@@ -0,0 +1,101 @@
5161
5143
+/*
5162
5144
+ * Copyright (C) 2013 Jolla Ltd.
5259
5241
+
5260
5242
+    return -1;
5261
5243
+}
5262
 
diff --git a/src/modules/droid/module-droid-source.c b/src/modules/droid/module-droid-source.c
5263
 
new file mode 100644
5264
 
index 0000000..161d774
 
5244
Index: pulseaudio-5.0/src/modules/droid/module-droid-source.c
 
5245
===================================================================
5265
5246
--- /dev/null
5266
 
+++ b/src/modules/droid/module-droid-source.c
 
5247
+++ pulseaudio-5.0/src/modules/droid/module-droid-source.c
5267
5248
@@ -0,0 +1,95 @@
5268
5249
+/*
5269
5250
+ * Copyright (C) 2013 Jolla Ltd.