DXVA High Definition Video Processing - VideoProcessing

This manual test runs test cases across the following: IDXVAHD_VideoProcessor::SetVideoProcessBltState, IDXVAHD_VideoProcessor::GetVideoProcessBltState, IDXVAHD_VideoProcessor::SetVideoProcessStreamState, IDXVAHD_VideoProcessor::GetVideoProcessStreamState, and IDXVAHD_VideoProcessor::VideoProcessBltHD.

For details about all of the test cases, see the "Supporting information" section below. Most test cases present to the screen while a utility post-processes the frames for comparison. Most test cases enforce a > 20.0f PSNR between software and hardware processed frames. For some test cases, the threshold is lowered due to lack of support of some filters and features in the software implementation.

The test will for the most part just show a ticker-like window incrementing pass fail counts and showing which test case variables are being iterated upon.

Test details

   
Specifications
  • Device.Graphics.WDDM11.Render.DXVAHD.DXVAHD
Platforms
  • Windows 10, client editions (x86)
  • Windows 10, client editions (x64)
  • Windows Server 2016 (x64)
  • Windows 10, client editions (Arm64)
Supported Releases
  • Windows 10
  • Windows 10, version 1511
  • Windows 10, version 1607
  • Windows 10, version 1703
  • Windows 10, version 1709
  • Windows 10, version 1803
  • Windows 10, version 1809
  • Windows 10, version 1903
  • Next update to Windows 10
Expected run time (in minutes) 2
Category Compatibility
Timeout (in minutes) 120
Requires reboot false
Requires special configuration false
Type automatic

 

Additional documentation

Tests in this feature area might have additional documentation, including prerequisites, setup, and troubleshooting information, that can be found in the following topic(s):

Running the test

Before you run the test, complete the test setup as described in the test requirements: Graphic Adapter or Chipset Testing Prerequisites.

In addition, this test requires the following software:

  • A display driver that supports D3D9Caps.Caps3 D3DCAPS3_DXVAHD. Specifically:

    • D3D9 support exposing D3DCAPS3_DXVAHD.

    • Required output formats: D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8.

    • Required input formats: D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, D3DFMT_YUY2, D3DFMT_AYUV and any decode render targets supported.

  • dxvahdsw.dll.

Troubleshooting

For generic troubleshooting of HLK test failures, see Troubleshooting Windows HLK Test Failures.

For troubleshooting information, see Troubleshooting Device.Graphics Testing.

This test will for the most part just show a ticker-like window incrementing pass fail counts and showing which test case variables are being iterated upon.

The test will return Pass or Fail. The test might return SKIP if the driver does not expose D3DCAPS3_DXVAHD. Other test cases can skip based on stream state support, inverse telecine caps, filter caps, feature caps, and formats supported. To review test details, review the test log from the DTM Studio.

More information

