⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 本群聊天记录200608.htm

📁 本源码是基于C语言的H.264标准的JM源代码模型
💻 HTM
📖 第 1 页 / 共 5 页
字号:
(500144) 21:38:33 <br>
EBSP 数据又是由一个个片组成的 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:38:44 <br>
片又由片头和片数据组成 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:39:21 <br>
所以解码器取出整个片数据后,接下来必然要处理片头 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:39:48 <br>
刚才我们已经进入到了 FirstPartOfSliceHeader 函数,从这个函数的名字上,我们就已经知道它在做什么了 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:40:05 <br>
那么解码器在这个函数里具体该怎么做呢? <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:40:38 <br>
标准 7.3.3 小节已经做了规定 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:41:11 <br>
所以解码器必然是按照标准 7.3.3 小节规定的顺序来做的<br>
请大家看对照一下 7.3.3 小节和 FirstPartOfSliceHeader 函数 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:42:19 <br>
标准 7.3.3 小节规定的其他内容当然是在 RestOfSliceHeader 函数里完成了 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:43:14 <br>
虽然标准 7.3.3 小节规定的内容被分到了两个函数中进行处理 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:43:40 <br>
但是解码器必然不可能打乱标准 7.3.3 小节规定的顺序 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:44:22 <br>
所以虽然在解码器代码中的 FirstPartOfSliceHeader 函数与 RestOfSliceHeader 函数之间插入了一个 
UseParameterSet 函数 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:44:35 <br>
但是 UseParameterSet 函数绝对不可能读码流 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:45:28 <br>
因为 FirstPartOfSliceHeader 函数处理的最后一个语法元素是 pic_parameter_set_id ,RestOfSliceHeader 
函数处理的第一个语法元素是 frame_num <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:46:22 <br>
而标准 7.3.3 小节规定语法元素 pic_parameter_set_id 之后紧接着是语法元素frame_num ,所以如果 
UseParameterSet 函数读了码流就必然导致比特错误 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:47:10 <br>
UseParameterSet 函数做了什么呢?我们进去之后可以看见它主要是激活 SPS 和 PPS <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:48:03 <br>
因为后面语法元素的解码会使用到 SPS、PPS 里的参数,所以在解码后续语法元素之前必须先找到正确的 SPS、PPS <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:50:08 <br>
请看标准 7.3.3 中的 ref_pic_list_reordering( ) <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:50:46 <br>
7.3.3 规定了解码完片头的语法元素,要进行 ref_pic_list_reordering 操作,那么我们的解码器是不是这样做的呢? <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:51:35 <br>
进入 RestOfSliceHeader 函数之后,我们可以发现有 ref_pic_list_reordering 
函数,所以可以证明我们的解码器的确是按照标准规定来做的 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:52:19 <br>
RestOfSliceHeader 函数后面的代码所做的工作也都是按照标准的 7.3.3 节做的 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:53:30 <br>
我们可以进入 ref_pic_list_reordering 函数看一下,代码是否是按照标准的 7.3.3.1 小节规定在做 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:54:18 <br>
到这里大家应该已经将标准第 7 章与代码联系起来了吧? <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>Maha MAN <br>
(47946245) 21:54:43 <br>
联系起来了 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>Aries*Kevin <br>
(18820403) 21:54:51 <br>
明白 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>Maha MAN <br>
(47946245) 21:54:58 <br>
联系很紧 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:55:00 <br>
看标准的人一般都觉得第 7 章不知道有什么用<br>
现在大家应该知道第 7 章是很有用了的吧<br>
第 7 章正是解码器伪代码 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>Maha MAN <br>
(47946245) 21:55:30 <br>
存在必合理 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>萝卜 <br>
(43696314) 21:55:33 <br>
不错<table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>406088589 <br>
(406088589) 21:56:02 <br>
ref_pic_list_reordering和RestOfSliceHeader()<br>
只是挨着呀 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>拈花一笑 <br>
(35041962) 21:56:15 <br>
一个NALU对应一个片? <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		----------------------------------------------------------------------------------------------------------------------------------------------------------</font></td>
	</tr>
</table>firstime <br>
(500144) 21:56:17 <br>
其实说到这里我就已经可以不说了<br>
因为大家学会了将标准与代码对应的方法,后面都只是一个查找的过程 <table border="0" width="1080" id="table1" cellspacing="0" cellpadding="0">
	<tr><br>
		<td><font color="#B3C9E8" size="2">
		-----------------------------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -