[wdmaudiodev] kernel streaming and format negotiation

  • From: Philip Lukidis <PLukidis@xxxxxxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Tue, 21 Feb 2006 11:29:53 -0500

Hello.  I'm writing a kernel streaming (upper) filter driver, which will
operate only with a very constrained list of hardware.  I'm having trouble
determining the negotiated KSDATAFORMAT in the streaming filter driver.
KSPROPERTY_PIN_DATAINTERSECTION does not seem to help me, because the last
logged completion routine from the function driver below the filter always
returns a different format than the one ultimately selected.  What I mean is
(grossly speaking) that the last logged call of
KSPROPERTY_PIN_DATAINTERSECTION requests a match to rangeX (1 range only),
but the filter completion routine indicates that the function driver has
filled in the output buffer with rangeY as the result.  Yet rangeX is seen
to be the negotiated format.  For each call to
KSPROPERTY_PIN_DATAINTERSECTION, there is only 1 format sent (along with its
pin, KSMULTIPLE_ITEM specifying 1 range).  Yet the function driver does not
always return a match for it.  Why is this?

Also, sometimes the IRP information member in the completion routine shows
extended format data has been returned, with STATUS_SUCCESS, yet I see
mostly zero/garbage within the output buffer (both in my traces and in the
debugger).  Why would that be?  I look both in the user output buffer (
Irp->UserBuffer, in in a try except block), and a kernel mapping of the
output buffer which I lock and map myself when the IRP is first coming down
the stack, and both show the same garbage.  In any case, during these cases
Irp->PendingReturned is always 0.  Why would the function driver sometimes
return invalid data?  Or am I tapping this communication (METHOD_NEITHER
IOCTLs) incorrectly?  

Also, KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
KSPROPERTY_PIN_PROPOSEDATAFORMAT, KSPROPERTY_CONNECTION_DATAFORMAT and
KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT are never logged by the filter
driver.

I know that I'm missing something here, could something shed any light on
how a kernel streaming filter could find out about the negotiated format? 

thanks,

Philip Lukidis 
******************

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: