序列要求

必须遵守加速器和解码器的序列要求,以避免解码过程中出现争用情况以及解码器和加速器的不当操作。

加速器

查询时,硬件加速器会报告未压缩图面的显示是挂起还是正在进行,以及请求的操作是否已完成。 但是,主机软件解码器 (而不是加速器) 负责确保争用条件在解码过程中不会导致不良行为。

解码 器

解码器必须遵循两个规则才能正确解码和显示未压缩的表面:

  1. 请勿覆盖已提交以供显示的任何图片,除非该图片已显示在显示器上,并且已从显示器中删除。

  2. 请勿覆盖创建其他尚未创建的图片所需的任何图片作为参考。

遵循这些规则可确保解码过程中顺序操作的正确操作,并避免在显示器上撕裂项目。 指导规则是: 不要写下引用或显示所需的内容,并避免争用条件。

为了避免争用条件,软件解码器必须查询加速器的状态。 解码器还必须使用足够数量的未压缩图片图面,以确保空间可用于所有必要的操作。 这导致至少需要四个未压缩的图片图面来解码包含 I、B 和 P 图片的视频流。 通常鼓励使用四个以上的表面,并且对于某些操作(如前端 alpha 混合)是必需的。 (使用额外的图面可以显著减少等待解决操作依赖项的需求。)

使用 四个未压缩的图面 进行解码和使用 五个或多个未压缩的 Surface 进行解码中提供了示例,这些示例演示在没有使用除阻筛选器) 的情况下 (传统 I、B 和 P 结构化视频帧的解码。

注意 对于压缩缓冲区以及未压缩的图面,通常最好循环访问已分配的和可用的缓冲区,而不是继续使用相同的缓冲区或分配的缓冲区的同一子集。 这可以减少等待不必要的依赖项导致延迟增加的可能性。 驱动程序分配多个缓冲区应被视为指示循环使用这些缓冲区进行双重或三重缓冲是操作和避免项目(如临时图片冻结)的正确方法。 这尤其适用于 alpha 混合数据加载。