After each SetVideoProcessBltState, call the corresponding GetVideoProcessBltState. The call ensures proper reporting, then processes and presents frames compared to the reference frames for accuracy. Most BltStates are cycled across for each full cycle of a given BltState, then again for each valid StreamState. However, some permutations are not necessary.

  • Verify invalid data types passed to SetVideoProcessBltState and GetVideoProcessBltState return E_INVALIDARG.

  • DXVAHD_BLT_STATE_TARGET_RECT_DATA

    • Verify Limiting Data to rect smaller than output surface results in correct scaling.

    • Verify a rect larger than the output surface results in an expanded frame.

    • Verify when target rect data is set and Enable flagged as false, that the entire surface is used.

    • Process one frame with target rect data and Enable set to false. Then process another frame with target rect data shrunken, expanded, or moved, and Enable is true. Verify the surface scales or moves accordingly.

    • Verify Default no data set results in entire surface being used.

  • DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA

    • Verify Default is RGB Black.

    • If YCbCr is set to true, verify correct color range for background is actually presented.

    • Verify RGB Orange (255,165, 0) along with default black value with alpha values for both RGB and YcbCr

    • with DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA

      • Verify that if Background Color of YCbCr is used and ColorSpaceData is of Full RGB_Range, that Full range RGB is ignored and the correct limited range is used per the specified Matrix and xvYCC setting.
    • with DXVAHD_BLT_STATE_ALPHA_FILL

      • Verify the alpha value of given background color when DXVAHD_ALPHA_FILL_MODE_BACKGROUND is used across different background colors.
  • DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA

    • Verify Default Usage, RGB_Range, YCbCr_Matrix, and YCbCr_xvYCC are all set to 0.

    • Verify Limiting RGB_Range successfully limits color range to 16..235.

    • Verify BT.709 correctly increases luma and chroma accordingly.

    • xvYCC successfully extends color range. This validation is a special case, because the reference video processor does not support any output surface other than XRGB. Validation of this is difficult, and the process will be documented at a later time.

    • Verify if DXVAHD_VPDEVCAPS.DeviceCaps does not have DXVAHD_DEVICE_CAPS_xvYCC. Validate YCbCr_xvYCC does not adjust any settings, and is truly ignored.

    • Tolerance is flexible initially, but the starting percentage of pixel precision is 90 percent accuracy.

  • DXVAHD_BLT_STATE_ALPHA_FILL_DATA

    • Verify that output surfaces not of Alpha format are unchanged.

    • Verify that output surfaces of Alpha format successfully apply alpha values to the color.

    • Verify default Mode adjusts Background Alpha values correctly.

      Test Input Surface of NonAlpha Format with an output surface of Alpha Format. Validate alpha correctness with again flexible precision, initially at 90 percent accuracy.

  • DXVAHD_BLT_STATE_CONSTRICTION_DATA

    • Due to lack of support in the Reference driver for the course of M2 constriction, test cases must be validated outside of direct 1:1 comparison for valid down-sampled sizes.

    • Verify correct down-sampling to the output surface.

    • If the size is greater than the target, verify that constriction is limited to the size of the target rect.

    • Attempt to set sizes to 0,* and *, 0 validate return value E_INVALIDARG.

    • If DXVAHD_VPDEVCAPS.FeatureCaps does not expose DXVAHD_FEATURE_CAPS_CONSTRICTION, then verify that error E_INVALIDARG is returned when Constriction is attempted to be set.

    • Verify that Default Value represents disabled. If disabled is flagged and a size is specified, the size value is ignored.

  • DXVAHD_BLT_STATE_PRIVATE_DATA

    • Pass invalid Guid, DataSize, and pData. Validate that driver handles accordingly.

    • Null pData retrieves correct size of the private blt state.

  • Verify invalid data types passed to SetVideoProcessStreamState and GetVideoProcessStreamState return E_INVALIDARG.

  • DXVAHD_STREAM_STATE_D3DFORMAT_DATA

    • Validate all supported formats reported by GetVideoProcessorInputFormats.

    • Validate an unsupported format in GetVideoProcessorInputFormats.

    • Validate default D3DFORMAT is D3DFMT_UNKNOWN.

  • DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA

    • Verify Default value is Progressive.

    • Verify Progressive and Interlaced formats are presented accordingly.

    • If DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED is not reported as supported by DXVAHD_VPDEVCAPS.InputFormatCaps, verify that using DXVAHD_FRAME_FORMAT_INTERLACED_* defaults to using Progressive.

  • DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA

    • Verify default values.

    • Verify Limiting RGB_Range successfully limits color range to 16..235.

    • If DXVAHD_VPDEVCAPS.InputFormatCaps does not report support for DXVAHD_INPUT_FORMAT_CAPS_RGB_LIMITED_RANGE, verify that when RGB_Range is 1, it is ignored and FullRange is used.

      • Limited range validation is not possible with a 1:1 comparison with the reference. Some loose validation of whites and blacks may be possible to validate the color range has been limited accordingly.
    • Verify BT.709 correctly increases luma and chroma sampling.

    • xvYCC successfully extends color range.

    • Verify that if DXVAHD_VPDEVCAPS.DeviceCaps does not report support for xvYCC.

    • If possible, and if processing is specified, validate increased color conversion performance.

    • Verify if DXVAHD_VPDEVCAPS.DeviceCaps does not have DXVAHD_DEVICE_CAPS_xvYCC. Validate YCbCr_xvYCC does not adjust any settings, and is truly ignored.

  • DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA

    • Test and validate default values (specifically interpolation occurs).

    • Test both NormalRate and HalfRate, verifying that NormalRate is 2:1 interlaced to progressive, and HalfRate is 1:1 interlaced to progressive.

    • Verify all CustomRates if GetVideoProcessorCustomRates exposes any.

      • Specify Inverse Telecine Rates

        • ITELECINE support will not be available in the reference video processor, so direct comparison is impossible. For validation, a telecine frame is generated and passed to the reference. Then the non-telecine frame is processed and compared to that of the frames provided by the telecine frame.
    • Test unsupported CustomRate, both interpolated and repeated.

    • Test unsupported CustomRate at both NormalRate and HalfRate. Verify that error E_INVALIDARG is returned.

    • Validate that supported CustomRates are not successfully set unless DXVAHD_OUTPUT_RATE_CUSTOM is specified.

  • DXVAHD_STREAM_STATE_SOURCE_RECT_DATA

    • Verify Limiting Data to rect smaller than input surface results in correct scaling.

    • Verify a rect larger than the input surface results in the clipped areas being transparent.

    • Verify when source rect data is set and Enable flagged as false, the entire surface is used.

    • Once one frame is processed with source rect data and Enable is false, then a second frame is processed with source rect data and Enable is true, verify that the surface is visible and scales according to the rect size to the input surface.

    • Verify Default no data set results in entire surface being used.

  • DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA

    • Verify Limiting Data to rect smaller than output surface results in correct scaling.

    • Verify a rect larger than the output surface results in the clipped areas being clipped.

    • Verify when destination rect data is set and Enable flagged as false, the entire surface is used.

    • Once one frame is processed with destination rect data and Enable is false, then a second frame is processed with destination rect data and Enable is true, verify that the output surface is visible and scales according to the rect size to the output surface.

    • Verify Default no data set results in entire surface being used.

  • DXVAHD_STREAM_STATE_ALPHA_DATA

    • All Alpha test cases require more than one video stream, therefore multiplying these test cases by two.

    • Verify default values alpha is disabled.

    • Verify Low, Mid, and High range alpha blending, and verify transparency.

    • Verify out of range float alpha value fails during processing.

    • Tolerance level for pixel precision is 10 percent. Precision should be greater than or equal to 90 percent accuracy.

  • DXVAHD_STREAM_STATE_PALETTE_DATA

    • With no palette entries set, validate that Null value returns zero.

    • With a specific number of palette entries set, validate that Null value returns the expected number of palette entries.

    • Test both 4-bit and 8-bit palletized fourCC formats.

    • Set both ARGB and AYUV mixed array of palette entries validate success.

    • Verify correct blending occurs when used with alpha blending.

    • Tolerance level for pixel precision is 10 percent. Precision should be greater than or equal to 90 percent accuracy.

  • DXVAHD_STREAM_STATE_CLEAR_RECT_DATA

    • If DXVAHD_VPDEVCAPS. FeatureCaps does not expose DXVAHD_FEATURE_CAPS_CLEAR_RECT, verify error E_INVALIDARG is returned when an attempt to use ClearRects occurs.

    • Verify Default CLEAR RECT State is disabled and not visible.

    • Verify CLEAR_RECT Outside the destrect is not visible.

    • Verify CLEAR_RECT Outside the destrect is successfully clipped.

  • DXVAHD_STREAM_STATE_LUMA_KEY_DATA

    • If DXVAHD_VPDEVCAPS. FeatureCaps does not expose DXVAHD_FEATURE_CAPS_LUMA_KEY, verify error E_INVALIDARG is returned.

    • When RGB input stream is used, and DXVAHD_VPDEVCAPS. FeatureCaps does not expose DXVAHD_FEATURE_CAPS_RGB_LUMA_KEY, verify that no luma is ignored.

    • Verify if Enable is set to false, luma is ignored.

    • Verify out-of-range values for lower and upper results in failure during Set state (E_INVALIDARG).

    • Verify default is Luma disabled, and values for Lower/Upper are 0.

    • Tolerance level for pixel precision is 10 percent. Precision should be greater than or equal to 90 percent accuracy.

  • DXVAHD_STREAM_STATE_FILTER_DATA

    • Verify default values (Disabled and DXVAHD_FILTER_RANGE_DATA.Default).

    • Verify when Enabled and Level is Default that presented stream is the same as when the filter is enabled.

    • Verify Level less than and greater than GetVideoProcessorFilterRange reported. Greater than should fail with E_INVALIDARG.

    • Tolerance level for pixel precision is 10 percent. Precision should be greater than or equal to 90 percent accuracy.

  • DXVAHD_STREAM_STATE_PRIVATE_DATA

    • Pass invalid Guid, DataSize, and pData. Validate that driver handles accordingly.

    • Null pData retrieves correct size of the private blt state.

