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


Декодирование видео

Среда выполнения Microsoft Direct3D вызывает функции DecodeBeginFrame и DecodeEndFrame драйвера отображения в пользовательском режиме, чтобы указать период времени между этими вызовами, в течение которого драйвер может декодировать видео. Прежде чем драйвер отображения в пользовательском режиме может выполнять любые операции декодирования видео, среда выполнения Microsoft Direct3D должна вызвать функцию драйвера setDecodeRenderTarget драйвера в режиме пользователя, чтобы задать целевую область отрисовки для этих операций декодирования. Однако вызов SetDecodeRenderTarget может происходить только за пределами периода времени начала и окончания кадра.

В защищенном режиме и при вызове DecodeBeginFrame среда выполнения Direct3D задает или изменяет ключ содержимого DirectX VA в переменной, на которую указывает член pPVPSetKey структуры D3DDDIARG_DECODEBEGINFRAME. Устройство декодирования использует этот ключ для защищенной передачи сжатых буферов DirectX VA для этих и последующих кадров.

Заметка Среда выполнения Direct3D задает указатель pPVPSetKey только для изменения или задания ключа. Чтобы сохранить ранее заданный ключ в использовании, среда выполнения устанавливает указатель в NULL, чтобы избежать потенциально времязатратной перезагрузки одного и того же ключа. Драйвер не устраняет избыточные параметры. Приложение декодировщика должно избежать избыточных параметров.

После установки целевой области отрисовки для операций декодирования драйвер отображения в пользовательском режиме может получать вызовы к функции DecodeExecute для выполнения операций декодирования видео между начальным кадром и конечным периодом времени.

При вызовах DecodeExecute не все типы буферов, специфицированные в членах CompressedBufferType структур DXVADDI_DECODEBUFFERDESC массива pCompressedBuffers структуры D3DDDIARG_DECODEEXECUTE, используются для каждого идентификатора GUID декодирования, который определяет элемент hDecode в D3DDDIARG_DECODEEXECUTE. Например, буферы среза (D3DDDIFMT_SLICECONTROLDATA), инверсная квантизация (D3DDDIFMT_INVERSEQUANTIZATIONDATA) и буферы битового потока (D3DDDIFMT_BITSTREAMDATA) требуются только для обработки декодирования переменной длины (VLD), а буфер деблокировки управления (D3DDDIFMT_DEBLOCKINGDATA) вообще не используется MPEG-2.

В защищенном режиме буферы, зашифрованные для защищенной передачи с ключом для содержимого, содержат указатель на начальные значения счетчиков в дескрипторах буфера (т. е. в переменных, на которые указывают члены структур pCipherCounterDXVADDI_DECODEBUFFERDESC). Каждый вызов функции ДекодеExecute драйвера в пользовательском режиме должен выполнять защищенный перенос таких буферов в локальную видеопамять, прежде чем ДекодеExecute использует данные буферов в операции декодирования. Однако не планируется шифровать сжатые буферы DirectX VA типов, отличных от остаточного различия (D3DDDIFMT_RESIDUALDIFFERENCEDATA) и битового потока (D3DDDIFMT_BITSTREAMDATA).