On Thu, 2014-11-20 at 10:58 +0100, Takashi Iwai wrote:
At Wed, 19 Nov 2014 21:50:30 +0200, Jussi Laako wrote:
Hi,
Sorry for catching up late on this patch...
On 10.09.2014 10:00, Jurgen Kramer wrote:
- FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"),
There is bug in this patch. The spec for these formats is, as above says "little endian, oldest bits in MSB", however with the iFi iDSD Nano this doesn't seem to be the case. Oldest bits are in MSB of the byte, but byte order is big endian.
Is it a bug of spec, or a bug of device? In the latter case, we'd need to introduce DSD_U32_BE format and apply a quirk, for example.
DSD is a bit odd wrt LE/BE. Both formats are allowed and used. The device (XMOS based/Marantz+Denon) want the following order of samples: L1 L2 L3 L4 R1 R2 R3 R4. Where Lx/Rx are 8-bit DSD samples, L1-L4 are packed to 1 32-bit sample.
I do think real BE will not work.
Jurgen
Takashi
IOW, following alone will produce incorrect output:
size_t N = 32; uint32_t x = 0; while (N--) { x <<= 1; x |= nextbit; }
But if you add __builtin_byteswap32(x) then the output is correct.
I guess this has not been caught because of just memcpy()'ing the oldest-bit-in-MSB byte stream to the sample buffer instead of constructing the words...
Best regards,
- Jussi
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel