Kodi Community Forum
XBMC PulseAudio passthrough support (including Nvidia) is available - Printable Version

Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Development (https://forum.kodi.tv/forumdisplay.php?fid=32)
+--- Forum: Kodi Application (https://forum.kodi.tv/forumdisplay.php?fid=93)
--- Thread: XBMC PulseAudio passthrough support (including Nvidia) is available (/showthread.php?tid=96316)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18


- Forsaken - 2011-12-04

It seems that it's the intel driver that is not parsing the edid information correctly, I dumped the edid data and put it through a tool to parse it and it looks correct there, it reports all the formats and so on.


- sjongele - 2011-12-04

cbxbiker61 Wrote:No, unfortunately all of my material that is DD-5.1 is interlaced 60fps.

On a maybe related note... FFmpeg no longer exports ff_vdpau_vc1_decode_picture. So if you're building with the latest external FFmpeg, xbmc will not turn on vdpau support. In my case I patched configure.in to use a simpler detection method. I wonder if that may be your issue.

That did not help. I'll send you a PM with a download link.


- Forsaken - 2011-12-04

cbxbiker61 Wrote:OK. At this point I'm not sure what you need to do to get your receiver to offer up pass-through support. Until you can see those pass-through features show up in /proc/asound/card*/eld* it isn't going to work. You can turn off pass-through support in xbmc until you figure it out.

I upgraded the kernel to 3.2-rc4 and now I get seemingly good info in eld.

DTS-MA does not work though, regular DTS/DD works fine. I'm running without pulseaudio. I've set the custom device to "alsa:hw:0,3" and I've tried "hdmi:CARD=Intel,DEV=3" but no luck. I'm seeing errors like this:

ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2
ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0xe

Code:
monitor_present         1
eld_valid               1
monitor_name            TX-NR709
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0xb72
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 96000 176400 192000 384000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 176400 384000



- megakha - 2011-12-04

Forsaken Wrote:I upgraded the kernel to 3.2-rc4 and now I get seemingly good info in eld.

DTS-MA does not work though, regular DTS/DD works fine. I'm running without pulseaudio. I've set the custom device to "alsa:hw:0,3" and I've tried "hdmi:CARD=Intel,DEV=3" but no luck. I'm seeing errors like this:

ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2
ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0xe

Code:
monitor_present         1
eld_valid               1
monitor_name            TX-NR709
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0xb72
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 96000 176400 192000 384000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 176400 384000

For ATI cards ELD is working starting from kernel 3.2 only
Is there a way to fake ELD so that is would be usable with 3.0?
or even a master switch to put everything to passthrough regardless of sound format.


- cbxbiker61 - 2011-12-04

megakha Wrote:For ATI cards ELD is working starting from kernel 3.2 only
Is there a way to fake ELD so that is would be usable with 3.0?
or even a master switch to put everything to passthrough regardless of sound format.

No, the eld info only indicates what the alsa driver is capable of dealing with. So if it's not in the eld info, the alsa driver is going to fail anyway.

At this point my code is not using the eld info, it's just making the assumption that if you've turned pass-through on, that the hdmi device is capable of all of the high-def formats. In the future I'll probably parse the eld and filter out combinations that the eld indicates are not valid.


- cbxbiker61 - 2011-12-04

Forsaken Wrote:I upgraded the kernel to 3.2-rc4 and now I get seemingly good info in eld.

DTS-MA does not work though, regular DTS/DD works fine. I'm running without pulseaudio. I've set the custom device to "alsa:hw:0,3" and I've tried "hdmi:CARD=Intel,DEV=3" but no luck. I'm seeing errors like this:

ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2
ALSA lib conf.c:4514Sadparse_args) Unknown parameter AES0
ALSA lib conf.c:4647Sadsnd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212Sadsnd_pcm_open_noupdate) Unknown PCM hw:0,3,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0xe

Code:
monitor_present         1
eld_valid               1
monitor_name            TX-NR709
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0xb72
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 96000 176400 192000 384000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 176400 384000

Try substituting "plughw" for "hw". I think AES0 has to be interpretted by Alsa proper rather than passing it directly to the kernel driver.


- eternalsword - 2011-12-05

After upgrading to pulse1.1 and applying your latest updates, I noticed I had no option for the HDMI 7.1 and was only getting LPCM data across to my sony amp. I checked the eld and noticed it was only LPCM, so I disabled TV+AMP and just set it to AMP, so now the eld is correct, but still no HDMI 7.1 option. I checked pavucontrol and noticed had no ability to set profiles on the card, which I have found out is due to me not using pulse's hardware detect, but putting in my card number manually. Here's the problem. If I don't do it manually, I get no sound because pulse chooses the wrong device for the card. From aplay -L, the correct device is hdmi:CARD=NVidia_1,DEV=3, but pulse wants to use device string 2. Also weird, I tried using hw:2,3 and got nothing. only hw:2,9 has ever worked. Any ideas?


- eternalsword - 2011-12-05

Here is the current eld info.

Code:
cat /proc/asound/card2/eld\#3.0            
monitor_present        1
eld_valid        1
monitor_name        SONY AVAMP
  
connection_type        HDMI
eld_version        [0x2] CEA-861D or below
edid_version        [0x3] CEA-861-B, C or D
manufacture_id        0xd94d
product_id        0x2702
port_id            0x20000
support_hdcp        0
support_ai        0
audio_sync_delay    0
speakers        [0x5f] FL/FR LFE FC RL/RR RC RLC/RRC
sad_count        8
sad0_coding_type    [0x1] LPCM
sad0_channels        2
sad0_rates        [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad0_bits        [0xe0000] 16 20 24
sad1_coding_type    [0x1] LPCM
sad1_channels        6
sad1_rates        [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad1_bits        [0xe0000] 16 20 24
sad2_coding_type    [0x1] LPCM
sad2_channels        8
sad2_rates        [0x1ee0] 32000 44100 48000 96000 176400 192000 384000
sad2_bits        [0xe0000] 16 20 24
sad3_coding_type    [0x2] AC-3
sad3_channels        6
sad3_rates        [0xe0] 32000 44100 48000
sad3_max_bitrate    680000
sad4_coding_type    [0x7] DTS
sad4_channels        6
sad4_rates        [0x6e0] 32000 44100 48000 96000 176400
sad4_max_bitrate    1536000
sad5_coding_type    [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels        8
sad5_rates        [0xc0] 44100 48000
sad6_coding_type    [0xc] MLP (Dolby TrueHD)
sad6_channels        8
sad6_rates        [0x1480] 48000 176400 384000
sad7_coding_type    [0xb] DTS-HD
sad7_channels        8
sad7_rates        [0x1ec0] 44100 48000 96000 176400 192000 384000



- cbxbiker61 - 2011-12-05

eternalsword Wrote:After upgrading to pulse1.1 and applying your latest updates, I noticed I had no option for the HDMI 7.1 and was only getting LPCM data across to my sony amp. I checked the eld and noticed it was only LPCM, so I disabled TV+AMP and just set it to AMP, so now the eld is correct, but still no HDMI 7.1 option. I checked pavucontrol and noticed had no ability to set profiles on the card, which I have found out is due to me not using pulse's hardware detect, but putting in my card number manually. Here's the problem. If I don't do it manually, I get no sound because pulse chooses the wrong device for the card. From aplay -L, the correct device is hdmi:CARD=NVidia_1,DEV=3, but pulse wants to use device string 2. Also weird, I tried using hw:2,3 and got nothing. only hw:2,9 has ever worked. Any ideas?

Make sure you apply the patch mentioned earlier in the thread for the hdmi 7.1.

As for pulseaudio and nvidia hdmi I found that using a probe mask works well for me. My probe mask allows my internal audio card to work with my nvidia card. No doubt you'll need to use different parameters than me. There's plenty of info on the web for the magic probe_mask values for Nvidia.

Here's mine:
cat /etc/modprobe.d/snd_hda_intel.conf
Code:
options snd-hda-intel probe_mask=-1,0xa



- eternalsword - 2011-12-05

after digging around some more, I figured out that my card has 4 valid options hw:2,3 hw:2,7 hw:2,8 and hw:2,9 (by valid I mean speaker-test doesn't crap out on them). However the first three provide no sound. From your last post, I'm assuming the probe-mask will filter those out. Will give that a try.

In the mean time, I found this bug: https://bugzilla.redhat.com/show_bug.cgi?id=727915 and figured out if I hard-code the hdmi-surround-71 profile to hdmi:2,3 everything works. Will report back if I have any luck with the probe mask, but in case anyone else out there is running an nvidia gtx590, this is my solution at this point in time.


- eternalsword - 2011-12-05

the probe mask did work. Thanks for the tip. There's a good post over at http://ubuntuforums.org/showpost.php?p=10465858&postcount=21 that explains how to calculate the mask. Basically run aplay -l and look at the card numbers. The probe mask is a comma separated list starting from card 0 and going up. a mask of -1 tells it to not mask it. To find what mask you need, check the eld files. There should be four of them, but you only need to look for active ones. The numbers of the active eld files added together will tell you the mask to use. eld#0 = 0x1, eld#1 = 0x2, eld#2 = 0x4, and eld#3 = 0x8. So in my case I have three cards from aplay. card 0 is the onboard, card 1 is NVidia inactive and card 2 is NVidia active. My active eld is eld#3, so I set my mask to probe_mask=-1,0x8,0x8 and everything is working great. I'm assuming cbxbiker61 has 2 active eld files #1 and #3, so 8+2 = 10 which in hex is 0xa. I could be completely off with regards to the active eld files, but that's how it worked out for me.


- cbxbiker61 - 2011-12-05

sjongele Wrote:50fps and 60fps material work fine (as far as I have seen). 25fps material fails pretty consistently; I'm using DVD ISOs to test this. Do you have some 25fps material?

I've just committed a fix for this in my xbmc repo. It seems that the VOB's are starting with an invalid audio frame which my code didn't allow for. Specifically the sample rate was being set to 0 which was causing xbmc to lockup.

I might suggest to you to use makemkv to put those DVD ISO's into mkv files. I'm pretty sure that would eliminate the invalid frame problem at the beginning of a new VOB. Makemkv is pretty awesome, free for dvd only use, nominal charge to get blu-ray support.


- eternalsword - 2011-12-05

I spoke too soon about probe_mask fixing all of the problems. While pulse worked fine, xbmc was not connecting to the right device. I'm guessing it was trying the inactive NVidia card which happens to come first (even though this card has profile off). I'm not sure if I can mask that card out completely. I'll try a mask of -1,0x0,0x8 next and see if that is the remedy. For now I'll just hard-code the profile.


- megakha - 2011-12-05

cbxbiker61 Wrote:No, the eld info only indicates what the alsa driver is capable of dealing with. So if it's not in the eld info, the alsa driver is going to fail anyway.

At this point my code is not using the eld info, it's just making the assumption that if you've turned pass-through on, that the hdmi device is capable of all of the high-def formats. In the future I'll probably parse the eld and filter out combinations that the eld indicates are not valid.

Well, aplay streams multichannel audio (DTS, AC-3, ..., etc.) correctly through HDMI to my receiver. Meaning that alsa works correctly. XMBC passes movies soundtracks correctly as well. It is just multichannel music I have trouble with. Sad "IsPassthrough - false" always in log.

ATI HD63xx (E350) => Onkyo 808.


- sjongele - 2011-12-05

cbxbiker61 Wrote:I've just committed a fix for this in my xbmc repo. It seems that the VOB's are starting with an invalid audio frame which my code didn't allow for. Specifically the sample rate was being set to 0 which was causing xbmc to lockup.

I might suggest to you to use makemkv to put those DVD ISO's into mkv files. I'm pretty sure that would eliminate the invalid frame problem at the beginning of a new VOB. Makemkv is pretty awesome, free for dvd only use, nominal charge to get blu-ray support.

You have fixed the issue for the individual VOBs. Great step forward! It is getting more subtle now Wink Turns out the menus are 25fps and the movies are 50 fps. On switching from a 25fps VOB to a 50fps one, things go wrong. By jumping up and down 30s once, everything I have tried can be made to play correctly now.

For many of my DVDs I have just made an ISO, so that menus and options are still present. Thanks for the mkv hint, but converting them with makemkv looks like a work-around as it would take quite some time and menus/options could be lost. As the issue appears with ISOs, it also means that the original DVDs don't play correctly anymore. That cannot be the intention?


This forum uses Lukasz Tkacz MyBB addons.