Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results
The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.
Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/
I'm working on an audio driver for my GPU, based on Microsoft's sysvad sample driver, and am running into some bizarre behavior that I haven't been able to find a solution for.
My driver declares both a WaveRT and a Topology filter, both of which I can correctly instantiate inside of KS Studio and both of which validate without issue. When my driver is installed, a new output device is also created and I can select it in the Sound settings in the UI. However, its volume is permanently fixed to zero and the taskbar sound icon shows an X. Hovering over it reports "No speakers or headphones are plugged in."
My Topology filter's property handler handles the KSPROPERTY_JACK_DESCRIPTION, KSPROPERTY_JACK_DESCRIPTION2, and KSPROPERTY_JACK_SINK_INFO properties, and reports that the connection status is connected.
When the driver is first installed and when I attempt to change the volume, I see it checking the WaveRT instance for supported formats, finding one, creating a new instance of my WaveRTStream class, triggering an allocation through AllocateBufferWithNotification, and then immediately freeing that same buffer, closing the stream, and repeating the process. It does this a dozen or so times before stopping and going idle. I never get calls to change the stream's state or anything else that indicates it's trying to do something that I'm not handling properly to cause this behavior.
Does anyone have any idea what might be going on here? Is there any way for me to have Windows report additional information about the behavior of the audio systems that might help me track down what I'm doing wrong?
Thanks!
Upcoming OSR Seminars | ||
---|---|---|
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead! | ||
Kernel Debugging | 13-17 May 2024 | Live, Online |
Developing Minifilters | 1-5 Apr 2024 | Live, Online |
Internals & Software Drivers | 11-15 Mar 2024 | Live, Online |
Writing WDF Drivers | 26 Feb - 1 Mar 2024 | Live, Online |
Comments
Which pins did you implement jack descriptions for? A topo filter usually has 4 pins, but only the pins for the physical endpoints (mic in, line out) get jack descriptions.
As always, I would suggest you ask your question on the [wdmaudiodev] list at https://www.freelists.org/list/wdmaudiodev . That's where the cool audio kids hang out, including two members of the Microsoft audio team who have proven to be an incredible resource over the years.
Tim Roberts, [email protected]
Providenza & Boekelheide, Inc.
In my case, the topo filter only has two pins - an input from the WaveRT and an output that represents the physical HDMI output port. Only the HDMI output port pin responds to the jack description properties. I am not doing any audio capturing, so there are no pins representing data flowing into and through the filter.
I had no idea that wdmaudiodev list existed, but I'm signed up and will definitely check there!
Thanks!