[wdmaudiodev] DirectKS: Trouble opening SoundMAX 5.1 render sink pin

  • From: "Mike Garrett" <mike.garrett@xxxxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Sat, 17 May 2003 21:10:33 -0500

Hello all,

I have a DirectKS application with code based off the Microsoft sample but
modified for much lower latency and wider (>stereo) output.  My code works
well with most soundcards, but there's a SoundMAX 6 channel embedded audio
chip (presumably 5.1) that is giving me trouble.  Here's what my diagnostic
code returns to me:

Filter SoundMAX Digital Audio has 1 Render Sink Pins
Begin pin detail
Filter SoundMAX Digital Audio Pin KSDATARANGE_AUDIO.DataRange:
        MajorFormat = {73647561-0000-0010-8000-00AA00389B71}
        SubFormat = {00000001-0000-0010-8000-00AA00389B71}
        Specifier = {05589F81-C356-11CE-BF01-00AA0055595A}
        MaximumChannels = 6
        MinimumBitsPerSample = 8
        MaximumBitsPerSample = 16
        MinimumSampleFrequency = 100
        MaximumSampleFrequency = 48000
MajorFormat is valid
Subformat is valid
Specifier is valid
Channels, Bits per sample, and Frequency are valid
Successfully set pin format
Driver could not handle WAVE_FORMAT_EXTENSIBLE, trying WAVE_FORMAT_PCM
Successfully set pin format
Error - could not instantiate pin

Filter SoundMAX Digital Audio Pin KSDATARANGE_AUDIO.DataRange:
        MajorFormat = {73647561-0000-0010-8000-00AA00389B71}
        SubFormat = {00000001-0000-0010-8000-00AA00389B71}
        Specifier = {518590A2-A184-11D0-8522-00C04FD9BAF3}
        MaximumChannels = 6
        MinimumBitsPerSample = 8
        MaximumBitsPerSample = 16
        MinimumSampleFrequency = 100
        MaximumSampleFrequency = 48000
MajorFormat is valid
Subformat is valid
Specifier is invalid

Filter SoundMAX Digital Audio Pin KSDATARANGE_AUDIO.DataRange:
        MajorFormat = {73647561-0000-0010-8000-00AA00389B71}
        SubFormat = {00000000-0000-0000-0000-000000000000}
        Specifier = {05589F81-C356-11CE-BF01-00AA0055595A}
        MaximumChannels = 6
        MinimumBitsPerSample = 8
        MaximumBitsPerSample = 16
        MinimumSampleFrequency = 100
        MaximumSampleFrequency = 48000
MajorFormat is valid
Subformat is valid
Specifier is valid
Channels, Bits per sample, and Frequency are valid
Successfully set pin format
Driver could not handle WAVE_FORMAT_EXTENSIBLE, trying WAVE_FORMAT_PCM
Successfully set pin format
Error - could not instantiate pin

Filter SoundMAX Digital Audio Pin KSDATARANGE_AUDIO.DataRange:
        MajorFormat = {73647561-0000-0010-8000-00AA00389B71}
        SubFormat = {00000000-0000-0000-0000-000000000000}
        Specifier = {518590A2-A184-11D0-8522-00C04FD9BAF3}
        MaximumChannels = 6
        MinimumBitsPerSample = 8
        MaximumBitsPerSample = 16
        MinimumSampleFrequency = 100
        MaximumSampleFrequency = 48000
MajorFormat is valid
Subformat is valid
Specifier is invalid
End pin detail

As you can see, I try to open WAVE_FORMAT_EXTENSIBLE and if it fails I try
WAVE_FORMAT_PCM (like the DirectKS sample).  You can also see that I cannot
ever successfully open a render sink pin although the preceeding set pin
format is successful.

My WAVEFORMATEXTENSIBLE struct upon open is:

         WAVEFORMATEXTENSIBLE wfx;
         wfx.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
         wfx.Format.nChannels = pKSDATARANGE_AUDIO->MaximumChannels;
// 6 in the SoundMAX case
         wfx.Format.nSamplesPerSec = 44100;
         wfx.Format.nBlockAlign = (hwBitDepth/8) *
pKSDATARANGE_AUDIO->MaximumChannels;
         wfx.Format.nAvgBytesPerSec = wfx.Format.nSamplesPerSec *
wfx.Format.nBlockAlign;
         wfx.Format.wBitsPerSample = hwBitDepth;
         wfx.Format.cbSize =
sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
         wfx.Samples.wValidBitsPerSample = hwBitDepth;
         wfx.dwChannelMask = 0;
         wfx.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;

hwBitDepth is always either 16 or 32, but in the SoundMAX case its 16.

Any ideas why I cannot instantiate this render sink pin?  Is there something
obvious I'm missing?

Also, another question:  Many WDM drivers allow me to just swap 2 data
buffers into the render sink pin, but there's a few out there (Soundblaster
Live! 5.1) that requires at least 3 buffers to prevent audio dropouts.  Is
there any way to know algorithmically, what the minimum is?

Thanks,

Mike Garrett


******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

Other related posts: