📄 [原创] 如何读标准和代码 - h_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - powered by discuz!.htm
字号:
条件关联的就是必然出现的。例如,7.3.1 小节表中的 forbidden_zero_bit 就没有 if
条件关联,所以它必然出现在码流中;<BR>(2)、每个语法表最后一列都对所在行语法元素的熵编码方式做了规定,而最后一列各个符号具体是代表什么编码方式那就去看
7.2 小节最后的部分;<BR>(3)、看 7.4 小节与语法表对应的语义部分,例如你查的语法表是
7.3.1,那么该语法表里出现的语法元素的解释就在 7.4.1 小节中。<BR><BR>3、NALU
的前面三个语法元素所组成的一个字节我们称为 NALU 头,其余部分(也就是语法表 7.3.1 中的其余部分)我们称为 NALU 体。对
NALU 体的解析要看 7.3.2 小节。因为 NALU 有很多种类型,所以要针对 NALU 的不同类型去解析 NALU 体(表 7-1
说明了不同 NALU 对应的语法表)。例如,如果当前的 NALU 是 SPS,那么当然就要看 7.3.1 小节;如果当前的 NALU 是
DPA,那么当然就要看 7.3.2.9.1 小节了;<BR><BR>4、对于属于 VCL 的 NALU(哪些 NALU 是 VCL
NALU 呢?如果你看了 nal_unit_type 的语义,你就应该知道),例如表 7-1 中类型为 5 的 NALU,根据表 7-1
我们知道 NALU 体的语法表是 7.3.2.8。而从 7.3.2.8 我们可以看到,对这种 NALU 的 NALU
体解析实际就是对片级语法进行解析。语法表 7.3.2.8 显示片级语法解析首先要解析
slice_header()(这种带括号的表示是另一个语法结构),那么 slice_header() 怎么解析呢?往下看,7.3.3
的所有内容都被第一行的 slice_header() 包括在内,所以 7.3.3 就是对 slice_header()
这个语法层的码流规定;<BR><BR>5、按照语法表 7.3.2.8 解析完了 slice_header() 就该解析
slice_data() 了。下面以最常见的 I 帧(CAVLC 熵编码、非
MBAFF)的解析过程为例简单描述怎么继续读标准。这时在码流中出现的第一个 slice_data() 层的语法元素是语法表 7.3.4
中的 macroblock_layer(),也就是说直接到了宏块层的语法解析,那就要又要看 7.3.5
小节了;<BR><BR>6、基于我们对编解码流程的了解,我们知道解码是一个预测值加残差得到重建图像的过程,那么我们下面的解码过程就要分成两步走了:首先,得到预测值;其次,得到残差。基于我们对
H.264 关键技术的了解,我们知道 intra 宏块(提醒:我们举的例子是 I 帧,因此解析的是 intra
宏块)的预测值是需要使用到预测模式的,所以我们需要解析语法表 7.3.5 中的 mb_pred(mb_type) 语法层,那么又去看
7.3.5.1 小节。按照 7.3.5.1 小节解析出宏块或块的预测方式后我们怎么计算预测值呢?去看标准 8.3
小节;得到预测值后我们继续按照语法表 7.3.5 解析语法元素直到 residual() 语法层,这就又要去看 7.3.5.3
小节;按照 7.3.5.3 小节解析出残差系数后我们如何把它还原成真实的残差呢?去看标准 8.5
小节;<BR><BR>7、预测值和残差都有了,加起来就是解码图像了。解码的主要工作到此也算基本完成了。当然,上面的过程中还会用到标准其他章节的相关内容(例如,8.5
小节会用到 5.7 小节中定义的 InverseRasterScan),这就留给大家自己去学习了。<BR><BR><BR>
上面讲了如何读标准,那么如何读代码呢?非常简单,因为你现在已经知道了代码中各个函数所实现的功能以及标准各个章节所涉及的内容,那么你就该知道标准某个部分的内容与代码中的哪个函数对应,因此对于你想详细了解实现过程的模块,对照标准去仔细啃那个函数吧。对于代码中不明白的变量或者参数,把程序跑起来,看第
1 个 MB 解码时候该变量的值是多少,第 23 个 MB
解码时候该变量的值是多少……多做几个观察值,注意不要选择特殊位置,然后总结一下规律,这样你就自然能分析出该变量的作用和含义了。<BR><BR><BR>
以上讲的是解码过程,编码过程就是解码的反过程,因此同理。<BR><BR><BR><BR><BR><BR>——天之骄子(firstime)——<BR>
2008年8月5日<BR><BR>[<I> 本帖最后由 firstime
于 2008-9-4 11:35 AM 编辑 </I>]</DIV></TD></TR>
<TR>
<TD vAlign=bottom><BR><BR><BR><IMG alt=""
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/sigline.gif"><BR>
<DIV class=signature
style="OVERFLOW: hidden; max-height: 20em; maxHeight: 245px">欢迎加入我们的QQ群:12923082。新加入者请先仔细阅读论坛中的《群成员须知》!</DIV></TD></TR>
<TR>
<TD align=right><A onclick=scroll(0,0)
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###"><IMG
alt=顶部
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/top.gif"
border=0></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=spaceborder style="MARGIN-BOTTOM: 4px; WIDTH: 98%">
<TABLE class=t_row cellSpacing=0 cellPadding=4 width="100%" align=center>
<TBODY>
<TR style="HEIGHT: 100%">
<TD class=t_user vAlign=top width="18%"><A class=bold
href="http://bbs.chinavideo.org/viewpro.php?uid=57263"
target=_blank>lzhgang</A> <BR>
<DIV class=smalltxt>新手上路<BR><IMG alt="Rank: 1"
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/star_level1.gif"><BR><BR><BR><BR>UID
57263<BR>精华 0<BR>积分 0<BR>帖子 42<BR>阅读权限 10<BR>注册 2008-6-5<BR>状态 离线
</DIV></TD>
<TD
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
vAlign=top width="82%">
<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0>
<TBODY>
<TR>
<TD>
<DIV>
<DIV class="right t_number"><A class=bold
onclick="window.clipboardData.setData('text','http://bbs.chinavideo.org/viewthread.php?tid=4164&page=1#pid13305')"
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###">#2</A></DIV>
<DIV style="PADDING-TOP: 4px">发表于 2008-8-5 11:58 AM <A
href="http://bbs.chinavideo.org/viewpro.php?uid=57263">资料</A> <A
href="http://bbs.chinavideo.org/pm.php?action=send&uid=57263"
target=_blank>短消息</A> <A
href="http://wpa.qq.com/msgrd?V=1&Uin=793791505&Site=视频技术论坛&Menu=yes"
target=_blank><IMG alt=QQ
src="E:\My Documents\hcf\H.264\[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files\qq1_offline(1).gif"
border=0></A> </DIV></DIV></TD></TR>
<TR>
<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%"><A
title="评分 0"
href="http://bbs.chinavideo.org/misc.php?action=viewratings&tid=4164&pid=13305"
name=pid13305></A>
<DIV style="FONT-SIZE: 12px">很有指导意义,谢谢版主的分享</DIV></TD></TR>
<TR>
<TD align=right><A onclick=scroll(0,0)
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###"><IMG
alt=顶部
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/top.gif"
border=0></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=spaceborder style="MARGIN-BOTTOM: 4px; WIDTH: 98%">
<TABLE class=t_row cellSpacing=0 cellPadding=4 width="100%" align=center>
<TBODY>
<TR style="HEIGHT: 100%">
<TD class=t_user vAlign=top width="18%"><A class=bold
href="http://bbs.chinavideo.org/viewpro.php?uid=58586"
target=_blank>duguyicao</A> <BR>
<DIV class=smalltxt>新手上路<BR><IMG alt="Rank: 1"
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/star_level1.gif"><BR><BR><BR><BR>UID
58586<BR>精华 0<BR>积分 0<BR>帖子 6<BR>阅读权限 10<BR>注册 2008-6-20<BR>状态 离线
</DIV></TD>
<TD
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
vAlign=top width="82%">
<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0>
<TBODY>
<TR>
<TD>
<DIV>
<DIV class="right t_number"><A class=bold
onclick="window.clipboardData.setData('text','http://bbs.chinavideo.org/viewthread.php?tid=4164&page=1#pid13306')"
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###">#3</A></DIV>
<DIV style="PADDING-TOP: 4px">发表于 2008-8-5 12:57 PM <A
href="http://bbs.chinavideo.org/viewpro.php?uid=58586">资料</A> <A
href="http://bbs.chinavideo.org/pm.php?action=send&uid=58586"
target=_blank>短消息</A> </DIV></DIV></TD></TR>
<TR>
<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%"><A
title="评分 0"
href="http://bbs.chinavideo.org/misc.php?action=viewratings&tid=4164&pid=13306"
name=pid13306></A>
<DIV style="FONT-SIZE: 12px">正在研读关于lz的所有帖子,收益很大!<IMG alt=""
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/handshake.gif"
border=0 smilieid="17"></DIV></TD></TR>
<TR>
<TD align=right><A onclick=scroll(0,0)
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###"><IMG
alt=顶部
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/top.gif"
border=0></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=spaceborder style="MARGIN-BOTTOM: 4px; WIDTH: 98%">
<TABLE class=t_row cellSpacing=0 cellPadding=4 width="100%" align=center>
<TBODY>
<TR style="HEIGHT: 100%">
<TD class=t_user vAlign=top width="18%"><A class=bold
href="http://bbs.chinavideo.org/viewpro.php?uid=38171"
target=_blank>hnhbllb</A> <BR>
<DIV class=smalltxt>新手上路<BR><IMG alt="Rank: 1"
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/star_level1.gif"><BR><BR><BR><BR>UID
38171<BR>精华 0<BR>积分 0<BR>帖子 2<BR>阅读权限 10<BR>注册 2007-12-6<BR>状态 离线
</DIV></TD>
<TD
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
vAlign=top width="82%">
<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0>
<TBODY>
<TR>
<TD>
<DIV>
<DIV class="right t_number"><A class=bold
onclick="window.clipboardData.setData('text','http://bbs.chinavideo.org/viewthread.php?tid=4164&page=1#pid13309')"
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###">#4</A></DIV>
<DIV style="PADDING-TOP: 4px">发表于 2008-8-5 03:38 PM <A
href="http://bbs.chinavideo.org/viewpro.php?uid=38171">资料</A> <A
href="http://bbs.chinavideo.org/pm.php?action=send&uid=38171"
target=_blank>短消息</A> </DIV></DIV></TD></TR>
<TR>
<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%"><A
title="评分 0"
href="http://bbs.chinavideo.org/misc.php?action=viewratings&tid=4164&pid=13309"
name=pid13309></A>
<DIV style="FONT-SIZE: 12px">太感谢了</DIV></TD></TR>
<TR>
<TD align=right><A onclick=scroll(0,0)
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###"><IMG
alt=顶部
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/top.gif"
border=0></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=spaceborder style="MARGIN-BOTTOM: 4px; WIDTH: 98%">
<TABLE class=t_row cellSpacing=0 cellPadding=4 width="100%" align=center>
<TBODY>
<TR style="HEIGHT: 100%">
<TD class=t_user vAlign=top width="18%"><A class=bold
href="http://bbs.chinavideo.org/viewpro.php?uid=2313"
target=_blank>QuestionMark</A> <BR>
<DIV class=smalltxt>新手上路<BR><IMG alt="Rank: 1"
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/star_level1.gif"><BR><BR><BR><BR>UID
2313<BR>精华 <A
href="http://bbs.chinavideo.org/digest.php?authorid=2313">2</A> <BR>积分
45<BR>帖子 23<BR>阅读权限 10<BR>注册 2006-11-6<BR>状态 离线 </DIV></TD>
<TD
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
vAlign=top width="82%">
<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0>
<TBODY>
<TR>
<TD>
<DIV>
<DIV class="right t_number"><A class=bold
onclick="window.clipboardData.setData('text','http://bbs.chinavideo.org/viewthread.php?tid=4164&page=1#pid13312')"
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###">#5</A></DIV>
<DIV style="PADDING-TOP: 4px">发表于 2008-8-5 04:49 PM <A
href="http://bbs.chinavideo.org/viewpro.php?uid=2313">资料</A> <A
href="http://bbs.chinavideo.org/pm.php?action=send&uid=2313"
target=_blank>短消息</A> </DIV></DIV></TD></TR>
<TR>
<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%"><A
title="评分 0"
href="http://bbs.chinavideo.org/misc.php?action=viewratings&tid=4164&pid=13312"
name=pid13312></A>
<DIV style="FONT-SIZE: 12px">强烈一顶!</DIV></TD></TR>
<TR>
<TD align=right><A onclick=scroll(0,0)
href="http://bbs.chinavideo.org/viewthread.php?tid=4164###"><IMG
alt=顶部
src="[原创] 如何读标准和代码 - H_264乐园 - 视频技术论坛 中华视频网ffmpeg工程组 - Powered by Discuz!.files/top.gif"
border=0></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=spaceborder style="MARGIN-BOTTOM: 4px; WIDTH: 98%">
<TABLE class=t_row cellSpacing=0 cellPadding=4 width="100%" align=center>
<TBODY>
<TR style="HEIGHT: 100%">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -