Freigeben über


Überlegungen zur DXVA-HD DDI-Programmierung

Dieser Abschnitt gilt nur für Windows 7 und höher sowie Windows Server 2008 R2 und höhere Versionen des Windows-Betriebssystems.

Wenn Sie DXVA-HD DDI in Ihrem Benutzermodusanzeigetreiber implementieren, sollten Sie die folgenden Programmiertipps berücksichtigen:

  • Der Treiber muss das bit D3DCAPS3_DXVAHD (0x00000400L) in der Caps3-Struktur der D3DCAPS9-Struktur festlegen, um anzugeben, dass dxVA-HD DDI unterstützt wird. Andernfalls kann die Direct3D-Runtime die CreateVideoProcessor-Funktion nicht aufrufen, um ein DXVA-HD-Gerät zu erstellen. Die D3DCAPS9-Struktur wird in der DirectX 9.0 SDK-Dokumentation beschrieben. Der Treiber legt das D3DCAPS3_DXVAHD Bit als Reaktion auf einen Aufruf seiner GetCaps-Funktion fest, in der der D3DDDICAPS_GETD3D9CAPS-Wert im Element Type der D3DDDIARG_GETCAPS Struktur festgelegt wird, auf die der pData-Parameter verweist.

  • Der DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE-Wert der DXVAHD_SURFACE_TYPE-Enumeration auf Anwendungsebene weist keinen entsprechenden DDI-Wert auf. Eine Anwendung legt den DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE Wert für eine einfache Oberfläche außerhalb des Bildschirms fest, die in einem anderen Formattyp für die CPU oder ein Shader-Basis-Videoprozessor-Plug-In zugeordnet ist.

  • Der DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT Wert der DXVAHD_SURFACE_TYPE-Enumeration auf Anwendungsebene entspricht dem VideoProcessRenderTarget-Bitfeldflag der D3DDDI_RESOURCEFLAGS-Struktur . Die Direct3D-Runtime legt VideoProcessRenderTarget im Flags-Member der D3DDDIARG_CREATERESOURCE-Struktur fest, wenn die Runtime die CreateResource-Funktion des Treibers aufruft, um ein Renderziel für die Videoverarbeitung zu erstellen.

  • Die Direct3D-Runtime verwaltet sowohl Bitblockübertragung (Bitblt) als auch Streamzustände. Die Runtime kehrt zur Anwendung zurück, wenn die Runtime abgefragt wird.

  • Die IDXVAHD_VideoProcessor::GetVideoProcessBltState-Methode auf Anwendungsebene verfügt über keine entsprechende DDI-Funktion. Wenn eine Anwendung jedoch IDXVAHD_VideoProcessor::GetVideoProcessBltState aufruft , um die privaten Bitblt-Zustandsdaten für einen Videoprozessor abzurufen, ruft die Direct3D-Runtime die GetVideoProcessBltStatePrivate-Funktion des Treibers auf.

  • Die IDXVAHD_VideoProcessor::GetVideoProcessStreamState-Methode auf Anwendungsebene verfügt über keine entsprechende DDI-Funktion. Wenn eine Anwendung jedoch IDXVAHD_VideoProcessor::GetVideoProcessBltState aufruft , um die daten des privaten Datenstromzustands für einen Videoprozessor abzurufen, ruft die Direct3D-Runtime die GetVideoProcessStreamStatePrivate-Funktion des Treibers auf.

  • Der DXVAHD_STREAM_STATE_D3DFORMAT Wert der DXVAHD_STREAM_STATE-Enumeration auf Anwendungsebene weist keinen entsprechenden DDI-Wert in der DXVAHDDDI_STREAM_STATE-Enumeration auf. Das Videoprozessor-Plug-In verwendet den DXVAHD_STREAM_STATE_D3DFORMAT-Wert für eine Oberfläche, die dem DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE-Wert der DXVAHD_SURFACE_TYPE-Enumeration auf Anwendungsebene zugeordnet ist.

  • Die DXVAHD_DEVICE_TYPE-Enumeration verfügt über keine entsprechende DDI-Enumeration (z. B. keine DXVAHDDDI_DEVICE_TYPE). Das erste Element der DXVAHDDDI_VPDEVCAPS-Struktur ist reserviert, während das erste Element der DXVAHD_VPDEVCAPS-Struktur auf Anwendungsebene auf einen DXVAHD_DEVICE_TYPE Wert im DeviceType-Element festgelegt ist. Das DeviceType-Element wird von der Runtime oder dem Videoprozessor-Plug-In festgelegt, das den Treiber immer als DXVAHD_DEVICE_TYPE_HARDWARE meldet.

  • Das Multiplikatorelement der DXVAHDDDI_FILTER_RANGE_DATA-Struktur ist ein Gleitkommawert. Der Treiber sollte einen Wert verwenden, der genau als Basisbruch 2 dargestellt werden kann. Beispielsweise kann 0,25 genau als Basisbruch 2 dargestellt werden, aber 0.1 nicht.

  • Jede DXVA-HD DDI-Funktion sollte S_OK, E_INVALIDARG oder E_OUTOFMEMORY zurückgeben.