[wdmaudiodev] Re: Max Number of Channels of a HDMI device

  • From: Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 27 Dec 2012 16:43:21 +0000

Since you support more than two channels, you also need to override the default 
data intersection handler.

http://msdn.microsoft.com/en-us/library/windows/hardware/ff536252(v=vs.85).aspx

The current implementation of the port driver's default handler is limited in 
the types of data ranges that it can handle:

*         Only PCM data formats

*         Only mono and stereo audio streams

An adapter driver that supports non-PCM or multichannel formats should 
implement a proprietary data-intersection handler instead of relying on the 
port driver to handle data intersections for these formats.


From: wdmaudiodev-bounce@xxxxxxxxxxxxx 
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of JimiYeh@xxxxxxxxxx
Sent: Wednesday, December 26, 2012 11:55 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Max Number of Channels of a HDMI device

Hi all,

        I am trying to write a WaveRT driver for HDMI on window7. I need to 
report my data range according to the HDMI sink device
(Ex: monitor, amplifier, ...). When I attached the amplifier which can support 
8 channel, The control panel will show the information
about the amplifier. I can see the correct sample size range, frequency range 
except "Max number of Channels". "Max Number of Channels"
is 2. I have checked my data range in my code. I'm sure I set the 
MaximumChannels is 8.


      if(myELD->GetFormatSupport(LPCM))
      {
              DataRangeAudio[LPCM].DataRange.FormatSize = 
sizeof(KSDATARANGE_AUDIO);
              DataRangeAudio[LPCM].DataRange.Flags         = 0;
              DataRangeAudio[LPCM].DataRange.SampleSize    = 0;
              DataRangeAudio[LPCM].DataRange.Reserved      = 0;
              DataRangeAudio[LPCM].DataRange.MajorFormat   = 
KSDATAFORMAT_TYPE_AUDIO;
              DataRangeAudio[LPCM].DataRange.SubFormat     = 
KSDATAFORMAT_SUBTYPE_PCM;
              DataRangeAudio[LPCM].DataRange.Specifier     = 
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX;

              DataRangeAudio[LPCM].MaximumChannels = 
myELD->GetFormatMaxChannel(LPCM);
                DOUT(DBGJimi, ("Max Channel : %d", 
DataRangeAudio[LPCM].MaximumChannels));       // the debug message is 8
              DataRangeAudio[LPCM].MinimumBitsPerSample = 
myELD->GetFormatMinBitDepth(LPCM);
              DataRangeAudio[LPCM].MaximumBitsPerSample = 
myELD->GetFormatMaxBitDepth(LPCM);
              DataRangeAudio[LPCM].MinimumSampleFrequency = 
myELD->GetFormatMinFrequency(LPCM);
                DOUT(DBGJimi, ("Min rate : %d", 
DataRangeAudio[LPCM].MinimumSampleFrequency));
              DataRangeAudio[LPCM].MaximumSampleFrequency = 
myELD->GetFormatMaxFrequency(LPCM);
                DOUT(DBGJimi, ("Max rate : %d", 
DataRangeAudio[LPCM].MaximumSampleFrequency));
                pKsDataRange[DataRangeIndex] = 
reinterpret_cast<KSDATARANGE*>(&DataRangeAudio[LPCM]);
                DataRangeIndex++;
      }

Thank you.

Best Regards,
Jimi

Other related posts: