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


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

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

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

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

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

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

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