Verify VideoProcessBltHD to pOutputSurface of surface types below are successful.

  • Default Surface used will be a swap chain.

  • DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT

  • RENDERTARGET

  • An Overlay swap chain.

  • Swap chains of all other types.

  • Standard supported output and input surface pixel formats, as well as output and input surface formats reported as supported for the given device.

Verify an OutputFrame value of 1 or higher, before frame 0 has been processed, results in E_INVALIDARG.

Validate Processing of OutputFrame 0 twice in a row, without any stream data changes, results in a paused frame.

Validate Processing of OutputFrame 0 twice, with stream data changes, still results in the cached data being presented (paused frame).

Verify Processing of Max, Mid, and Min Number of streams is successful.

Verify StreamCount Greater than or Less than the number of pStreams results in E_INVALIDARG.

Verify StreamCount of zero results in E_INVALIDARG.

DXVAHD_STREAM_DATA: Progressive normal/half rate, Progressive at 2/1, Interlaced at normal rate, Interlaced at half rate, Interlaced at 4/5

  • Enable one stream verify presented contents.

  • Two streams, main stream enabled with sub-stream disabled. Verify presented contents.

  • Two streams, main stream and sub-stream enabled. Verify presented contents.

  • Three streams, two streams used to compose main stream both enabled, and the third stream as the sub-stream disabled. Verify presented content.

  • Three streams, two streams used to compose main stream one enabled one disabled, and the third stream as the sub-stream disabled. Verify presented content.

  • Three streams, two streams used to compose main stream both enabled, and the third stream as the sub-stream enabled as well. Verify presented content.

  • Three streams, two streams used to compose main stream one enabled one disabled, and a third stream as the sub-stream enabled. Verify presented content.

  • Out-of-range PastFrames and FutureFrames.

  • Invalid PastFrames and FutureFrames, according to given PastSurfaces and FutureSurfaces.

  • Null PastSurfaces and FutureSurfaces, with non-zero PastFrames with FutureFrames.

  • All permutations of DXVAHD_SURFACE_TYPE_VIDEO_INPUT, DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE, Decode RenderTarget, and an off-screen plain surface across ppPastSurfaces, pInputSurfaces, ppFutureSurfaces.

  • Validate that ppPastSurfaces, pInputSurfaces, ppFutureSurfaces of an unsupported SurfaceType returns E_INVALIDARG.

  • Validate Surfaces allocated to memory pool of type other than DXVAHD_VPDEVCAPS.InputPool results in E_INVALIDARG.

