Поделиться через


Создание DXVA-HD видеоповерхностей

Приложение должно создать одну или несколько поверхностей Direct3D для использования для входных кадров. Эти элементы должны быть размещены в пуле памяти, указанном членом InputPool структуры DXVAHD_VPDEVCAPS. Можно использовать следующие типы поверхностей:

  • Видеоповерхность создаётся путём вызова IDXVAHD_Device::CreateVideoSurface с указанием типа DXVAHD_SURFACE_TYPE_VIDEO_INPUT или DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE видеоповерхности. Этот тип поверхности эквивалентен простой поверхности вне экрана.
  • Область отрисовки декодирования, созданная путем вызова IDirectXVideoAccelerationService::CreateSurface и указания типа поверхности DXVA2_VideoDecoderRenderTarget. Этот тип поверхности используется для декодирования DXVA.
  • Плоская поверхность вне экрана.

В следующем коде показано, как выделить область видео, используя CreateVideoSurface:

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