diff options
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.patch | 340 |
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 @@ | |||
1 | From: Lennart Poettering <lennart@poettering.net> | ||
2 | Date: Tue, 28 Apr 2009 23:58:18 +0000 (+0200) | ||
3 | Subject: alsa: allow configuration of fallback device strings in profiles | ||
4 | X-Git-Url: http://git.0pointer.de/?p=pulseaudio.git;a=commitdiff_plain;h=d8710711fb0c74b4ad83ac99c2501218155b502b | ||
5 | |||
6 | alsa: allow configuration of fallback device strings in profiles | ||
7 | |||
8 | This has the benefit that we can properly support ALSA devices where | ||
9 | only the raw 'hw' device exists but no 'front' although it's a proper | ||
10 | 2ch stereo device. | ||
11 | --- | ||
12 | |||
13 | Upstream-Status: Backport | ||
14 | |||
15 | diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c | ||
16 | index 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 | } | ||
329 | diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h | ||
330 | index 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; | ||