[wdmaudiodev] Problem running an AVStream audio capture filter under XP

  • From: Mike Horgan <mhorgan@xxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 7 Jul 2011 12:43:42 -0700

I have an AVStream audio capture filter mini driver for a USB audio device.  
The descriptors for this filter expose two pins (one bridge and one actual 
audio pin), and the topology connects these two pins via one internal filter 
node (ADC type).

Under Win7 this filter appears to run fine.  If I launch a DAW (I am currently 
testing with Reaper), under preferences if I select WDM Kernel Streaming as the 
audio system my driver appears.  If I select my device and instance and arm a 
track I can capture a valid audio wave form.  I have a 440 hz tone feeding the 
device and the waveform present appears to be a valid sine wave.

If I install this same driver under XP sp3 and launch Reaper I again see that 
the device is enumerating under WDM Kernel Streaming system.  If I select the 
device and try to record, the cursor just seems to sit at time "0".  Under the 
debugger I see the capture pin get instanced and the system changes the state 
of the pin from KSSTATE_STOP to KSSTATE_ACQUIRE, but it goes no further.  I've 
verified that the state change to acquire returns success so I'm a bit baffled 
as to what is wrong.  If I run GraphEdit and instance the capture filter, I can 
smart render the pin (it connects up to default DS renderer) and run the graph 
and actually hear the tone from my generator.

I'm at a loss to explain what it is that the XP audio system doesn't like about 
the filter.  Neither the filter, nor the pin are exposing an automation table.  
I'm just letting the AVStream framework handle any properties.  I don't see the 
system querying for any audio specific properties (latency, position) which 
would lead me to believe that maybe I need to include one or more.

Anyone have any insights into what could possibly prevent graph from 
transitioning all the way to KSSTATE_RUN, or some way to possibly debug why?


Other related posts: