Sincronización de las operaciones de descodificación de vídeo

El mecanismo de sincronización para DirectX VA 2.0 se ha mejorado a partir de la versión 1.0 y es más similar a los mecanismos de sincronización que usan las operaciones de Microsoft Direct3D.

En DirectX VA 1.0, la sincronización se realiza principalmente mediante el descodificador. Antes de que el descodificador pueda usar un búfer comprimido, llama a la función DdMoCompQueryStatus para determinar si el búfer está disponible para su uso (es decir, el hardware no tiene acceso al búfer). Si el búfer no está disponible, el descodificador debe suspenderse, sondear o realizar otra operación.

DirectX VA 2.0 usa el modelo de sincronización que Direct3D ya usa en búferes de vértices y búferes de índice. En DirectX VA 2.0, la sincronización se realiza mediante el descodificador que bloquea el búfer comprimido. Si el controlador de pantalla en modo de usuario intenta bloquear el búfer comprimido y el búfer está en uso, el controlador puede producir un error en el bloqueo o cambiar el nombre del búfer. El controlador de visualización en modo de usuario solicita que el administrador de memoria de vídeo cambie el nombre del búfer cuando el controlador establece el miembro Descartar de la estructura de D3DDDICB_LOCKFLAGS en una llamada a la función pfnLockCb . Si el controlador de pantalla en modo de usuario cambia el nombre del búfer, el controlador devuelve un puntero a un búfer alternativo para que el descodificador pueda continuar sin bloquearse.

Normalmente, para DirectX VA 2.0, la sincronización solo es un problema si el hardware puede consumir los búferes comprimidos directamente sin copias de búfer adicionales.