[wdmaudiodev] WavePCI miniports and AC3 over SPDIF sync issues

  • From: "Stephan" <stephan@xxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 10 Sep 2002 11:15:49 +0200

Hello All,

I'm trying again, now that we're hosted at freelists ;-)

Our PCI audio card WDM miniport driver connects to WavePCI and has a non-PCM
(AC3 over SPDIF) capable pin.

We ran into the following issue when trying to stream AC3 over SPDIF (under
WinXP Pro): the latest versions of WinDVD and other DVD players use
IReferenceClock to derive and set the current AC3 stream position (and thus
read/write KSPROPERTY_AUDIO_POSITION).  Once the DVD player attempts to set
the KSPROPERTY_AUDIO_POSITION PlayOffset/WriteOffset, the read back value of
PlayOffset is changed but WriteOffset is NOT.

The result is totally desynced audio<->video after any stream discontinuity.
The KSPROPERTY_AUDIO_POSITION is handled by the WavePCI class driver so
unfortunately we've no influence on the returned values. Note that
KSPROPERTY_AUDIO_POSITION does work with PCM audio streams. Below I've
attached the WHQL AC3 driver test log for our WavePCI driver.

We have been able to fix this issue by moving to an WaveCyclic
implementation but we'd like to fix the WavePCI version for its better low
latency performance.

So here's my question:

1) Is this a known bug (I guess it is because failure of HCT test case
34:1.7 is allowed with WavePCI drivers) and is a fix for this planned

2) Is it possible to fix this issue by exposing the
KSPROPERTY_AUDIO_POSITION property from the miniport driver, which node
should expose the property and is there any sample code how to do this.

Thanks,
    Stephan Kappertz


*********************** AC-3 Driver Test log **************************

Start Tests:AC-3 Driver Test:[Tue Sep 10 10:24:44 2002]

Start Case: ID 34:1.7 : KS Pin Tests\GetSetPosition:[Tue Sep 10 10:24:54
2002]
Device Name = KS Pin #2 on M-AUDIO Delta 1010 S/PDIF
    Attempting to instantiate the pin using the _WAVEFORMATEX specifier
    Successfully instantiated Render pin
    Setting render pin to state KSSTATE_ACQUIRE
    Setting render pin to state KSSTATE_PAUSE
    Submitting 583680 bytes to render pin...
    Setting render pin to state KSSTATE_PAUSE
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    IRP is pending...
    Setting render pin to state KSSTATE_RUN
    KSPROPERTY_AUDIO_POSITION handler will be called repeatedly.  The value
should increase.
    IOCTL duration: 2.0 ms, (768 bytes),  Set:     0,  Get:    72,  Delta:
72 (0.38 ms)
    IOCTL duration: 3.0 ms, (960 bytes),  Set:   480,  Get: 38988,  Delta:
