[wdmaudiodev] Re: WLK tests behave VERY strange

  • From: Tsai Tzung-Dar <tdtsai1973@xxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Fri, 28 Oct 2011 10:32:02 -0700 (PDT)

Hi 
I use some driver I write before to run this test. Basically I use PortCls to 
implement my driver. The miniport type I choose is MiniportWaveCyclic and 
MiniportWaveRT. The test result is as bellow. The test in MiniportWaveCyclic 
driver is pass, in MiniportWaveRT driver is skip. So I think it should can 
pass. I also test it by use USB UAA. It also can passed. I attach the test 
result for you reference.
 
BR,
Tzung-Dar Tsai
------------------------ Test Result ---------------------
Driver Implement by MiniportWaveCyclic
------------------
Device Under Test:
    Device Name = Pin # 0 on CMUAC Speaker [Render Pin]
         PnP ID = USB\VID_0D8C&PID_0102&REV_0010&MI_00
 
Wave Format used for instantiation:
Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE
Format.nChannels = 2
Format.nSamplesPerSec = 44100
Format.nAvgBytesPerSec = 176400
Format.nBlockAlign = 4
Format.wBitsPerSample = 16
Format.cbSize = 22
wValidBitsPerSample = 16
dwChannelMask = KSAUDIO_SPEAKER_STEREO (0x3)
SubFormat = KSDATAFORMAT_SUBTYPE_PCM{00000001-0000-0010-8000-00AA00389B71}
Successfully instantiated Render pin
The current device supports standard streaming.
Setting render pin to state KSSTATE_STOP
Wave Format used for instantiation:
Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE
Format.nChannels = 2
Format.nSamplesPerSec = 44100
Format.nAvgBytesPerSec = 176400
Format.nBlockAlign = 4
Format.wBitsPerSample = 16
Format.cbSize = 22
wValidBitsPerSample = 16
dwChannelMask = KSAUDIO_SPEAKER_STEREO (0x3)
SubFormat = KSDATAFORMAT_SUBTYPE_PCM{00000001-0000-0010-8000-00AA00389B71}
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:[Sun Oct 23 00:21:43 2011]
Device Name = Pin # 0 on CMUAC Speaker [Render Pin]
PnP ID      = USB\VID_0D8C&PID_0102&REV_0010&MI_00
End Case: ID 16.26:1.10 : PASS : Standard Streaming\Rendering Pin 
Tests\Streaming buffer from different threads : [Sun Oct 23 00:21:44 2011]
-------------------------------------------
Driver Implement by use MiniportWaveRT:
-------------------------------------------
Device Under Test:
    Device Name = Pin # 0 on Speaker [Render Pin]
         PnP ID = USB\VID_0D8C&PID_0102&REV_0010&MI_00
 
Wave Format used for instantiation:
Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE
Format.nChannels = 2
Format.nSamplesPerSec = 44100
Format.nAvgBytesPerSec = 176400
Format.nBlockAlign = 4
Format.wBitsPerSample = 16
Format.cbSize = 22
wValidBitsPerSample = 16
dwChannelMask = KSAUDIO_SPEAKER_STEREO (0x3)
SubFormat = KSDATAFORMAT_SUBTYPE_PCM{00000001-0000-0010-8000-00AA00389B71}
CKsPin::Instantiate.  Failed to instantiate Render pin!
KsCreatePin returned = 0x00000491
 [ GetLastError() returned 1169 (0x491) - There was no match for the specified 
key in the index.   ].
Wave Format used for instantiation:
Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE
Format.nChannels = 2
Format.nSamplesPerSec = 44100
Format.nAvgBytesPerSec = 176400
Format.nBlockAlign = 4
Format.wBitsPerSample = 16
Format.cbSize = 22
wValidBitsPerSample = 16
dwChannelMask = KSAUDIO_SPEAKER_STEREO (0x3)
SubFormat = KSDATAFORMAT_SUBTYPE_PCM{00000001-0000-0010-8000-00AA00389B71}
Successfully instantiated Render pin
The current device supports standard looped streaming.
This is a WaveRT Pin
Setting render pin to state KSSTATE_STOP
The current device supports standard looped streaming.
This is a WaveRT Pin
The current device supports standard looped streaming.
This is a WaveRT Pin
Start Case: ID 16.26:1.10 : Standard Streaming\Rendering Pin Tests\Streaming 
buffer from different threads:[Sun Oct 23 00:24:12 2011]
Device Name = Pin # 0 on Speaker [Render Pin]
PnP ID      = USB\VID_0D8C&PID_0102&REV_0010&MI_00
End Case: ID 16.26:1.10 : SKIPPED : Standard Streaming\Rendering Pin 
Tests\Streaming buffer from different threads : [Sun Oct 23 00:24:12 2011]
-------------------------------------------USB UAA test Result
-------------------------------------------
Device Under Test:
    Device Name = Pin # 0 on USB Sound Device         [Render Pin]
         PnP ID = USB\VID_0D8C&PID_0102&REV_0010&MI_00
 
Wave Format used for instantiation:
wFormatTag = WAVE_FORMAT_PCM
nChannels = 2
nSamplesPerSec = 44100
nAvgBytesPerSec = 176400
nBlockAlign = 4
wBitsPerSample = 16
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 = 2
nSamplesPerSec = 44100
nAvgBytesPerSec = 176400
nBlockAlign = 4
wBitsPerSample = 16
cbSize = 0
CKsPin::Instantiate.  Failed to instantiate Render pin!
KsCreatePin returned = 0x00000491
 [ GetLastError() returned 1169 (0x491) - There was no match for the specified 
key in the index.   ].
The current device supports standard streaming.
This is NOT a WaveRT Pin
The current device supports standard streaming.
This is NOT a WaveRT Pin
Start Case: ID 16.26:1.10 : Standard Streaming\Rendering Pin Tests\Streaming 
buffer from different threads:[Sun Oct 23 00:18:53 2011]
Device Name = Pin # 0 on USB Sound Device         [Render Pin]
PnP ID      = USB\VID_0D8C&PID_0102&REV_0010&MI_00
End Case: ID 16.26:1.10 : PASS : Standard Streaming\Rendering Pin 
Tests\Streaming buffer from different threads : [Sun Oct 23 00:18:53 2011]
 


________________________________
寄件者: Eugene Muzychenko <eugene@xxxxxxxxxxxxxx>
收件者: Tsai Tzung-Dar <wdmaudiodev@xxxxxxxxxxxxx>
寄件日期: 2011/10/29 (六) 12:27 AM
主旨: [wdmaudiodev] Re: WLK tests behave VERY strange

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: