Re: [alsa-devel] [Intel-gfx] Problems with HDMI audio on Intel DG45FC motherboard
On Tue, Oct 27, 2009 at 07:11:25AM +0800, David Härdeman wrote:
On Tue, Oct 20, 2009 at 03:43:53PM -0700, Shane W wrote:
On Tue, Oct 20, 2009 at 09:26:00AM +0800, Wu Fengguang wrote:
HDMI codec/sink seem to take some time to response to the output enable and new infoframe, so there are some delay. I've moved the HDMI output enable command to module load time, this helps. The infoframe is in theory created in run time based on the format of _each_ new audio stream, so infoframe transmission has to be started/stopped for each track..
I know this has come up before but can't we not start/stop the infoframe if the sample format on the new track is the same as the old. I mean playing an album, you're gonna get 44100, 2ch s16le 95% of the time so that would atleast cause the problem to appear much less.
Tried it, still had the second-track-produces-silence bug on my receiver so I couldn't test it properly.
I however did manage to create a different patch which fixed my receiver bug (yay!)...by sending "refer-to-stream-header" audio infoframes from pcm close to pcm open...something like this quick hack:
This is an important clue, thank you! :)
The patch is not quite logical. Hopefully the sticky infoframe patch can help in the same way.
Attached is the broken up patches, hope that helps your debugging. The last 4 patches in the series are inspired by your comments.
Thanks, Fengguang
--- linux-2.6.32-rc5/sound/pci/hda/patch_intelhdmi.c 2009-10-16 02:41:50.000000000 +0200 +++ ../linux-2.6.32-rc5/sound/pci/hda/patch_intelhdmi.c 2009-10-26 23:39:54.000000000 +0100 @@ -552,8 +552,16 @@ struct snd_pcm_substream *substream) { struct intel_hdmi_spec *spec = codec->spec;
struct hdmi_audio_infoframe ai = {
.type = 0x84,
.ver = 0x01,
.len = 0x0a,
.CC02_CT47 = 0x00,
};
hdmi_stop_infoframe_trans(codec);
hdmi_fill_audio_infoframe(codec, &ai);
hdmi_start_infoframe_trans(codec);
return snd_hda_multi_out_dig_close(codec, &spec->multiout);
} @@ -571,6 +579,7 @@
hdmi_set_channel_count(codec, substream->runtime->channels);
hdmi_stop_infoframe_trans(codec); hdmi_setup_audio_infoframe(codec, substream);
return 0;
Not sure how/if something like that could be turned into an acceptable patch though...
-- David Härdeman
participants (1)
-
Wu Fengguang