Compartir a través de


Establecer estados DXVA-HD

Durante el procesamiento de vídeo, el dispositivo microsoft DirectX Video Acceleration High Definition (DXVA-HD) mantiene un estado persistente de un fotograma al siguiente. Cada estado tiene un valor predeterminado documentado. Después de configurar el dispositivo, establezca los estados que desee cambiar de sus valores predeterminados. Antes de procesar cada fotograma, actualice los estados que deben cambiar.

Nota:

Este diseño difiere de DXVA-VP. En DXVA-VP, la aplicación debe especificar todos los parámetros vp con cada fotograma.

 

Los estados del dispositivo se dividen en dos categorías:

  • Los estados de flujo aplican cada flujo de entrada por separado. Puede aplicar diferentes configuraciones a cada secuencia.
  • Los estados de la barra de bits se aplican globalmente a toda la ranura de procesamiento de vídeo.

Se definen los siguientes estados de secuencia.

Estado de la secuencia Descripción
DXVAHD_STREAM_STATE_D3DFORMAT Formato de vídeo de entrada.
DXVAHD_STREAM_STATE_FRAME_FORMAT Entrelazado.
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE Espacio de color de entrada. Este estado especifica el intervalo de colores RGB y la matriz de transferencia YCbCr para la secuencia de entrada.
DXVAHD_STREAM_STATE_OUTPUT_RATE Velocidad de fotogramas de salida. Este estado controla la conversión de velocidad de fotogramas.
DXVAHD_STREAM_STATE_SOURCE_RECT Rectángulo de origen.
DXVAHD_STREAM_STATE_DESTINATION_RECT Rectángulo de destino.
DXVAHD_STREAM_STATE_ALPHA Alfa planar.
DXVAHD_STREAM_STATE_PALETTE Paleta de colores. Este estado solo se aplica a formatos de entrada palettized.
DXVAHD_STREAM_STATE_LUMA_KEY Tecla Luma.
DXVAHD_STREAM_STATE_ASPECT_RATIO Relación de aspecto de píxeles.
DXVAHD_STREAM_STATE_FILTER_Xxxx Configuración del filtro de imagen. El controlador puede admitir el brillo, el contraste y otros filtros de imagen.

 

Se definen los siguientes estados de bilit:

Estado de la barra de bits Descripción
DXVAHD_BLT_STATE_TARGET_RECT Rectángulo de destino.
DXVAHD_BLT_STATE_BACKGROUND_COLOR Color de fondo.
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE Espacio de colores de salida.
DXVAHD_BLT_STATE_ALPHA_FILL Modo de relleno alfa.
DXVAHD_BLT_STATE_CONSTRICTION Constricción. Este estado controla si el dispositivo reduce el muestreo de la salida.

 

Para establecer un estado de secuencia, llame al método IDXVAHD_VideoProcessor::SetVideoProcessStreamState . Para establecer un estado de blit, llame al método IDXVAHD_VideoProcessor::SetVideoProcessBltState . En ambos métodos, un valor de enumeración especifica el estado que se va a establecer. Los datos de estado se proporcionan mediante una estructura de datos específica del estado, que la aplicación convierte en un tipo void* .

En el ejemplo de código siguiente se establece el formato de entrada y el rectángulo de destino de la secuencia 0 y se establece el color de fondo en negro.

HRESULT SetDXVAHDStates(HWND hwnd, D3DFORMAT inputFormat)
{
    // Set the initial stream states.

    // Set the format of the input stream

    DXVAHD_STREAM_STATE_D3DFORMAT_DATA d3dformat = { inputFormat };

    HRESULT hr = g_pDXVAVP->SetVideoProcessStreamState(
        0,  // Stream index
        DXVAHD_STREAM_STATE_D3DFORMAT,
        sizeof(d3dformat),
        &d3dformat
        );

    if (SUCCEEDED(hr))
    { 
        // For this example, the input stream contains progressive frames.

        DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA frame_format = { DXVAHD_FRAME_FORMAT_PROGRESSIVE };
        
        hr = g_pDXVAVP->SetVideoProcessStreamState(
            0, // Stream index
            DXVAHD_STREAM_STATE_FRAME_FORMAT,
            sizeof(frame_format),
            &frame_format
            );
    }

    if (SUCCEEDED(hr))
    { 
        // Compute the letterbox area.

        RECT rcDest;
        GetClientRect(hwnd, &rcDest);

        RECT rcSrc;
        SetRect(&rcSrc, 0, 0, VIDEO_WIDTH, VIDEO_HEIGHT);

        rcDest = LetterBoxRect(rcSrc, rcDest);

        // Set the destination rectangle, so the frame is displayed within the 
        // letterbox area. Otherwise, the frame is stretched to cover the 
        // entire surface.

        DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA DstRect = { TRUE, rcDest };

        hr = g_pDXVAVP->SetVideoProcessStreamState(
            0, // Stream index 
            DXVAHD_STREAM_STATE_DESTINATION_RECT,
            sizeof(DstRect),
            &DstRect
            );
    }

    if (SUCCEEDED(hr))
    { 
        DXVAHD_COLOR_RGBA rgbBackground = { 0.0f, 0.0f, 0.0f, 1.0f };  // RGBA

        DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA background = { FALSE, rgbBackground };

        hr = g_pDXVAVP->SetVideoProcessBltState(
            DXVAHD_BLT_STATE_BACKGROUND_COLOR,
            sizeof (background),
            &background
            );
    }

    return hr;
}

DXVA-HD