[wdmaudiodev] Need help in wave test failure.

  • From: Gaurav Khuntale <gauravkhuntale@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Thu, 13 Feb 2014 11:27:26 +0530

Hello,

I am working on audio driver based on WaveCyclic port driver. I am getting
following failure in wave test,

Standard Streaming\Rendering Pin Tests\Streaming buffer from different
threads
Successfully instantiated KSPIN_DATAFLOW_IN pin
    Submitting 1600 bytes to the pin
    KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_STOP; want it to be
in state KSSTATE_PAUSE
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_ACQUIRE
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_PAUSE
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    IRP is pending...
    Creating semaphore
    Created semaphore
    Creating thread 1
    thread created
    KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_PAUSE; want it to
be in state KSSTATE_RUN
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_RUN
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    GetLastError did not return ERROR_IO_PENDING even though the pin is
paused

     [ GetLastError() returned 997 (0x3E5) - Overlapped I/O operation is in
progress.   ].
    pin position pos2.playoffset = 0 , pos1.playOffset = 80
    pin position pos2.playoffset = 80 , pos1.playOffset = 240
    pin position pos2.playoffset = 240 , pos1.playOffset = 320
    pin position pos2.playoffset = 320 , pos1.playOffset = 568
    pin position pos2.playoffset = 568 , pos1.playOffset = 1440
    pin position pos2.playoffset = 1440 , pos1.playOffset = 1600
    FAIL: Position (1600) is less than the amount of data streamed (3200).

While investigating about above failure, i got to know that my driver is
not getting total data ( 3200 bytes in above case ) that test sends.
Whatever data i am getting at my IDMAChannel::CopyTo function, that i am
updating to Port driver in IMiniportWaveCyclicStream::GetPosition method.
In above case, i observed that my IDMAChannel::CopyTo function gets total
1600 bytes only and i am also updating  1600 as Play Position offset. Here
i am not getting why my driver is not getting total 3200 bytes of data. Can
anyone please help me to understand this? Also when exactly CopyTo and
GetPosition method gets called ?

Thanks.

Other related posts: