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;
}
Temas relacionados