Настройка состояний DXVA-HD
Во время обработки видео устройство Microsoft DirectX Video Acceleration High Definition (DXVA-HD) поддерживает постоянное состояние от одного кадра к следующему. У каждого штата есть установленное по умолчанию значение. После настройки устройства задайте все состояния, которые вы хотите изменить с их значений по умолчанию. Перед обработкой каждого кадра обновите все состояния, которые следует изменить.
Заметка
Эта конструкция отличается от DXVA-VP. В DXVA-VP приложение должно указать все параметры VP с каждым кадром.
Состояния устройства делятся на две категории:
- состояния потока применяются к каждому входному потоку отдельно. К каждому потоку можно применять различные параметры.
- состояния Blit применяются глобально ко всему процессу обработки видео.
Определены следующие состояния потока.
Состояние потока | Описание |
---|---|
DXVAHD_STREAM_STATE_D3DFORMAT | Формат входного видео. |
DXVAHD_STREAM_STATE_FRAME_FORMAT | Переплетение. |
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE | Входное цветовое пространство. Это состояние указывает диапазон цветов RGB и матрицу передачи YCbCr для входного потока. |
DXVAHD_STREAM_STATE_OUTPUT_RATE | Частота выходных кадров. Это состояние управляет преобразованием частоты кадров. |
DXVAHD_STREAM_STATE_SOURCE_RECT | Исходный прямоугольник. |
DXVAHD_STREAM_STATE_DESTINATION_RECT | Прямоугольник назначения. |
DXVAHD_STREAM_STATE_ALPHA | Planar alpha. |
DXVAHD_STREAM_STATE_PALETTE | Цветовая палитра. Это состояние применяется только к палеттированным форматам входных данных. |
DXVAHD_STREAM_STATE_LUMA_KEY | Ключ Luma. |
DXVAHD_STREAM_STATE_ASPECT_RATIO | Пропорции пикселей. |
DXVAHD_STREAM_STATE_FILTER_Xxxx | Параметры фильтра изображений. Драйвер может поддерживать яркость, контрастность и другие фильтры изображений. |
Определены следующие состояния blit:
Состояние Blit | Описание |
---|---|
DXVAHD_BLT_STATE_TARGET_RECT | Целевой прямоугольник. |
DXVAHD_BLT_STATE_BACKGROUND_COLOR | Цвет фона. |
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE | Выходное цветовое пространство. |
DXVAHD_BLT_STATE_ALPHA_FILL | Режим альфа-заливки. |
DXVAHD_BLT_STATE_CONSTRICTION | Сужение. Эта функция контролирует, понижает ли устройство разрешение выходных данных. |
Чтобы задать состояние потока, вызовите метод IDXVAHD_VideoProcessor::SetVideoProcessStreamState. Чтобы задать состояние blit, вызовите метод IDXVAHD_VideoProcessor::SetVideoProcessBltState. В обоих из этих методов значение перечисления указывает состояние, которое нужно установить. Данные состояния предоставляются с использованием структуры данных, зависящей от специфики состояния, которое приложение преобразует в тип void*.
Следующий пример кода задает формат ввода и прямоугольник назначения для потока 0 и задает цвет фона черным.
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;
}
Связанные разделы