Erstellen von DXVA-HD-Videooberflächen

Die Anwendung muss eine oder mehrere Direct3D-Oberflächen erstellen, die für die Eingabeframes verwendet werden sollen. Diese müssen im Speicherpool zugeordnet werden, der vom InputPool-Member der DXVAHD_VPDEVCAPS-Struktur angegeben wird. Die folgenden Oberflächentypen können verwendet werden:

  • Eine Videooberfläche, die durch Aufrufen von IDXVAHD_Device::CreateVideoSurface und Angabe des DXVAHD_SURFACE_TYPE_VIDEO_INPUT oder DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE Oberflächentyps erstellt wird. Dieser Oberflächentyp entspricht einer einfachen Oberfläche außerhalb des Bildschirms.
  • Eine Decoder-Renderzieloberfläche, die durch Aufrufen von IDirectXVideoAccelerationService::CreateSurface und Angeben des DXVA2_VideoDecoderRenderTarget Oberflächentyps erstellt wird. Dieser Oberflächentyp wird für die DXVA-Decodierung verwendet.
  • Eine einfache Oberfläche außerhalb des Bildschirms.

Der folgende Code zeigt, wie Sie eine Videooberfläche mithilfe von CreateVideoSurface zuordnen:

    // Create the video surface for the primary video stream.
    hr = pDXVAHD->CreateVideoSurface(
        VIDEO_WIDTH,
        VIDEO_HEIGHT,
        VIDEO_FORMAT,
        caps.InputPool,
        0,  // Usage
        DXVAHD_SURFACE_TYPE_VIDEO_INPUT,
        1,      // Number of surfaces to create
        &pSurf, // Array of surface pointers
        NULL
        );

DXVA-HD