Command syntax

Command option Description

DXVAHDVideoProcessing VideoProcessing

Without any options, the test enumerates all but some extreme invalid argument test cases.

TestPriority:[0, 1, 2]

By default tests at a priority 1 level however priority 2 will test every permutation including extreme invalid argument test cases. 0 is for BVT level.

SoftwareOnly

Tests only the software implementation of the video processor. This was mainly used for initial testing before drivers supported the test cases.

SaveAllFrames

The test has hard coded save count of invalid frames set to 100 if you want all of them saved then use this flag. Good for high frame count test case failures.

LogLevel:[0, 1, 2]

The test has the ability to be very verbose in its logging methods. By default level 0 is set however level one will gather increased logging info per test cases including many stream states/blt states set. Level 2 will gather all adjusted stream states and blt states as well as any configuration information.

 

File list

File Location

DXVAHDVideoProcessing.exe

[testbinroot]\nttest\windowstest\graphics\d3d\func\

Dxvahdsw.dll

[osbinroot]\nttest\windowstest\graphics\dxva\

 

Parameters

Parameter name Parameter description
LLU_NetAccessOnly LLU for net access
ConfigDisplayCommandLine Custom Command Line for ConfigDisplay. Default: logo
MODIFIEDCMDLINE Additional command line arguments for test executable