[wdmaudiodev] Re: Multichannel test playback in Win10

  • From: Eugene Muzychenko <eugene@xxxxxxxxxxxxxx>
  • To: Matthew van Eerde <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Wed, 28 Oct 2015 23:22:15 +0600

Hello Matthew,

You hit the "Test" button on the Advanced tab, with the format you want
selected...
And a pin is being created, and even getting as far as KSSTATE_PAUSE...
And *then* you're getting format-support queries?

I checked timestamps and thread IDs in my driver logs and see the
following sequence:

Immediately after driver load, there is a series of property requests
of AudioEndpointBuilder, related to filter topology, pin names, volume
levels etc. There are several Pin/PROPOSEDATAFORMAT/Set requests with
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX and FormatSize=64. I'm afraid
these requests are incorrect. My driver fails them with
STATUS_INVALID_PARAMETER. No buffer size query requests (with
ValueSize=0) are sent on this stage.

As I open the Multimedia (Sound) applet, there is a series of property
requests from rundll32. There are several incorrect
Pin/PROPOSEDATAFORMAT/Set again.

As I open my driver's playback endpoint, Sound applet sends another
series of requests, with several incorrect Pin/PROPOSEDATAFORMAT/Set.
But there are several Pin/PROPOSEDATAFORMAT/Get requests, and my
driver returns the "widest" format it supports (48000/16/8). Then a
stream is created with this format, and immediately destroyed.

Then a series of pairs of valid Pin/PROPOSEDATAFORMAT/Set and
Pin/DATAINTERSECTION/Get requests are sent. For unsupported formats,
my driver returns STATUS_INVALID_PARAMETER to PROPOSEDATAFORMAT and
STATUS_NO_MATCH to DATAINTERSECTION.

As I select the Advanced tab, choose a format from the list, and click
the Test button, a stream with the appropriate format is created,
paused, stopped and destroyed. No data are submitted.

After stream termination, a series of various property request is
sent.

Then Pin/PROPOSEDATAFORMAT/Set request is sent with the same format,
my driver satisfies it. Immediately, a stream with the same format is
created but destroyed without state changing.
Pin/PROPOSEDATAFORMAT/Set request is sent again with the same format.
Then yet another stream with the same format is created and destroyed
immediately. Then Pin/PROPOSEDATAFORMAT/Set with ValueSize=64 is sent
(driver fails it). Then Pin/PROPOSEDATAFORMAT/Set request is sent
again with the same valid format. Then a third stream with the same
format is created and destroyed immediately. Then
Pin/PROPOSEDATAFORMAT/Set request is sent again with the same valid
format. Then a fourth stream with the same format is created and
destroyed immediately.

I have changed return status for unmatched formats from
INVALID_PARAMETER to NO_MATCH but no effect.

What format is being passed to the pin creation dispatch routine?

44100, 16 bits, 8 channels.

I assume the format support queries are still targeted to a filter handle,
not a pin handle.

Of course, yes.

Can you grab traces and send them to me?

http://www.filedropper.com/testtones

Tried formats 48000/16/8, 44100/16/8 and 44100/16/6.

Regards,
Eugene

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

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.com/

Other related posts: