现在的位置: 首页 > 综合 > 正文

h.264qq群讨论记录

2013年10月07日 ⁄ 综合 ⁄ 共 30519字 ⁄ 字号 评论关闭

这是本群 2006 年 8 月 29 日晚第四次研讨会的部分聊天记录,目的是帮初学者弄清楚标准和 JM 代码是如何联系在一起的。
其中提及的代码是原始的 JM86 解码器代码(下载地址:http://iphome.hhi.de/suehring/tml/),提及的标准是 200503 版的标准(下载地址:http://www.itu.int/rec/T-REC-H.264-200503-I/en)。

2006年8月29日

firstime
(500144) 20:40:54
首先我们先讲一下码流结构


----------------------------------------------------------------------------------------------------------------------------------------------------------

shirley
(250610658) 20:41:00
我进不去

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:41:09
H.264 码流是由一个个 NALU 组成的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:42:06
而 NALU 又是由 NALU 头和 RBSP 数据组成

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:42:33
这体现在标准文档中就是 7.3.1 小节

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:42:41
请大家打开 7.3.1 小节

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:43:39
在第 7 章的 Syntax 表中,我们可以看见很多加粗了的字体

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:44:04
凡是加粗了的字体都是需要编码的语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:44:23
7.3.1 第一个加粗的字体是 forbidden_zero_bit

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:44:59
最后一列是 f(1)
这说明该语法元素采用 1 比特定长编码

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:45:31
那么 forbidden_zero_bit 到底是什么意思呢

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:45:44
7.4.1 小节中做了解释

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:46:43
7.3.1 第二个加粗的字体是 nal_ref_idc,该行最后一列是 u(2),这说明该语法元素采用 u(2) 方式编码

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:47:17
那么 u(2) 是什么编码方式呢?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:47:39
7.3 节上面的段落做了说明

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:48:08
对包括 ue、u、te等等编码方式都在那里做了说明

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:49:03
7.3.1 第三个加粗的字体是 nal_unit_type,该语法元素编码方式我就不说了,跟前一个语法元素 nal_ref_idc 是同样道理

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:49:48
所有加粗的字体到底表示什么含义在 Semantics 一部分中都有相应说明

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:50:10
例如 7.3.1 小节中加粗字体的说明 就是 7.4.1 小节中

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:51:17
7.3.2.1 小节中加粗的字体的说明就在 7.4.2.1 小节中,7.3 节与 7.4 节是完全对应的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:51:49
7.3.1 小节说明了一个 NALU 的结构

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:52:10
也就是说对于一个 H.264 码流

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:52:47
对于一个 H.264 码流中的一个 NALU ,该 NALU 的第一个比特必然是表示 forbidden_zero_bit

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:53:01
该 NALU 的第二、三个比特必然是表示 nal_ref_idc

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:53:27
该 NALU 的第四~八个比特必然是表示 nal_unit_type

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:54:15
那么对于解码器,解码 H.264 码流必然要按顺序处理这些语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

丘比特神箭
(50953531) 20:54:24
可以打断一下吗?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:54:37
你有什么事

----------------------------------------------------------------------------------------------------------------------------------------------------------

丘比特神箭
(50953531) 20:55:15
可否顺便把本地解码和RTP解码一块说下,有些不明白两个码流的结构

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:55:41
最后来讲
有疑问请先写到纸上

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:56:03
我们看一下 JM 解码器是如何按顺序处理这些语法元素的

----------------------------------------------------------------------------------------------------------------------------------------------------------

Pertinax
(54411308) 20:56:07
建议安排专门的时间提问.

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:56:16
请打开 JM86

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:56:22
找到 main 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:57:24
main 函数中 decode_one_frame 以前的部分不做分析,因为这些部分都是一些初始化工作,以及读文件操作,并没有解码

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:57:34
我们进入 decode_one_frame 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:57:55
再进入 read_new_slice 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:58:17
read_new_slice 函数的主要作用是读取 NALU 单元数据

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:58:29
附带做一些解码的准备工作

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:59:10
在 read_new_slice 函数中
我们最先遇到的两个函数是 GetAnnexbNALU 和 GetRTPNALU

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 20:59:35
这两个函数由一个 if 语句控制,选择调用

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:00:24
这就涉及到 H.264 的两种码流格式
GetAnnexbNALU 处理字节流格式的码流
GetRTPNALU 处理 RTP 格式码流

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:01:20
字节流格式的码流主要用于存储,例如制作 DVD(当然现在的 DVD 还不是用 H.264)

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:01:41
RTP 格式码流主要用于网络传送,例如在线看电影

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:01:56
现在我们进入 GetAnnexbNALU 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:02:48
在 GetAnnexbNALU 函数 中,我们可以看见一下三行语句:
nalu->forbidden_bit = (nalu->buf[0]>>7) & 1;
nalu->nal_reference_idc = (nalu->buf[0]>>5) & 3;
nalu->nal_unit_type = (nalu->buf[0]) & 0x1f;

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:03:12
第一行就是解码器在处理 7.3.1 小节中的第一个语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:03:29
第二行就是解码器在处理 7.3.1 小节中的第二个被加粗的语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:05:09
我们知道 H.264 码流的第一个 NALU 是 SPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:05:32
所以 7.3 部分接下来就描述了 SPS 的语法结构

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:06:01
那么解码器下一步工作当然是要解码 SPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:06:20
我们先看一下标准中 SPS 的结构,请看 7.3.2.1 小节

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:06:50
加粗的字体就是被编码的语法元素,也就是解码器必须解码的语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:07:19
而且解码器必须按照 7.3 部分中加粗字体的顺序来解码

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:07:58
对于 SPS,按照 7.3.2.1 的规定,解码器必须首先解码 profile_idc

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:08:44
profile_idc 后面的 u(8) 我就不说什么意思了
刚才已经解释过了,profile_idc 的含义我也不说了,在 7.4.2.1 小节中有解释

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:09:07
那么我们看看解码器到底是不是按照 7.3.2.1 规定来做的呢

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:10:05
请看 read_new_slice 函数的 case 语句

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:10:18
也就是第 576 行

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:10:59
根据 NALU 的头解析出来的 nal_unit_type

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:11:21
解码器会进行不同 NALU 单元的处理
大家可以浏览一下

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:11:41
这个 switch 语句中包括对 一般 slice 的处理

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:11:46
对 IDR 的处理

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:12:05
对 DP1、DPB、DPC 的处理

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:12:28
包括对 SPS、PPS 的处理
等等

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:12:47
解码器现在遇到的第一个 NALU 是 SPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:13:41
因此解码器经过解析之后的 nal_unit_type 的值必然为 7

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:14:13
解码器就会跳转到 case NALU_TYPE_SPS
并进入 ProcessSPS 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:14:20
我们跟进 ProcessSPS 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:16:25
该函数中最重要的函数是 InterpretSPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:16:29
我们跟进它

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:16:53
进入这个函数之后,发现什么了?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:17:09
第 77 行是什么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:17:24
第 77 行就是在从码流中解码 profile_idc

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:18:45
u_v 是一个函数,该函数的作用就是按 7.3.2.1 小节第二行最后一列的 u(8) 规定的编码方式解码 profile_idc

----------------------------------------------------------------------------------------------------------------------------------------------------------

406088589
(406088589) 21:19:01
打扰一下,能不能说一下哪行是什么内容

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:19:31
看见第 77 行的那个 8 了么?就是7.3.2.1 小节第二行最后一列的 u(8) 指定的那个 8

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:20:40
再看第 79、80、81 行在干什么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

lingzhen
(22818452) 21:20:42
请继续,请不要随意打断

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:21:03
他们分别在解码 constrained_set0_flag、constrained_set1_flag、constrained_set2_flag

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:21:20
解码器为什么要在这里解码这三个语法元素呢?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:22:10
因为标准的 7.3.2.1 小节规定了 profile_idc 之后是这三个语法元素,所以解码器必须在这里解码这三个语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:22:31
那么解码器到底该以什么方式解码这三个语法元素呢?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:23:00
标准的 7.3.2.1 小节第三、四、五行最后一列都规定好了

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:23:12
都采用 u(1)

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:23:27
u(1) 在解码器代码中就是 u_1

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:23:34
u(1) 在解码器代码中就是 u_1 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:24:05
InterpretSPS 函数接下来的一长串的代码在做什么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:24:14
你们看明白了么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

Aries*Kevin
(18820403) 21:24:21
明白

----------------------------------------------------------------------------------------------------------------------------------------------------------

406088589
(406088589) 21:24:26

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:24:41
对,就是在按照 7.3.2.1 小节规定的顺序挨着解码每个语法元素

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:25:24
具体内容请大家下来自己慢慢对照分析

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:25:30
SPS 我就讲到这里

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:25:46
H.264 码流的第二个 NALU 是什么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

Aries*Kevin
(18820403) 21:25:54
[自定义表情]

----------------------------------------------------------------------------------------------------------------------------------------------------------

李鹏
(3776473) 21:26:00
idr

----------------------------------------------------------------------------------------------------------------------------------------------------------

Maha MAN
(47946245) 21:26:06
pps

----------------------------------------------------------------------------------------------------------------------------------------------------------

最初的梦想
(124779275) 21:26:23
pps

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:26:46
是 PPS,所以解码器下一步必然会跳转到 read_new_slice 函数中的 case NALU_TYPE_PPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:27:02
并调用 ProcessPPS 函数,我们进这个函数看一下

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:27:27
ProcessPPS 函数里最重要的函数仍然是 InterpretPPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:27:32
我们再进去

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:27:57
请从第 145 行开始看,从 145 行以后的代码在做什么?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:28:50
是的,在完全按照标准 7.3.2.2 小节规定的内容解码 PPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:29:25
没什么难度,我们的 PPS 也就不分析了

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:30:43
H.264 码流的第三个 NALU 假设是 IDR(因为有可能是定界符,我记不清楚了,毕厚杰的书上有一个图)

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:31:29
那么解码器就要跳转到 read_new_slice 函数中的 case NALU_TYPE_IDR

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:32:05
我们直接看第 596 行

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:32:17
进入 FirstPartOfSliceHeader 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

真天才
(15311062) 21:32:45

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:33:36
因为 H.264 中的图像都是按照片来组织的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:34:11
因此片作为最大的语法结构而存在

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:34:19
不考虑片组

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:34:28
正如我论文中讲的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:34:47
我们再回头来说一下 NALU

----------------------------------------------------------------------------------------------------------------------------------------------------------

萝卜
(43696314) 21:34:55
论文?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:35:29
刚才我们已经知道了 H.264 码流是一个个 NALU 拼在一起的,首尾相连

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:35:50
每个 NALU 由头和体组成

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:37:07
NALU 头就是刚才我们看的 7.3.1 小节中的三个粗体字forbidden_zero_bit(1比特)、nal_ref_idc(2比特)、nal_unit_type(5比特)

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:37:34
NALU 体就是 RBSP 数据

----------------------------------------------------------------------------------------------------------------------------------------------------------

~枝 [路]
(14517405) 21:37:51
EBSP

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:38:04
恩,可能我记错了

----------------------------------------------------------------------------------------------------------------------------------------------------------

yatany
(5815326) 21:38:13
是RBSP:)

