同步视频解码操作

DirectX VA 2.0 的同步机制从 1.0 版本得到改进,更类似于 Microsoft Direct3D 操作使用的同步机制。

在 DirectX VA 1.0 中,同步主要由解码器执行。 在解码器可以使用压缩缓冲区之前,它会调用 DdMoCompQueryStatus 函数来确定缓冲区是否可用于 (即硬件无法访问缓冲区) 。 如果缓冲区不可用,解码器必须睡眠、轮询或执行其他操作。

DirectX VA 2.0 使用 Direct3D 已在顶点缓冲区和索引缓冲区上使用的同步模型。 在 DirectX VA 2.0 中,同步由锁定压缩缓冲区的解码器执行。 如果用户模式显示驱动程序尝试锁定压缩的缓冲区,并且缓冲区正在使用中,则驱动程序可能会使锁定失败或重命名缓冲区。 用户模式显示驱动程序请求在调用 pfnLockCb 函数时,当驱动程序设置 D3DDDICB_LOCKFLAGS 结构的 Discard 成员时,视频内存管理器重命名缓冲区。 如果用户模式显示驱动程序重命名缓冲区,驱动程序将返回指向备用缓冲区的指针,以便解码器可以继续,而不会被阻止。

通常,对于 DirectX VA 2.0,仅当硬件可以直接使用压缩的缓冲区而无需额外的缓冲区副本时,同步才成为问题。