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


Синхронизация операций декодирования видео

Механизм синхронизации для DirectX VA 2.0 улучшен по версии 1.0 и больше похож на механизмы синхронизации, используемые операциями Microsoft Direct3D.

В DirectX VA 1.0 синхронизация выполняется в основном декодером. Прежде чем декодер сможет использовать сжатый буфер, он вызывает функцию DdMoCompQueryStatus , чтобы определить, доступен ли буфер для использования (то есть оборудование не обращается к буферу). Если буфер недоступен, декодер должен находиться в спящем режиме, опрашивать или выполнять другую операцию.

DirectX VA 2.0 использует модель синхронизации, которую Direct3D уже использует для буферов вершин и буферов индексов. В DirectX VA 2.0 синхронизация выполняется декодером, блокирующим сжатый буфер. Если драйвер отображения пользовательского режима пытается заблокировать сжатый буфер и буфер используется, драйвер может либо завершить блокировку, либо переименовать буфер. Драйвер отображения пользовательского режима запрашивает переименование буфера диспетчером видеопамяти, когда драйвер задает элемент Отменить структуры D3DDDICB_LOCKFLAGS в вызове функции pfnLockCb . Если драйвер отображения пользовательского режима переименовывает буфер, драйвер возвращает указатель на альтернативный буфер, чтобы декодер мог продолжать работу без блокировки.

Как правило, для DirectX VA 2.0 синхронизация возникает только в том случае, если оборудование может использовать сжатые буферы напрямую без дополнительных копий буферов.