On 10 Jun 2003, Ray Heasman wrote:
> Hi,
>
> The ALSA YMF-754 SPDIF support is incomplete in a way that ensures that
> AC-3 streams can not be decoded by standards compliant receivers. Very
> forgiving receivers will render the AC-3, but they are being kind.
> According to the standard, they should mute.
>
> FYI, I am using 0.9.4 versions of everything.
>
> Here is the problem:
>
> Broadly speaking, a SPDIF stream has two places to carry control
> information: in the Channel Status Block, and within each sample word (a
> 32-bit word).
>
> For our purposes, we only care about the "Valid" bit in each sample
> word, and the "Valid/Non-Audio" bit in the Channel Status Block.
>
> For ordinary PCM data, each block must be marked as valid audio data, as
> must each sample.
>
> For IEC61937 data (such as AC-3 or DTS), each block must be marked as
> "Invalid" (ie. Non-Audio) data, AND each and every single sample word
> must be marked as "Invalid" data too.
>
> The problem is that ALSA allows you to override the Channel Status Block
> "Invalid" bit, but then marks each sample word as being valid. Compliant
> receivers ignore all "Valid"-marked samples in a IEC61937 stream.
> Similarly, they ignore all "Invalid"-marked samples in a PCM stream.
>
> Here are the tests I ran to prove this.
>
> First I ripped a few minutes of AC-3 data off a DVD, and put it in
> gits.ac3.
>
> 1) First, check the ripped stream:
>
> Expect: Expect to hear 2 channel mixed down audio.
>
> maze foo # ac3dec gits.ac3
> 5.1 Mode 48.0 KHz 384 kbps Complete Main Audio Service
> Using PCM device 'default'
>
> Result:
>
> Normal (mixed down 2-channel) audio is heard. The stream is proven good.
> The stream is playing through a Sony AVR, using the SPDIF port, so we
> know the SPDIF port is working too, at least in 48KHz PCM mode.
>
> 2) Next, attempt to play the ripped stream as a raw SPDIF stream.
>
> Expect: Expect to hear 5.1 sound in all its glory.
>
> maze foo # ac3dec -C gits.ac3
> Using PCM device 'plug:iec958:{AES0 0x2 AES1 0x82 AES2 0x0 AES3 0x2}'
> AC3 Stream 48.0 KHz 384 kbps
>
> Result: <deathly hush>
>
> Ok. The AVR is not happy. It indicates the presence of a stream, but
> refuses to recognise it. The stream is neither PCM nor anything else,
> according to the AVR.
>
> 3) Play the stream again, but override the Channel Status Valid bit,
> telling the receiver that it is being sent PCM data.
>
> Expect: Expect to hear nothing, as each sample should be marked
> "Invalid". Output should mute.
>
> maze foo # ac3dec -C gits.ac3 -D'plug:iec958:{AES0 0x00 AES1 0x82 AES2
> 0x0 AES3 0x2}'Using PCM device 'plug:iec958:{AES0 0x00 AES1 0x82 AES2
> 0x0 AES3 0x2}'
> AC3 Stream 48.0 KHz 384 kbps
>
> Result: <A loud continuous clicking is heard - I am hearing the
> compressed data rendered as if it were PCM. The receiver reports a 48kHz
> PCM signal>
>
> This shows the problem: If I tell the AVR the Channel is valid, but each
> sample is set to "Invalid", it will ignore the invalid samples. It plays
> the samples, thus the samples are being marked as valid.
>
> CONCLUSION:
>
> Sample words in IEC61937 streams are being marked "Valid". This is
> wrong.
>
> --
>
> I started looking through the code for the YMF drivers, but I am
> horribly lost. Is this easy to fix?
No. The YMF754 datasheet does not contain information how to handle the
validity bit in subframes. Also, the a_52.pdf (AC3 standard description -
can be downloaded from www.dolby.com or at ALSA FTP site) says that the
interpretation of this bit is optional:
=============
4.3 Validity flag
The validity flag in time slot 28 may be used to indicate individual
16-bit words of data which are thought to be in error. If the data source
believes a particular 16-bit word contained in a sub-frame contains an
error, the validity bit may be set to 1 . Otherwise this bit shall be set
to a 0 which indicates valid data. The use of this bit by receivers is
optional.
==============
I am not sure if ymfpci driver is not broken for raw S/PDIF now, but last
time I tried the code, it worked well with Sony receiver.
Jaroslav
-----
Jaroslav Kysela <[EMAIL PROTECTED]>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs
-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The best
thread debugger on the planet. Designed with thread debugging features
you've never dreamed of, try TotalView 6 free at www.etnus.com.
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel