summaryrefslogtreecommitdiffstats
path: root/meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch')
-rw-r--r--meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch340
1 files changed, 0 insertions, 340 deletions
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch
deleted file mode 100644
index 5808d4126d..0000000000
--- a/meta/recipes-multimedia/pulseaudio/pulseaudio-0.9.15/fallback.patch
+++ /dev/null
@@ -1,340 +0,0 @@
1From: Lennart Poettering <lennart@poettering.net>
2Date: Tue, 28 Apr 2009 23:58:18 +0000 (+0200)
3Subject: alsa: allow configuration of fallback device strings in profiles
4X-Git-Url: http://git.0pointer.de/?p=pulseaudio.git;a=commitdiff_plain;h=d8710711fb0c74b4ad83ac99c2501218155b502b
5
6alsa: allow configuration of fallback device strings in profiles
7
8This has the benefit that we can properly support ALSA devices where
9only the raw 'hw' device exists but no 'front' although it's a proper
102ch stereo device.
11---
12
13Upstream-Status: Backport
14
15diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
16index 18d6880..a3a0450 100644
17--- a/src/modules/alsa/alsa-util.c
18+++ b/src/modules/alsa/alsa-util.c
19@@ -528,7 +528,7 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
20
21 static const struct pa_alsa_profile_info device_table[] = {
22 {{ 1, { PA_CHANNEL_POSITION_MONO }},
23- "hw",
24+ "hw", NULL,
25 N_("Analog Mono"),
26 "analog-mono",
27 1,
28@@ -536,7 +536,7 @@ static const struct pa_alsa_profile_info device_table[] = {
29 "Capture", "Mic" },
30
31 {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
32- "front",
33+ "front", "hw",
34 N_("Analog Stereo"),
35 "analog-stereo",
36 10,
37@@ -544,7 +544,7 @@ static const struct pa_alsa_profile_info device_table[] = {
38 "Capture", "Mic" },
39
40 {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
41- "iec958",
42+ "iec958", NULL,
43 N_("Digital Stereo (IEC958)"),
44 "iec958-stereo",
45 5,
46@@ -552,7 +552,7 @@ static const struct pa_alsa_profile_info device_table[] = {
47 "IEC958 In", NULL },
48
49 {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
50- "hdmi",
51+ "hdmi", NULL,
52 N_("Digital Stereo (HDMI)"),
53 "hdmi-stereo",
54 4,
55@@ -561,7 +561,7 @@ static const struct pa_alsa_profile_info device_table[] = {
56
57 {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
58 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
59- "surround40",
60+ "surround40", NULL,
61 N_("Analog Surround 4.0"),
62 "analog-surround-40",
63 7,
64@@ -570,7 +570,7 @@ static const struct pa_alsa_profile_info device_table[] = {
65
66 {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
67 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
68- "a52",
69+ "a52", NULL,
70 N_("Digital Surround 4.0 (IEC958/AC3)"),
71 "iec958-ac3-surround-40",
72 2,
73@@ -580,7 +580,7 @@ static const struct pa_alsa_profile_info device_table[] = {
74 {{ 5, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
75 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
76 PA_CHANNEL_POSITION_LFE }},
77- "surround41",
78+ "surround41", NULL,
79 N_("Analog Surround 4.1"),
80 "analog-surround-41",
81 7,
82@@ -590,7 +590,7 @@ static const struct pa_alsa_profile_info device_table[] = {
83 {{ 5, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
84 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
85 PA_CHANNEL_POSITION_CENTER }},
86- "surround50",
87+ "surround50", NULL,
88 N_("Analog Surround 5.0"),
89 "analog-surround-50",
90 7,
91@@ -600,7 +600,7 @@ static const struct pa_alsa_profile_info device_table[] = {
92 {{ 6, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
93 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
94 PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE }},
95- "surround51",
96+ "surround51", NULL,
97 N_("Analog Surround 5.1"),
98 "analog-surround-51",
99 8,
100@@ -610,7 +610,7 @@ static const struct pa_alsa_profile_info device_table[] = {
101 {{ 6, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
102 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
103 PA_CHANNEL_POSITION_FRONT_CENTER, PA_CHANNEL_POSITION_LFE}},
104- "a52",
105+ "a52", NULL,
106 N_("Digital Surround 5.1 (IEC958/AC3)"),
107 "iec958-ac3-surround-51",
108 3,
109@@ -621,16 +621,72 @@ static const struct pa_alsa_profile_info device_table[] = {
110 PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
111 PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE,
112 PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT }},
113- "surround71",
114+ "surround71", NULL,
115 N_("Analog Surround 7.1"),
116 "analog-surround-71",
117 7,
118 "Master", "PCM",
119 "Capture", "Mic" },
120
121- {{ 0, { 0 }}, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL }
122+ {{ 0, { 0 }}, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL }
123 };
124
125+static snd_pcm_t *open_by_device_string_with_fallback(
126+ const char *prefix,
127+ const char *prefix_fallback,
128+ const char *dev_id,
129+ char **dev,
130+ pa_sample_spec *ss,
131+ pa_channel_map* map,
132+ int mode,
133+ uint32_t *nfrags,
134+ snd_pcm_uframes_t *period_size,
135+ snd_pcm_uframes_t tsched_size,
136+ pa_bool_t *use_mmap,
137+ pa_bool_t *use_tsched,
138+ pa_bool_t require_exact_channel_number) {
139+
140+ snd_pcm_t *pcm_handle;
141+ char *d;
142+
143+ d = pa_sprintf_malloc("%s:%s", prefix, dev_id);
144+
145+ pcm_handle = pa_alsa_open_by_device_string(
146+ d,
147+ dev,
148+ ss,
149+ map,
150+ mode,
151+ nfrags,
152+ period_size,
153+ tsched_size,
154+ use_mmap,
155+ use_tsched,
156+ require_exact_channel_number);
157+ pa_xfree(d);
158+
159+ if (!pcm_handle && prefix_fallback) {
160+
161+ d = pa_sprintf_malloc("%s:%s", prefix_fallback, dev_id);
162+
163+ pcm_handle = pa_alsa_open_by_device_string(
164+ d,
165+ dev,
166+ ss,
167+ map,
168+ mode,
169+ nfrags,
170+ period_size,
171+ tsched_size,
172+ use_mmap,
173+ use_tsched,
174+ require_exact_channel_number);
175+ pa_xfree(d);
176+ }
177+
178+ return pcm_handle;
179+}
180+
181 snd_pcm_t *pa_alsa_open_by_device_id_auto(
182 const char *dev_id,
183 char **dev,
184@@ -671,14 +727,14 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
185
186 pa_log_debug("Checking for %s (%s)", device_table[i].name, device_table[i].alsa_name);
187
188- d = pa_sprintf_malloc("%s:%s", device_table[i].alsa_name, dev_id);
189-
190 try_ss.channels = device_table[i].map.channels;
191 try_ss.rate = ss->rate;
192 try_ss.format = ss->format;
193
194- pcm_handle = pa_alsa_open_by_device_string(
195- d,
196+ pcm_handle = open_by_device_string_with_fallback(
197+ device_table[i].alsa_name,
198+ device_table[i].alsa_name_fallback,
199+ dev_id,
200 dev,
201 &try_ss,
202 map,
203@@ -690,8 +746,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
204 use_tsched,
205 TRUE);
206
207- pa_xfree(d);
208-
209 if (pcm_handle) {
210
211 *ss = try_ss;
212@@ -703,6 +757,7 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
213
214 return pcm_handle;
215 }
216+
217 }
218
219 if (direction > 0) {
220@@ -775,7 +830,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_profile(
221 pa_bool_t *use_tsched,
222 const pa_alsa_profile_info *profile) {
223
224- char *d;
225 snd_pcm_t *pcm_handle;
226 pa_sample_spec try_ss;
227
228@@ -787,14 +841,14 @@ snd_pcm_t *pa_alsa_open_by_device_id_profile(
229 pa_assert(period_size);
230 pa_assert(profile);
231
232- d = pa_sprintf_malloc("%s:%s", profile->alsa_name, dev_id);
233-
234 try_ss.channels = profile->map.channels;
235 try_ss.rate = ss->rate;
236 try_ss.format = ss->format;
237
238- pcm_handle = pa_alsa_open_by_device_string(
239- d,
240+ pcm_handle = open_by_device_string_with_fallback(
241+ profile->alsa_name,
242+ profile->alsa_name_fallback,
243+ dev_id,
244 dev,
245 &try_ss,
246 map,
247@@ -806,8 +860,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_profile(
248 use_tsched,
249 TRUE);
250
251- pa_xfree(d);
252-
253 if (!pcm_handle)
254 return NULL;
255
256@@ -860,6 +912,8 @@ snd_pcm_t *pa_alsa_open_by_device_string(
257 goto fail;
258 }
259
260+ pa_log_debug("Managed to open %s", d);
261+
262 if ((err = pa_alsa_set_hw_params(pcm_handle, ss, nfrags, period_size, tsched_size, use_mmap, use_tsched, require_exact_channel_number)) < 0) {
263
264 if (!reformat) {
265@@ -928,26 +982,25 @@ int pa_alsa_probe_profiles(
266 snd_pcm_t *pcm_i = NULL;
267
268 if (i->alsa_name) {
269- char *id;
270 pa_sample_spec try_ss;
271 pa_channel_map try_map;
272
273 pa_log_debug("Checking for playback on %s (%s)", i->name, i->alsa_name);
274- id = pa_sprintf_malloc("%s:%s", i->alsa_name, dev_id);
275
276 try_ss = *ss;
277 try_ss.channels = i->map.channels;
278 try_map = i->map;
279
280- pcm_i = pa_alsa_open_by_device_string(
281- id, NULL,
282+ pcm_i = open_by_device_string_with_fallback(
283+ i->alsa_name,
284+ i->alsa_name_fallback,
285+ dev_id,
286+ NULL,
287 &try_ss, &try_map,
288 SND_PCM_STREAM_PLAYBACK,
289 NULL, NULL, 0, NULL, NULL,
290 TRUE);
291
292- pa_xfree(id);
293-
294 if (!pcm_i)
295 continue;
296 }
297@@ -956,26 +1009,25 @@ int pa_alsa_probe_profiles(
298 snd_pcm_t *pcm_j = NULL;
299
300 if (j->alsa_name) {
301- char *jd;
302 pa_sample_spec try_ss;
303 pa_channel_map try_map;
304
305 pa_log_debug("Checking for capture on %s (%s)", j->name, j->alsa_name);
306- jd = pa_sprintf_malloc("%s:%s", j->alsa_name, dev_id);
307
308 try_ss = *ss;
309 try_ss.channels = j->map.channels;
310 try_map = j->map;
311
312- pcm_j = pa_alsa_open_by_device_string(
313- jd, NULL,
314+ pcm_j = open_by_device_string_with_fallback(
315+ j->alsa_name,
316+ j->alsa_name_fallback,
317+ dev_id,
318+ NULL,
319 &try_ss, &try_map,
320 SND_PCM_STREAM_CAPTURE,
321 NULL, NULL, 0, NULL, NULL,
322 TRUE);
323
324- pa_xfree(jd);
325-
326 if (!pcm_j)
327 continue;
328 }
329diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
330index 77ac8a7..4c5d336 100644
331--- a/src/modules/alsa/alsa-util.h
332+++ b/src/modules/alsa/alsa-util.h
333@@ -56,6 +56,7 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min);
334 typedef struct pa_alsa_profile_info {
335 pa_channel_map map;
336 const char *alsa_name;
337+ const char *alsa_name_fallback;
338 const char *description; /* internationalized */
339 const char *name;
340 unsigned priority;