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


Создание видео surface 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