38508 (200.56 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:   960,  Get: 77384,  Delta:
76424 (398.04 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  1440,  Get: 115784,  Delta:
114344 (595.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  1920,  Get: 154188,  Delta:
152268 (793.06 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  2400,  Get: 192584,  Delta:
190184 (990.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  2880,  Get: 230984,  Delta:
228104 (1188.04 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  3360,  Get: 269392,  Delta:
266032 (1385.58 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  3840,  Get: 307788,  Delta:
303948 (1583.06 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  4320,  Get: 346184,  Delta:
341864 (1780.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  4800,  Get: 384584,  Delta:
379784 (1978.04 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 3.0 ms, (960 bytes),  Set:  5280,  Get: 422984,  Delta:
417704 (2175.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 960 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  5760,  Get: 461384,  Delta:
455624 (2373.04 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  6240,  Get: 499784,  Delta:
493544 (2570.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  6720,  Get: 538188,  Delta:
531468 (2768.06 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    IOCTL duration: 2.0 ms, (768 bytes),  Set:  7200,  Get: 576584,  Delta:
569384 (2965.54 ms)
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION does not
agree with the value set
    Failure: The value retrieved from KSPROPERTY_AUDIO_POSITION is not
within 768 bytes of the value set
    Setting render pin to state KSSTATE_PAUSE
    Setting render pin to state KSSTATE_ACQUIRE
    Setting render pin to state KSSTATE_STOP
End Case: ID 34:1.7 : FAIL : KS Pin Tests\GetSetPosition : [Tue Sep 10
10:24:57 2002]



Start Case: ID 34:3.6 : DirectSound Tests\Get/SetCurrentPosition:[Tue Sep 10
10:25:19 2002]
Device Name = M-AUDIO Delta 1010 S/PDIF (DirectSound)
    Calling DirectSoundCreate
    Calling SetCooperativeLevel
    Calling CreateSoundBuffer
    Calling Lock
    Calling Unlock
    Calling Play
    SetCurrentPosition and GetCurrentPosition will be called repeatedly, and
the values of the play cursor will be compared
    API duration: 3.0 ms, (960 bytes),  Set:     0,  Get:    72,  Delta:  72
(0.38 ms)
    API duration: 2.0 ms, (768 bytes),  Set:   480,  Get:   552,  Delta:  72
(0.38 ms)
    API duration: 3.0 ms, (960 bytes),  Set:   960,  Get:  1440,  Delta: 480
(2.50 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  1440,  Get:  1512,  Delta:  72
(0.38 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  1920,  Get:  1988,  Delta:  68
(0.35 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  2400,  Get:  2472,  Delta:  72
(0.38 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  2880,  Get:  2952,  Delta:  72
(0.38 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  3360,  Get:  3428,  Delta:  68
(0.35 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  3840,  Get:  3908,  Delta:  68
(0.35 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  4320,  Get:  4392,  Delta:  72
(0.38 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  4800,  Get:  4872,  Delta:  72
(0.38 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  5280,  Get:  5352,  Delta:  72
(0.38 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  5760,  Get:  5908,  Delta: 148
(0.77 ms)
    API duration: 2.0 ms, (768 bytes),  Set:  6240,  Get:  6912,  Delta: 672
(3.50 ms)
    API duration: 3.0 ms, (960 bytes),  Set:  6720,  Get:  8004,  Delta:
1284 (6.69 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set:  7200,  Get:  9196,  Delta:
1996 (10.40 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set:  7680,  Get: 10488,  Delta:
2808 (14.63 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set:  8160,  Get: 11872,  Delta:
3712 (19.33 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set:  8640,  Get: 12848,  Delta:
4208 (21.92 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set:  9120,  Get: 12864,  Delta:
3744 (19.50 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set:  9600,  Get: 12996,  Delta:
3396 (17.69 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 10080,  Get: 13232,  Delta:
3152 (16.42 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 10560,  Get: 13560,  Delta:
3000 (15.63 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 11040,  Get: 13984,  Delta:
2944 (15.33 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 7.0 ms, (1728 bytes),  Set: 11520,  Get: 14492,  Delta:
2972 (15.48 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 1728
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 12000,  Get: 15120,  Delta:
3120 (16.25 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 12480,  Get: 15832,  Delta:
3352 (17.46 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 12960,  Get: 16360,  Delta:
3400 (17.71 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 13440,  Get: 17264,  Delta:
3824 (19.92 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 13920,  Get: 18264,  Delta:
4344 (22.63 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 14400,  Get: 19360,  Delta:
4960 (25.83 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 14880,  Get: 20552,  Delta:
5672 (29.54 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 15360,  Get: 21836,  Delta:
6476 (33.73 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 15840,  Get: 23220,  Delta:
7380 (38.44 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 16320,  Get: 24704,  Delta:
8384 (43.67 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 16800,  Get: 24740,  Delta:
7940 (41.35 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 17280,  Get: 24824,  Delta:
7544 (39.29 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 17760,  Get: 25056,  Delta:
7296 (38.00 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 18240,  Get: 25384,  Delta:
7144 (37.21 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 18720,  Get: 25808,  Delta:
7088 (36.92 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 19200,  Get: 26328,  Delta:
7128 (37.13 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 19680,  Get: 26944,  Delta:
7264 (37.83 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 20160,  Get: 27656,  Delta:
7496 (39.04 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 20640,  Get: 28464,  Delta:
7824 (40.75 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 21120,  Get: 29056,  Delta:
7936 (41.33 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 21600,  Get: 30052,  Delta:
8452 (44.02 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 22080,  Get: 31152,  Delta:
9072 (47.25 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
    API duration: 2.0 ms, (768 bytes),  Set: 22560,  Get: 32344,  Delta:
9784 (50.96 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 768
bytes of the value set
    API duration: 3.0 ms, (960 bytes),  Set: 23040,  Get: 33632,  Delta:
10592 (55.17 ms)
    Failure: The value retrieved from GetCurrentPosition does not agree with
the value set
    Failure: The value retrieved from GetCurrentPosition is not within 960
bytes of the value set
End Case: ID 34:3.6 : FAIL : DirectSound Tests\Get/SetCurrentPosition : [Tue
Sep 10 10:25:22 2002]



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

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

Other related posts:

  • » [wdmaudiodev] WavePCI miniports and AC3 over SPDIF sync issues