Since these formats use 8 channels, the channel map needs to be configured to 8 channels as well. --- src/pulsecore/core-format.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/pulsecore/core-format.c b/src/pulsecore/core-format.c index c3db2678a..862a74b5d 100644 --- a/src/pulsecore/core-format.c +++ b/src/pulsecore/core-format.c @@ -227,13 +227,21 @@ int pa_format_info_to_sample_spec_fake(const pa_format_info *f, pa_sample_spec * ss->format = PA_SAMPLE_S16LE; if ((f->encoding == PA_ENCODING_TRUEHD_IEC61937) || - (f->encoding == PA_ENCODING_DTSHD_IEC61937)) - ss->channels = 8; - else - ss->channels = 2; - - if (map) - pa_channel_map_init_stereo(map); + (f->encoding == PA_ENCODING_DTSHD_IEC61937)) { + ss->channels = 8; + if (map) { + /* We use the ALSA mapping, because most likely we will be using an + * ALSA sink. This doesn't really matter anyway, though, because + * the channel map doesn't affect anything with passthrough + * streams. The channel map just needs to be consistent with the + * sample spec's channel count. */ + pa_channel_map_init_auto(map, 8, PA_CHANNEL_MAP_ALSA); + } + } else { + ss->channels = 2; + if (map) + pa_channel_map_init_stereo(map); + } pa_return_val_if_fail(pa_format_info_get_prop_int(f, PA_PROP_FORMAT_RATE, &rate) == 0, -PA_ERR_INVALID); ss->rate = (uint32_t) rate; -- 2.17.0