alsa: Give compressed formats preference over PCM

This makes set_formats() put PCM formats lower down the list than
compressed formats since we negotiate by picking the first format in
this list that is also in the client-provided list of possible formats
during sink input creation.

This will be incorrect if we ever decide to do encoding in PA (for
things like AC3/DTS encoding for multichannel output over S/PDIF).
This commit is contained in:
Arun Raghavan 2011-10-04 11:05:59 +05:30
parent d71a291721
commit 4e5943b6ba

View file

@ -1534,8 +1534,20 @@ static pa_bool_t sink_set_formats(pa_sink *s, pa_idxset *formats) {
pa_idxset_free(u->formats, (pa_free2_cb_t) pa_format_info_free2, NULL); pa_idxset_free(u->formats, (pa_free2_cb_t) pa_format_info_free2, NULL);
u->formats = pa_idxset_new(NULL, NULL); u->formats = pa_idxset_new(NULL, NULL);
/* Note: the logic below won't apply if we're using software encoding.
* This is fine for now since we don't support that via the passthrough
* framework, but this must be changed if we do. */
/* First insert non-PCM formats since we prefer those. */
PA_IDXSET_FOREACH(f, formats, idx) { PA_IDXSET_FOREACH(f, formats, idx) {
pa_idxset_put(u->formats, pa_format_info_copy(f), NULL); if (!pa_format_info_is_pcm(f))
pa_idxset_put(u->formats, pa_format_info_copy(f), NULL);
}
/* Now add any PCM formats */
PA_IDXSET_FOREACH(f, formats, idx) {
if (pa_format_info_is_pcm(f))
pa_idxset_put(u->formats, pa_format_info_copy(f), NULL);
} }
return TRUE; return TRUE;