Настройка состояний 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;
}
Связанные темы