[wdmaudiodev] Re: WLK tests behave VERY strange

  • From: Eugene Muzychenko <eugene@xxxxxxxxxxxxxx>
  • To: Tsai Tzung-Dar <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Fri, 28 Oct 2011 23:27:24 +0700

Hello Tsai,

> Do you implement it by use AVStream miniport or you use StreamClass
> miniport?

My driver basically used PortCls and now I'm handling some requests
directly to avoid PortCls restrictions.

> Because I don't think the WLK test in this item has bug.
> Because if you use PortCls to implement it. It can pass.

I found no PortCls miniport that passes case 1.10 of wavetest. It
fails with the following:

- My driver with direct IOCTL_KS_WRITE_STREAM and POSITION/POSITION2
handlers;

- My driver with handling them via PortCls;

- VMware VMAudio 5.10.0.3502 (PortCls miniport, signed by WHQL)

- es1371mp 6.1.6499 (Ensoniq AudioPCI driver from Creative, PortCls miniport, 
signed by WHQL)

- MSVAD (Simple) from WDK 7600.16385.1 (PortCls miniport)

Here is test output for MSVAD (Simple):

Start Tests:Wave Filter Testing:[Fri Oct 28 23:16:19 2011]

Random Seed = 3506460159


Device Under Test:
    Device Name = Pin # 2 on MSVAD Wave [Render Pin]
         PnP ID = *msvadsimple
 

Wave Format used for instantiation:
wFormatTag = WAVE_FORMAT_PCM
nChannels = 1
nSamplesPerSec = 8000
nAvgBytesPerSec = 8000
nBlockAlign = 1
wBitsPerSample = 8
cbSize = 0

Successfully instantiated Render pin
The current device supports standard streaming.
Setting render pin to state KSSTATE_STOP
Wave Format used for instantiation:
wFormatTag = WAVE_FORMAT_PCM
nChannels = 1
nSamplesPerSec = 8000
nAvgBytesPerSec = 8000
nBlockAlign = 1
wBitsPerSample = 8
cbSize = 0

Successfully instantiated Render pin
The current device supports standard looped streaming.
Setting render pin to state KSSTATE_STOP
The current device supports standard streaming.
The current device supports standard looped streaming.
This is NOT a WaveRT Pin
The current device supports standard streaming.
The current device supports standard looped streaming.
This is NOT a WaveRT Pin
Start Case: ID 16.26:1.10 : Standard Streaming\Rendering Pin Tests\Streaming 
buffer from different threads:[Fri Oct 28 23:16:19 2011]
Device Name = Pin # 2 on MSVAD Wave [Render Pin]
PnP ID      = *msvadsimple
    ======================================================
    Using Pin # 2 on MSVAD Wave as the render pin
    Testing format:
      Format.nChannels       = 2
      Format.nSamplesPerSec  = 22050
      wValidBitsPerSample    = 16
        Creating Pin with format:
           Connect.nPinId                    = 2
           Connect.PinToHandle               = 0x00000000
           Format.FormatSize                 = 82
           WaveFormat.Format.wFormatTag      = 1
           WaveFormat.Format.nChannels       = 2
           WaveFormat.Format.nSamplesPerSec  = 22050
           WaveFormat.Format.nAvgBytesPerSec = 88200
           WaveFormat.Format.nBlockAlign     = 4
           WaveFormat.Format.wBitsPerSample  = 16
           WaveFormat.Format.cbSize          = 0
           WaveFormat.wValidBitsPerSample    = 16
           WaveFormat.dwChannelMask          = 3
    Successfully instantiated Render pin
    Submitting 17640 bytes to the pin
    Setting render pin to state KSSTATE_PAUSE
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    IRP is pending...
    Creating semaphore
    Created semaphore
    Creating thread 1
    thread created
    Setting render pin to state KSSTATE_RUN
    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 = 1324 
    pin position pos2.playoffset = 1324 , pos1.playOffset = 2736 
    pin position pos2.playoffset = 2736 , pos1.playOffset = 4060 
    pin position pos2.playoffset = 4060 , pos1.playOffset = 5468 
    pin position pos2.playoffset = 5468 , pos1.playOffset = 6880 
    pin position pos2.playoffset = 6880 , pos1.playOffset = 8204 
    pin position pos2.playoffset = 8204 , pos1.playOffset = 9616 
    pin position pos2.playoffset = 9616 , pos1.playOffset = 11028 
    pin position pos2.playoffset = 11028 , pos1.playOffset = 12348 
    pin position pos2.playoffset = 12348 , pos1.playOffset = 13760 
    pin position pos2.playoffset = 13760 , pos1.playOffset = 15084 
    pin position pos2.playoffset = 15084 , pos1.playOffset = 16496 
    pin position pos2.playoffset = 16496 , pos1.playOffset = 17640 
    FAIL: Position (17640) is less than the amount of data streamed (35280).
    Setting render pin to state KSSTATE_STOP
    Setting render pin to state KSSTATE_STOP
    ======================================================
    Using Pin # 2 on MSVAD Wave as the render pin
    Testing format:
      Format.nChannels       = 2
      Format.nSamplesPerSec  = 48000
      wValidBitsPerSample    = 16
        Creating Pin with format:
           Connect.nPinId                    = 2
           Connect.PinToHandle               = 0x00000000
           Format.FormatSize                 = 82
           WaveFormat.Format.wFormatTag      = 1
           WaveFormat.Format.nChannels       = 2
           WaveFormat.Format.nSamplesPerSec  = 48000
           WaveFormat.Format.nAvgBytesPerSec = 192000
           WaveFormat.Format.nBlockAlign     = 4
           WaveFormat.Format.wBitsPerSample  = 16
           WaveFormat.Format.cbSize          = 0
           WaveFormat.wValidBitsPerSample    = 16
           WaveFormat.dwChannelMask          = 3
    Successfully instantiated Render pin
    Submitting 38400 bytes to the pin
    Setting render pin to state KSSTATE_PAUSE
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    IRP is pending...
    Creating semaphore
    Created semaphore
    Creating thread 1
    thread created
    Setting render pin to state KSSTATE_RUN
    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 = 2880 
    pin position pos2.playoffset = 2880 , pos1.playOffset = 5952 
    pin position pos2.playoffset = 5952 , pos1.playOffset = 8832 
    pin position pos2.playoffset = 8832 , pos1.playOffset = 11904 
    pin position pos2.playoffset = 11904 , pos1.playOffset = 14976 
    pin position pos2.playoffset = 14976 , pos1.playOffset = 17856 
    pin position pos2.playoffset = 17856 , pos1.playOffset = 20928 
    pin position pos2.playoffset = 20928 , pos1.playOffset = 24000 
    pin position pos2.playoffset = 24000 , pos1.playOffset = 26880 
    pin position pos2.playoffset = 26880 , pos1.playOffset = 29952 
    pin position pos2.playoffset = 29952 , pos1.playOffset = 32832 
    pin position pos2.playoffset = 32832 , pos1.playOffset = 35904 
    pin position pos2.playoffset = 35904 , pos1.playOffset = 38400 
    FAIL: Position (38400) is less than the amount of data streamed (76800).
    Setting render pin to state KSSTATE_STOP
    Setting render pin to state KSSTATE_STOP
End Case: ID 16.26:1.10 : FAIL : Standard Streaming\Rendering Pin 
Tests\Streaming buffer from different threads : [Fri Oct 28 23:16:19 2011]

Standard Streaming:[FAIL:1]
 Rendering Pin Tests:[FAIL:1]
  16.26:1.10 Streaming buffer from different threads:[FAIL:1]

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: