[PATCH] drm/radeon/audio: fix missing multichannel PCM SAD in some cases
Anssi Hannula
anssi.hannula at iki.fi
Fri Nov 1 00:52:52 CET 2013
01.11.2013 01:38, Rafał Miłecki kirjoitti:
> 2013/10/29 Anssi Hannula <anssi.hannula at iki.fi>:
>> Because of this, only the 2-channel SAD may be used if it appears before
>> the 8-channel SAD. Unless other SADs require otherwise, this may cause
>> the ALSA HDA driver to allow stereo playback only.
>
> I can confirm that the problem exists. My SADs (Onkyo TX-SR605):
> Format: 1 (PCM) Channels:1 Freq:0x7F (32-192) B2:0x07 (16-24b)
> Format: 1 (PCM) Channels:7 Freq:0x7F (32-192) B2:0x07 (16-24b)
> Format: 2 (AC3) Channels:7 Freq:0x07 (32-48) B2:0x50 (640?)
> Format: 7 (DTS) Channels:7 Freq:0x06 (44-48) B2:0xC0 (1536?)
> Format: 10 (EAC3) Channels:7 Freq:0x06 (44-48) B2:0x00
> Format: 11 (DTS_HD) Channels:7 Freq:0x7E (44-192) B2:0x01
> Format: 12 (MLP) Channels:7 Freq:0x1E (44-96) B2:0x00
>
> Unfortunately I get only 1 emulated SAD entry for PCM
> (/proc/asound/card1/eld#0.0):
> sad0_coding_type [0x1] LPCM
> sad0_channels 2
> sad0_rates [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
> sad0_bits [0xe0000] 16 20 24
>
> So I can not play 8 channel LPCM "legally" (without forcing player to do so).
>
>
>> Fix the code to pick the PCM SAD with the highest number of channels,
>> while merging the rate masks of PCM SADs with lower amount of channels
>> into the additional stereo rate mask byte.
>
> Does it mean that now instead of 2 real SADs:
> 1) 192kHz support for 2 channels
> 2) 96kHz support for 8 channels
> you will only get:
> 1) 192kHz support for 8 channels
> ?
No, the SADs will be separated again by the ATI/AMD ELD generator in
hda_eld.c (as the 4th byte in the register contains the PCM stereo rate
mask).
I.e., assuming a receiver with 96kHz PCM multichannel limitation, with
the patch the video-side sets the three standard SAD bytes according to
the SAD with the highest number of channels (8ch+96kHz+24b), and the
extra byte contains the or'ed rate mask of all PCM SADs (i.e. 192kHz).
The audio-side then notices that 96kHz (in SAD) != 192kHz (in extra
byte) and generates two SADs, one with 8ch 96kHz and one with 2ch 192kHz.
> Does it mean alsa may try to play 8channels audio at 192kHz and fail at this?
> That doesn't sound good, but on the other hand I can't propose
> anything better :|
Well, ALSA does not restrict that currently in any case (the ALSA HDMI
code currently only takes the maximum channels/rate/etc into account, it
doesn't check if the specific combination is allowed by SADs), but that
is mostly just because nobody has added such code yet.
> Out of curiosity, what does fglrx set in the verbs?
I don't know, though I'd expect it to put the same values that get put
there with this patch.
>> Technically there are even more cases to handle (multiple non-PCM SADs
>> of the same type, more than two PCM SADs with varying channel counts,
>> etc), but those have not actually been encountered in the field and
>> handling them would be non-trivial.
>>
>> Example affected EDID from Onkyo TX-SR674 specifying 192kHz stereo
>> support and 96kHz 8-channel support (and other 8-channel compressed
>> formats):
>
--
Anssi Hannula
More information about the dri-devel
mailing list