----------------------------------------------------------------------------------------------------------------------------------------------------------

jimmy
(20292042) 21:38:18
EBSP:在RBSP的基础上增加了防止伪起始码字节(仿校验字节)(0X03)

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:38:33
EBSP 数据又是由一个个片组成的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:38:44
片又由片头和片数据组成

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:39:21
所以解码器取出整个片数据后,接下来必然要处理片头

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:39:48
刚才我们已经进入到了 FirstPartOfSliceHeader 函数,从这个函数的名字上,我们就已经知道它在做什么了

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:40:05
那么解码器在这个函数里具体该怎么做呢?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:40:38
标准 7.3.3 小节已经做了规定

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:41:11
所以解码器必然是按照标准 7.3.3 小节规定的顺序来做的
请大家看对照一下 7.3.3 小节和 FirstPartOfSliceHeader 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:42:19
标准 7.3.3 小节规定的其他内容当然是在 RestOfSliceHeader 函数里完成了

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:43:14
虽然标准 7.3.3 小节规定的内容被分到了两个函数中进行处理

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:43:40
但是解码器必然不可能打乱标准 7.3.3 小节规定的顺序

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:44:22
所以虽然在解码器代码中的 FirstPartOfSliceHeader 函数与 RestOfSliceHeader 函数之间插入了一个 UseParameterSet 函数

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:44:35
但是 UseParameterSet 函数绝对不可能读码流

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:45:28
因为 FirstPartOfSliceHeader 函数处理的最后一个语法元素是 pic_parameter_set_id ,RestOfSliceHeader 函数处理的第一个语法元素是 frame_num

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:46:22
而标准 7.3.3 小节规定语法元素 pic_parameter_set_id 之后紧接着是语法元素frame_num ,所以如果 UseParameterSet 函数读了码流就必然导致比特错误

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:47:10
UseParameterSet 函数做了什么呢?我们进去之后可以看见它主要是激活 SPS 和 PPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:48:03
因为后面语法元素的解码会使用到 SPS、PPS 里的参数,所以在解码后续语法元素之前必须先找到正确的 SPS、PPS

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:50:08
请看标准 7.3.3 中的 ref_pic_list_reordering( )

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:50:46
7.3.3 规定了解码完片头的语法元素,要进行 ref_pic_list_reordering 操作,那么我们的解码器是不是这样做的呢?

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:51:35
进入 RestOfSliceHeader 函数之后,我们可以发现有 ref_pic_list_reordering 函数,所以可以证明我们的解码器的确是按照标准规定来做的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:52:19
RestOfSliceHeader 函数后面的代码所做的工作也都是按照标准的 7.3.3 节做的

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:53:30
我们可以进入 ref_pic_list_reordering 函数看一下,代码是否是按照标准的 7.3.3.1 小节规定在做

----------------------------------------------------------------------------------------------------------------------------------------------------------

firstime
(500144) 21:54:18
到这里大家应该已经将标准第 7 章与代码联系起来了吧?

----------------------------------------------------------------------------------------------------------------------------------------------------------

Maha MAN
(47946245) 21:54:43
联系起来了

抱歉!评论已关闭.