[RFT] Major snd_hda rewrite

Alexander Motin mav at FreeBSD.org
Sat Jan 21 14:29:02 UTC 2012

On 01/21/12 15:17, Mickaël Maillot wrote:
> So i tried DTS-HDMA and Dolby TrueHD without success.
> when i play DTS-HDMA, my receiver display DTS-HR and seams to play dts
> core with lots of interruptions.
> and when i play TrueHD, my receiver display TrueHD but doesn't play
> anything.

 From that description I can conclude that you are passing through 
compressed DTS-HD and TrueHD streams to the receiver. What are the 
bitrates of streams you are playing? It looks like your receiver doesn't 
receives all data. If I understand right, to transfer with compressed 
bitrates above 6.144Mbps special High Bit Rate mode should be activated 
in CODEC, when data stream occupies all 8 HDMI channels instead of 2. I 
haven't implemented this feature yet as my receiver doesn't support such 
HD formats.

I'll try to make a patch for it a bit later and send you to try. Until 
that time, is it possible to make your xbmc to decode those HD streams 
into different number of uncompressed LPCM channels to play it that way? 
It would be interesting to test 6.0, 6.1, 7.0 and 7.1 LPCM 
configurations with your receiver. Or at least normal definition 7.1 
playback would be interesting to test (you can just set vchanformat to 
s16le:7.1 or s32le:7.1 and play anything).

> and sysctl show:
> dev.pcm.4.play.vchanmode: passthrough
> dev.pcm.4.play.vchanrate: 192000
> dev.pcm.4.play.vchanformat: ac3:2.0
> i tried without vchan with same results.
> i can't set more than 2 channels for my hdmi output (dsp4), i want to
> set 8 channels like alsa does.

What do you mean that you can't set more then 2 channels? I've never 
tried to set ac3 format with more then 2 channels, but s16le:7.1 and 
s32le:7.1 should work fine. At least s16le:5.1 and s32le:5.1 are working 
perfectly for me. For HDA 24bit samples stored in memory as 32bit, so 
setting s24le format only cause extra 24->32bit conversion.

> i never show things like PCMDIR_...: Stream setup.... in my messages, so
> may be i use oss wrongly.

They are printed only when hw.snd.verbose set to 4.

> you can find the source code of xbmc used to play losseless file here:
> https://github.com/Fneufneu/xbmc/blob/freebsdAE/xbmc/cores/AudioEngine/Sinks/AESinkOSS.cpp
> and my dmesg: http://fneufn.eu/freebsd/dmesg.verb.htpc.20120121.txt

Alexander Motin

More information about the freebsd-current mailing list