使用四个未压缩的图面进行解码
下表显示了一种假设情况,即视频解码器需要一个帧时间来解码每个图片。 它解码一个位流,该位流包含数量稳步增加的 B 图片,从初始的 I 图片之后的零 B 图片开始。 B 图片的位流发生在 P 图片对之间。 在此表中,字母显示每个图片 (I、B 或 P) 的类型,下标显示帧显示索引 (每个图片) 的临时显示顺序,上标显示包含图片的缓冲区的编号。
图片解码 | 图片显示 | 帧在间隔开始时解码 () |
---|---|---|
I⁰₀ |
0 |
|
P¹₁ |
1 |
|
P²₃ |
I⁰₀ |
2 |
B·ʻ |
P¹₁ |
3 |
P⁰₆ |
B·ʻ |
4 |
B¹₄ |
P²₃ |
5 |
Bー₅ |
B¹₄ |
6 |
P²₁₀ |
Bー₅ |
7 |
B¹₇ |
P⁰₆ |
8 |
Bー₈ |
B¹₇ |
9 |
B¹₉ |
Bー₈ |
10 |
P⁰₁₅ |
B¹₉ |
11 |
Bー₁₁ |
P²₁₀ |
12 |
B¹₁ー |
Bー₁₁ |
13 |
Bー₁₃ |
B¹₁ー |
14 |
B¹₁₄ |
Bー₁₃ |
15 |
P²ー₁ |
B¹₁₄ |
16 |
Bー₁₆ |
P²ー₁ |
17 |
B¹₁₇ |
Bー₁₆ |
18 |
Bー₁₈ |
B¹₁₇ |
19 |
B¹₁₉ |
Bー₁₈ |
20 |
Bーー₀ |
B¹₁₉ |
21 |
P⁰ー₈ |
Bーー₀ |
22 |
上表中的每张 B 图片都需要先按位流顺序解码两张以前的图片,然后才能对其进行解码。 因此,解码器无法开始显示具有适当时间的图片,直到第二张图片被解码 (,即,在第三次解码切片) 。 在此时间段的某个位置,可以开始显示具有适当时间的图片。
开始显示图片可能与屏幕上显示的图片不完全一致。 相反,显示器可能会继续显示发送的图片之前显示的图片,直到到达切换到新图片的适当时间。 为了获得最佳性能,不应覆盖保存第一张 I 图片) 的 surface 0 (以供三帧后到达的 B 图片使用,即使该 B 图片不需要该 B 图片进行引用。 相反,应使用图面 3) (第四个图面来保存该 B 图片。 这样就无需在解码 B 图片之前检查第一张 I 图片的显示周期是否已结束。
解码器 顺序要求 中描述的两个规则要求将前三个解码图片中的每张放置在不同的图面中,因为直到第三个周期 (2) 的某个时间,它们才显示。 然后,第四个解码的图片应放置在第四个图面中,因为第一个显示图片的显示可能尚未结束,直到第四个时间段 (3) 。
解码过程中存在一个重大障碍,因为连续有两张以上的 B 图片。 在上表中遇到第十张解码的图片 (B¹₉) 时,会出现这种情况。 当遇到连续序列中的第三张或后续 B 图片时,将消除显示一张 B 图片和使用图面保存下一张解码的 B 图片之间的时差容差。 主机解码器必须检查在 B¹₇) (前一时间段中显示的 B 图片的显示状态,以确保它已被从显示器中删除, (在必要时等待发生此情况) ,然后它必须立即使用相同的图面对下一个 B 图片进行解码, (用于 B¹₉) 的图面 1。 解码器无法将新 B 图片解码为用于保存其引用 I 或 P 图片的图面 (在本例中,用于 P⁰₆ 和 P²₁₀) 的图面,并且无法将新 B 图片解码为在相同时间间隔内显示的图面 (本例中, 用于 Bー₈) 的 surface 3。 因此,它必须使用在上一时间段中显示的图面 (在这种情况下,surface 1) 。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