H.264-FQA

[color=red][b]本贴是大家在学习过程中遇到的一些基本问题的积累,相当于大家对自己学习中遇到的一些简单的问题的记录和共享,不进行技术讨论。因此本帖采用自问自答方式,希望在此提出问题的作者在自己弄懂所提出的问题后能够回来补充答案。[/b][/color]

==================================================================================================================================================================


0孤独地优化
11.16 15:38

Q:下面代码的功能是什么?
if(pix & (~255))
{
pix1[x] = (-pix) >> 31;
}
else
{
pix1[x] = (unsigned char)pix;
}
A:
pix的定义是short型,pix1定义的是unsigned char型
这段代码可以这么理解(这段代码的功能):如果pix<0,那么pix1[x]=0,如果pix>255,那么pix1[x]=255,否则pix1[x]=pix;

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

霄宇
11.16 16:00

Q:编解码是以什么为单位进行的?
A:在看编码解码的框图的时候,如果你以帧为输入单位来看,可能你会看不懂,所以应该以宏块为输入单位来看,因为编码解码都是以宏块为单位,逐个宏块编解码,然后组合为一帧图像的。这样你就能看明白了。所以个人认为编解码应该是以宏块为单位进行的。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之骄子
11.16 22:42

Q:为何在cavlc编码的时候,第一个负数要加1?
A:如果拖尾小于3,说明第一个level的绝对值值肯定大于1。因此,level为正时,减1;为负时加1。可降低码流

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Juxtapose
11.17 11:35

Q: YCrCb 4:2:0是什么?像4:4:4和4:2:2一样表示 Y:Cr:Cb是4:2:0吗?
A: 不要让它骗了,我觉得它所表达意思应该是4:1:1,还有如果你看得是像[url=http://www.cs.sfu.ca/CC/365/li/material/notes/Chap3/Chap3.4/Chap3.4.html]http://www.cs.sfu.ca/CC/365/li/material/notes/Chap3/Chap3.4/Chap3.4.html[/url] 里面这样的对4:2:0的说明的烂图的话,可能看半天也不明白,建议看 <Video Codec Design>里面相应的图。里面的说明也很详细:
4 : 2 :0 means that Cr and Cb each haveh alf the horizontal and vertical resolution of Y, as
shown. The term '4 : 2 : 0' is rather confusing: the numbers do not actually have a sensible
interpretation and appear to have been chosen historically as a 'code' to identify this particular sampling pattern.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

0孤独地优化
11.17 15:09

Q:H.264中,术语IDR的意思是什么,有什么用?
A:IDR-instantaneous decoding refresh (IDR)picture;
A coded picture in which all slices are I or SI slices that causes the decoding process to mark all reference pictures as "unused for reference" immediately after decoding the IDR picture. After the decoding of an IDR picture all following coded pictures in decoding order can be decoded without inter prediction from any picture decoded prior to the IDR picture. The first picture of each coded video sequence is an IDR picture.
也就是说,IDR的出现其实是相当于向解码器发出了一个清理reference buffer的信号吧,上面说前于这一帧的所有已编码帧不能为inter做参考帧了。
附Q:天之骄子说--普通I帧和IDR可能有很多区别,但I可以参考其他帧而IDR不行,哪位高手可以解释这个问题呢?

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之骄子
11.18 10:42

Q:CABAC中开始时各字符出现的概率是怎么得到的?
A:基于查表实现的

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

风雷
11.18 10:45

Q:我们可以从一幅图像的自相关函数图中得到不同图像之间的相似程度.在中点处的最顶点表示图像未经移动时的图像.当空域移动拷贝被从原始图像的任一个方向移除的时候,这个函数值就会急骤下降,就这说明了一个图像采样值的邻域内是高度相关的.
我想问一下,空域移动拷贝被从原始图像的任一个方向移除的时候,这是一个什么过程
A:空域移动就表示平移,求自相关函数就包含平移这个过程.你看一维的 R(t,delta)=E[X(t)*X(t+delta)] ,二维不过平移多个方向而已

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

风雷
11.18 21:11

意思是说264标准只定义了码流的格式 编码器实现是各公司自己的事,只要形成的码流符合标准就行 解码器必须按照这个格式来,这样任何符合标准的码流都可以解出来

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

肃明智
11.19 08:46

Q:What is RVLC?
A:It is a VLC method which can be decoded from left to right and from right to left exclusively.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

蓝风车
11.19 14:21

Q:如果不用率失真最优化, 为什么选择SATD+delta×r(mv,mode)作为模式选择的依据?为什么运动估计中,整象素搜索用SAD,而亚象素用SATD?为什么帧内模式选择要用SATD?
A:
SAD即绝对误差和,仅反映残差时域差异,影响PSNR值,不能有效反映码流的大小。SATD即将残差经哈德曼变换的4×4块的预测残差绝对值总和,可以将其看作简单的时频变换,其值在一定程度上可以反映生成码流的大小。因此,不用率失真最优化时,可将其作为模式选择的依据。
一般帧内要对所有的模式进行检测,帧内预测选用SATD的原因同上。
在做运动估计时,一般而言,离最优匹配点越远,匹配误差值SAD越大,这就是有名的单一平面假设,现有的运动估计快速算法大都利用该特性。但是,转换后SATD值并不满足该条件,如果在整象素中运用SATD搜索,容易陷入局部最优点。而在亚象素中,待搜索点不多,各点处的SAD差异相对不大,可以用SATD选择码流较少的匹配位置。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之骄子
11.20 22:16

Q:RDO模型用来干什么?RQ模型又用来干什么?
A:RDO用来确定编码模式的,保证码率比特数和图像失真的最佳权衡点,而RQ是在上一层码率数一定的情况下用来确定下一层分配的比特数。RQ先于RDO进行。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

stillwater
11.22 14:00

Q:帧,场,图像的联系与区别是什么?
A:在分析标准时要分清帧(frame)、场(field)、图像(picture)很关键。
frame;逐行扫描图像
field:隔行扫描图像,偶数行成为顶场行,奇数行称为为底场行,所有顶场行称为顶场,同样所有底场行称为底场。
pictue:场和帧都可认为是图像
[注:SUPERPUMA语]
顶底场分别编码,对应位置的宏块叫做宏块对。顶场对已编码的顶/底场预测编码。底场一般对顶场预测编码
[注:蓝风车 语]

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

SUPERPUMA
11.23 22:27

Q:如何在VC下编译JM
A:编码步骤:
打开tml.dsw,依次选择project->settings,在settings for那一栏中选中lencod,在右边的debug选项卡做如下填写:
Executable for debug session: 和tml.dsw同一文件夹,我填的是\JM\bin\lencod.exe,具体有什么讲究我没有研究,应该没很大关系。
Working directory:./bin
Program arguments:-d encoder.cfg
Remote executable path and file name:可不填
然后,在vc中选择build->set active configurations,再选择lencod-Win32 debug.
下一步compile、build、execute,在这些之后,就完成了编码的工作。
解码步骤:
重复以上编码操作,不同之处是在settings for那一栏中选中ldecod,Executable for debug session填的路径和编码时应一样,Program arguments填decoder.cfg,build->set active configurations中选择ldecod-Win32 debug,其他不变。之后compile、build、execute,解码完成!
还有一点需要注意:编码的yuv图像要放在bin文件夹中!

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Stanley
11.24 19:12

Q:关于H264 ASIC设计的难点。
A:
1)怎样设计一个高效的Memory(SDRAM or DDR)系统是其中最大的挑战。MC最少的单元是4x4,因为在一行中只有4个Pixel,必然会导致memory miss rate的增加,从而降低memory BW的利用率。也许可以利用图像的空间相关性,设计一个类似于CACHE的结构。但CACHE的大小是一个值得探讨的问题。
2)怎样用相同的硬件结构来实现帧内预测和帧间预测。
3)怎样用一套硬件结构来同时实现mpeg2/4,WMV.因为核心的算法,例如DCT都不一样。
4)怎样降低熵解码的复杂度。
5)可以最多允许多少个reference Frame的问题。这对整个硬件构架没有任何影响。但直接影响成本,也就是片外要用多少M memory的问题。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之骄子
11.25 16:57

H264就是H.264,是视频压缩标准,就好比MPEG一样
X264、T264与JM一样,都是该标准的测试模型,或者说该标准的程序实现

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

盒饭+凉粉
11.26 11:28

因为264采用了多帧预测,就有可能在display order下I帧后的P会参考I帧前的帧,这样在random access时如果只找I帧,随后的帧的参考帧可能unavailable,IDR就是这样一种特殊
的I帧,把它定义为确保后面的P一定不参考其前面的帧,可以放心地random access。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

宝瓜
11.28 15:42

Q:对于帧间编码,在一个宏块内,可以同时存在的模式?
A:在同一宏块内,如果用模式16*8,那么宏块分为两块,均为16*8;8*16类似.如果用p8*8模式,对于8*4和4*8把一个8*8块分为两个块,对于4*4则分为4个.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Paul
11.29 20:48

Q:
帧间预测时,MV,MVp,MVD分别是什么?
A:
me得到的是mv
预测得到的是mvp
差值是mvd
MV:运动向量,参考帧中相对于当前帧的偏移
MVp:参考运动向量
MVD:两个向量间的差别

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

春秋冬夏
12.02 22:17

Q: I帧和P帧的概念比较好懂,B帧的概念有些模糊,只知道加了B帧图像质量会更好,请问对B帧该怎么理解?
A: B 帧在 MPEG-4 中有四种参考模式,如果是同时参考前后的画面压缩,则记录的是 和 (前画面 pixel 值 + 后画面 pixel 值)/2 的差值,也就是 和 「前后画面的平均」的差值。所以记录的差值个数和 P 帧一样,只有一个,没有增加。而因为 B 帧位于前后画面的中间,以「前后画面的平均」,也就是「前后画面的中间值」来作为预测数值(预测 B 帧的 pixel 数值为多少?如果有误差,再记录差值),这样这个预测数值会比单独使用前一个画面来预测,更接近目前真正的 B 帧的数值,可想而知,如此所需要记录的差值就会很小甚至可以根本不用记录,所以便可以省下很多的 bits,提高压缩率。
除了压缩率以外,B 帧对画质的影响也是有的,因为 B 帧这种参考前后画面的特性,等于有内插(interpolation)的效果,所以可以减少噪讯。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之骄子
12.03 17:26

Golomb 用于运动矢量,模式类型,头信息等编码
CAVLC用于残差编码
CABAC都可以

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.08 11:09

Q:Access Unit:
A:
A set of NAL units always containing a primary coded picture. In addition to the primary coded picture, an access unit may also contain one or more redundant coded pictures or other NAL units not containing slices or slice data partitions of a coded picture. The decoding of an access unit always results in a decoded picture.

As mentioned earlier, slices are individually coded and are the coding units, while pictures plus associated data can be considered as being the access units.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

爱咋咋地
12.11 10:36

Q:frame coding & field coding:
A:
Frame coding is typically preferred when the video scene contains significant detail with limited motion. Field coding typically works better when there is fast picture-to-picture motion.
one frame equal to two field
H.264中使用了4种编码模式:Frame、Filed、PAFF、MBAFF

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.13 08:50

宏块: 一个编码图像分成若干个宏块,一个宏块由一个16×16亮度象素和附加的一个8×8Cb和一个8×8Cr彩色象素组成

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.13 08:52

片: 一个视频图像可编码成一个或多个片,每片包含整数个宏块(MB),即至少一个MB,最多时每片包含整幅图像的MB。(每片的MB不固定)
设片的目的:
限制误码的扩散和传播,编码片相互独立
某片的预测不能以其他片中的MB做参考

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.14 07:59

Q:rdp(user data packet protocol) 和 (rtp)real-time transport protocol有什么区别?
A:
RTP是为了实时传输而在源数据上加了一些时间控制信息
UDP只是为了传输数据,udp的包可以加上rtp的头,成为一个rtp的数据包
rtp3984 拆分3种包:
单一NALU包
聚合包
分割包
经过测试发现,无线网络下,一包大小不能超过1400,只能传QCIF,QP35

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

肃明智
12.15 22:31

Q:相对PAFF,MBAFF的作用大不大?
A:有优势,但不明显。只有当图像运动剧烈的时候,优势才会比较明显。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

随意
12.17 11:13

Q:
变换量化公式: |Zij|=(|Wij|.MF+f)>>qbits 中的f是什么?
A:
f是一个修正参数,对于帧内编码宏块f=(2^qbits)/3,对于帧间编码宏块f=(2^qbits)/6。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

随意
12.17 11:18

Q:
整数DCT变换之后,为什么还要对直流分量进行哈达玛变换??有什么意义?
A:
因为在帧内编码宏块中大多数的能量都集中在直流系数上,这种变换有利于进一步压缩4×4的亮度直流信号的相关性。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

巨木
12.19 01:50

Q:white paper中给出帧内预测9种模式,vertical和horizontal容易理解,不知其他模式是依据怎样的算法来进行预测的。
A:标准P91-96给出了算法。
如8.3.1.2.8 Specification of Intra_4x4_Vertical_Left prediction mode中指出:
This Intra_4x4 prediction mode shall be used when Intra4x4PredMode[luma4x4BlkIdx] is equal to 7.
The values of the prediction samples pred4x4L(x,y),with x,y=0...3 are derived as follows:
For y="0" or y="2",
pred4x4L(x,y)=(p(x+(y>>1),-1)+p(x+(y>>1)+1,-1)+1)>>1;
Otherwise,
pred4x4L(x,y)=(p(x+(y>>1),-1)+2*p(x+(y>>1)+1,-1)+p(x+(y>>1)+2,-1)+2)>>1;
hehe,>>为无符号数右移操作。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.26 11:40

参数集
在以往视频编解码标准中,GOB\GOP\图像头信息是至关重要的,包含这些信息的包的丢失将直接导致与这些信息相关的数据不可用,因此这些标准大都采用了冗余编码技术来保护这些头信息。为解决这些问题,H.264将这些很少变化并且对大量VCL NALU起作用的信息放在参数集中传送。参数集分为两种,即序列参数集sequence parameter set和图像参数集picture parameter set,前者对一系列连续编码图像起作用,后者对连续编码图像序列中的单独图像起作用。VCL NALU通过标识位来指定它所参考的参数集。为适应多种网络环境,参数集可以带内传送,也可以采用带外方式传送

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

冬哥哥
01.09 14:44

Q:关于对除开拖尾系数以外的非零系数Level编码
A:
level的编码和AVS一样,查6个表,表也和AVS的一样
JM有算法,可以参看
writeSyntaxElement_Level_VLCN
函数。.
这个算法就是生成6个表的算法。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

蓝色阳光
01.11 10:09

Q:h264在网络上以udp方式传输问题
在mpeg4标准中,都是通过rtp协议把视频帧分成一个个的包加上rtp头再发送,在h264中,是由nal直接分片成包的还是要通过rtp分呢?要不要加rtp头
不好意思刚刚看到
A:[url=http://www.chinavideo.org/index.php?option=com_content&task=view&id=67&Itemid=5&limit=1&limitstart=3]http://www.chinavideo.org/index.php?option=com_content&task=view&id=67&Itemid=5&limit=1&limitstart=3[/url]

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

H264研究院
01.15 10:22

Q:FMO的优处和劣处?
A:劣处是FMO模式打乱了原宏块顺序,降低了编码效率,增加了时延;
优处是增强了抗误码性能。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

城里汉子
01.16 14:08

FrameSkip,该参数是对原始YUV帧丢弃数,就是说每隔一帧(I或者P,不包括B)丢弃FrameSkip帧。
NumberBFrames,就是两个编码帧中间B帧的数目,该数必须小于FrameSkip
FramesToBeEncoded,总共要编码的帧数,不包括B帧.
IntraPeriod,每IntraPeriod帧(I/P帧)有一个I帧编码

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

喆/ka
03.04 23:10

在变换编码的阶段,根据block的类型有三种变换编码,
block的类型包括1、亮度的4*4直流系数组成的块;2、色度的2*2的直流系数组成的块;3、其它类型的块(包括亮度的4*4交流系数组成的块(在DC系数的位置设为0);色度的4*4交流系数组成的块(在DC系数的位置设为0);采用4*4帧内编码模式的4*4块;运动补偿的4*4的帧间预测块)
其中亮度4*4DC系数组成块和色度2*2的直流系数组成的块仅仅在16*16的帧内预测模式下会出现。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

野狼
03.06 17:15

Q:在进行运动估计和运动补偿时,所用的块匹配快速算法有哪些?匹配准则又有哪几种?
A:块匹配快速算法有:正交搜索算法(OSA)、交叉搜索算法(CSA)、共轭方向搜索(CDS)、三步搜索(TSS)、二维对数(TDL)和全搜索(FS)、钻石算法等等。匹配准则一般有:归一化互相关函数(NCCF)、均方误差(MSE)、绝对误差和(MAD)等等。MAD最常用。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

rayu
03.08 11:25

Q:jm各个版本之间的代码做了些什么改动,有没有说明这些的文档啊?
A:每个版本源代码的根目录下都有一个 change.txt 文件,里面详细记录了所有版本的更新。
补充:为何已经有了 JM 10.2,大家仍偏好用 8.6 呢 ?
风轻回答:针对对象不同,jm90以上全部是针对高保真的视频的。86基本上可以满足一般处理的所有要求。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

喆/ka
03.09 09:19

Q:PicAFF和MbAFF的区别是什么?
A:PicAFF和MBAFF是决定压缩场的两种方式,PicAff(picture adaptive field frame)是在图像层来说的,此时帧被分成两个场,并且这两个场单独压缩,这两个场在分别分成16*16的宏块,然后对宏块进行编码,编码的时候对场中的宏块单独编码,在某个场编码完后,才会编另一个场的码。
而MBAFF(MicroBlock Adaptive Filed/Frame)是在宏块层(16*32)上进行编码,它将该宏块层即可以按单独的场,也可以将两个场合并成一个进行编码,在分成两个单独的宏块(16*16)编码的时候,是先编码一个场的宏块,再编码另一个场的宏块,这和PicAFF的区别就是对于整个图像来说各个场的宏块还是交叉编码的;在合并成单独的一个宏块编码时,在一个宏块(16*16)内,即包括奇数场的元素,也包括偶数场的元素,即宏块对,同时同一幅图像值(就算是上一场)也不能做参考。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

随意
03.10 09:13

Q:用h264设计的解码器是不是可以解任意编码器编的码?是根据档次设计解码器吗?
A:不可以解任意编码器编的码。也不是根据档次来设计编解码器。要根据具体的情况。
如果是按照H.264的标准来设计编解码器,便是通用的;若编解码器的设计有自己的特点,便不能成为通用的编解码器。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

随意
03.10 10:03

Q:在VC环境下是如何读入*.yuv序列的?
A:把*.yuv文件当作一般的文件读就可以了。
如下:

#include <stdio.h>
#include <malloc.h>

void main()
{
char *Y;
char *Cb;
char *Cr;
int width = 352, height = 288;
FILE *fp;
FILE *fy;
int i;

Y = (char*)malloc(width*height);
Cb = (char*)malloc(width*height/4);
Cr = (char*)malloc(width*height/4);

fp= fopen("input.yuv","rb");

if(fp == NULL)
printf("open input.yuv failed\n");

fy = fopen("output.yuv", "ab+");
if(fy == NULL)
printf("open output.yuv failed\n");

for(i = 0; i<1; i++)
{
//fseek(fp, i*width*height, 0);
if(0 == fread(Y, width*height, 1, fp))
printf("read error\n");
if(0 == fwrite(Y, width*height, 1, fy))
printf("write error\n");

fread(Cb, width*height/4, 1, fp);
fread(Cr, width*height/4, 1, fp);
fwrite(Cb, width*height/4, 1, fy);
fwrite(Cr, width*height/4, 1, fy);
}

fclose(fp);
fclose(fy);
free(Y);
free(Cb);
free(Cr);
}

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘比特神箭
03.12 16:09

Q:SODB,RBSP,EBSP的区别
A:SODB:最原始的编码数据,没有任何附加数据
RBSP:在SODB的基础上加了rbsp_stop_ont_bit(bit 值为1),并用0按字节补位对齐,字节对齐后,后面还有可能存在若干组16bits的0x0000(参考标准中的One or more cabac_zero_word 16-bit syntax elements equal to 0x0000 may be present in some RBSPs after the rbsp_trailing_bits( ) at the end of the RBSP.)
EBSP:在RBSP的基础上增加了防止伪起始码字节(0X03)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘比特神箭
03.12 16:10

Q:码流的读取位置
A:当数据流存储在介质上时,此时读取用GetAnnexbNALU (nalu);
否则,数据流应该来自分组交换网络,此时读取用GetRTPNALU (nalu)
二者的区别:
码流格式为Byte stream format时,调用函数GetAnnexbNALU(nalu);此时码流中包含起始码前缀(start_code_prefix_one_3bytes),3个字节,值为0x00 00 01。并可能包含连续若干字节的0(leading_zero_8bit),拖尾字节0。起始码前缀是为了表明码流的开始,与AVS相似。因为可能存在填充bit 0,所以也可能包含有leading_zero_8bit,即起始码前缀的表现形式可能是0x00 00 00 01或其他值。但这些值必须包含0x00 00 01。对原始码流提取后,这些值均被丢弃。

如果码流是按RTP协议传输,则调用GetRTPNALU(nalu)。并对RTP包进行拆封。在H.264中,对RTP包头的各段的值进行了限制,这些被限制的值必须满足条件,否则认为出错。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘比特神箭
03.12 16:11

Q:MBAFF的问题
A:帧模式下的MBAFF,每个宏块对由本帧的宏块组成。
场模式下的MBAFF,把两场组成一帧后,在按照帧的方式来组成宏块对。实际上是每个宏块对由顶场的一个宏块和底场的一个宏块组成。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘比特神箭
03.12 16:13

Q;CAVLC,Exp-Golomb的区别
A:Exp-Golomb的前缀和后缀根据阶数K的不同,可能是对称,后缀比前缀的长度多1等情况。
负数的情况下,通过公式(-1)k+1 Ceil( k÷2 ),把解析出来的哥伦布码值还原为原始的语法元素值;正数也有相应的对应方法。
CAVLC的前缀和后缀可能对称,也可能不对称,(大多数情况下都是不对称的)而且后缀还可以不存在,后缀的长度也是根据上下文环境来判断的,后缀的取值是根据编码表查询的,
对于正数,编码后的后缀部分的最后1 bit一定是0(若存在后缀);对于负数,其一定是1(若存在后缀)。
CAVLC与Exp-Golomb的前缀的表现形式都是1,01,001,0001......

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘比特神箭
03.12 16:15

Q:CAVLC的过程
A:
编码
4×4的残差块通过Zig-Zag扫描,得到一系列字符,如:0,3,0,1,-1,-1,0,1,0......
由此序列推导出以下变量:TotalCoeffs(全部的非零系数,包括拖尾系数),TotalZeros(最后一个非零系数前面的所有0的个数,方向为从左到右,比如上面的序列中,最后一个非零系数为1),TrailingOnes(托尾系数的个数,并规定不能超过3个),然后通过NC值查表,把
TotalCoeffs ,和TrailingOnes的组合进行编码,称为编码元素coeff_token。接下来,对每个拖尾系数的符合编码,0表示+,1表示负。再接下来,对剩下的非零系数编码(此时拖尾系数已经被编码了,不再包括),编码方向为从右到左,比如上面的序列中,先编码1,再编码3。这些系数被编码后,是由level_prefix和level_suffix两部分组成的。level_prefix的值通过查表得出,level_suffix是由若干个0组成,0的个数由suffixLength决定。再接着对TotalZeros的值编码。然后对RunBefore(每个非零系数前零的个数)进行编码,这个方向也是从右到左,并且最后一个(从左边数的第一个)非零系数前零的个数不需要编码,因为后面的编过后,剩下多少个0只有一个存放位置,就是最前面。
解码
由计算出的bit串长度读出相应的bits,通过查表得到TotalCoeffs和TrailingOnes的值,此时无输出,接着读取拖尾系数的符合,由编码的顺序知,先读到的是最后一个拖尾系数。解码完拖尾系数并依次输出,接下来是剩下的非零系数的值,通过查表解码并输出。然后解码TotalZeros,此时输出不变,仍为以前的解码值。接下来解码RunBefore,因为编码时是从右往左编的,故第一个解码出来的RunBefore应该插到第一个解码出的拖尾系数的前面,即插入的方向也是从右到左,最后一步时,剩下的RunBefore都插入到最前面。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

苦工
03.14 10:01

Q:哪位能讲一下标准里面的坐标的问题,分不清到底指的是块,宏块,尤其是MBAFF时?比如第6章逆扫描时的这两个公式:y = yO + ( mbAddr % 2 ) * 16(帧),
y = yO + ( mbAddr % 2 ) (场)
A:这是计算像素坐标的计算公式,MBADDR时是以宏块对出现的,MBADDR是宏块对的号码,所以场模式下是不要乘16的,TOP FIELD和BOTTON FIELD的像素是独立计算的。表达可能不大准确,也可能有误,希望各位指点。谢谢

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

~青儿~
03.24 09:23

Q:AVC和AVS之间的关系?
A:AVS是我国具备自主知识产权的第二代信源编码标准,是数字音视频产业的基础技术标准。AVS共包括9项标准,其源代码是全开放式的。
AVC:MPEG4 AVC简称AVC,也称JTV、H.264。
AVC仅是一个视频编码标准,而AVS是一套包含系统、视频、音频、媒体版权管理在内的完整标准体系,可为数字音视频产业提供全面的解决方案。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

alex
03.26 21:04

Q:为什么要在计算桢内DC预测模式时要+2,+4?
A:16*16和4*4的桢内DC预测模式中+2,+4的目的是为了四舍五入,使预测值更精确~~~
如(A+B+C+D)/4=190.1,那么约等于190
(A+B+C+D)/4=190.9,也是约等于190
这样误差就会大些
所以加上0.5后190.1=190.6,约等于190
而190.9+0.5后=191.4,约等于191
这样保证了精确性~~~

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

晓晓
04.03 11:32

1、为什么量化系数的数组是取[6][4][4]呢?
答:设变量p为需要变换的系数,c(p) 为变换之后的系数,其变换如下:
|1 1 1 1| |p00 p01 p02 p03| |1 2 1 1| |aa ab/2 aa ab/2|
|2 1 -1 -2| |p10 p11 p12 p13| |1 1 -1 -2| * |ab/2 bb/4 ab/2 bb/4|
|1 -1 -1 1| |p20 p21 p22 p23| |1 -1 -1 2| |aa ab/2 aa ab/2|
|1 -2 2 -1| |p30 p31 p32 p33| |1 -2 1 -1| |ab/2 bb/4 ab/2 bb/4|
我们可以看到位于p00、p02、p20、p22位置的系数需要乘aa,p11、p13、p31、p33的系数需要乘bb/4,其余的系数需要乘ab/2,这里a = 0.5,b = sqrt(0.4),c = 0.5。然而整数变换中的乘法运算可以与量化过程的除法运算糅合起来,这样就产生了你所提到的quant_coef[6][4][4]。第一个分量取6,是因为量化阶每隔6就增加一倍,因此只需要记录下量化阶为0-5时的各个系数的大小,而后两个分量取4则是为了与整数变换的大小相匹配

2、int cof[4][6][4][4]; //!< correction coefficients from predicted
这个变量是干什么用的啊?
答:这个变量用来存储解码并且逆量化之后的系数,其中cof[4][6]的内容如下:
|y0 y1 y4 y5 |
|y2 y3 y6 y7 |
|y8 y9 y12 y13|
|y10 y11 y14 y15|
|u0 u1 v0 v1 |
|u2 u3 v2 v3 |

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大象
04.04 18:35

Q:IDR picture指什么?
A:instantaneous decoder refresh picture,是一种只包含I-slices的picture. IDR picture之后的picture不使用IDR picture之前的picture作为运动估计的参考picture.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

alex
04.05 00:04

Q:什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?
A:SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和
SATD(Sum of Absolute Transformed Difference)即hadamard变换后再绝对值求和
SSD(Sum of Squared Difference)=SSE(Sum of Squared Error)即差值的平方和
MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均绝对差值
MSD(Mean Squared Difference)=MSE(Mean Squared Error)即平均平方误差

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

美丽人生
04.17 16:42

Q:cs->no_part = input->partition_mode==0?1:3这句是什么意思呀?
A:将数据划分成slice的数目,如果input->partition_mode==0那么就是只有一个划分,反之三个

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小华 *^-^*
04.18 16:43

Q:在linux下,编译x264需要做哪些准备工作?
A:下载nasm-0.98.38-2.i386.rpm 安装,如果以前编译过了,先make clean 下, 然后运行./configure --enable-debug  接着make  就可以象 vc里一样单步调式了

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大海
04.20 15:57

Q:在做预测时Intra模式为什么要用未经滤波的图像做参考而在Inter模式下,使用经过滤波的图像作参考图像呢?
A:(李士平语)首先,这里说清楚一点,帧内的参考和帧间的运动估计,用的都是原始的图像数据。而补偿的时候才用重建的图像,现在的问题变成是:为什么在补偿(预测)的时候,intra用未deblock的参考象素,inter用经过deblock的参考图像。 后者可以理解,主要是前者的问题。我的理解有下面几点:
1。如果要用deblock的参考象素,那么每个块编码完毕后都要做deblock,和原来整帧做deblock相比,速度慢了
2。在jm中,如果应用其rdo策略,亮度4*4和16×16的参考象素要做两次deblock
3。deblock对于帧内预测是否真的有效:从原理角度讲,deblock对psnr不会有大的贡献,也就是说不会让重建的参考象素更接近于原始值,因此,我觉得帧内预测是否采用delobock过的参考象素对预测结果影响不大
(蓝风车语)D和B的水平滤波、B和C的水平滤波会改变O块上边一排参考象素值;D和A的垂直滤波会改变O块左边的参考象素值 改变的结果就是使得这些象素值趋同。也使得对帧内各模式的代价值趋同 模糊了各模式之间的差异 引起了残差的增大和图像质量的降低。(图片没有传上去,聊天记录里有,在06年4月18号14:24:13时刻。)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

道非道
04.27 09:42

Q:数据重排列:0,3,0,1,-1,-1,0,1,0…… 拖尾系数的数目(TrailingOnes)= 3; TrailingOnes是什么意思??
A:TrailingOnes是最后三个(+-)1,(TrailingOnes)<= 3,超过三个的(+-)1当正常的系数处理;其主要目的是为了节省码柳。
它是逆序编码(注:从最后一个非零系数向左数),这个数列的三个拖尾系数的符号依次是+(0),-(1),-(1)(0表示+,1表示-)
TrailingOnes是由数列确定的,在该数列中(TrailingOnes)= 3(TrailingOnes <=3)
如把数据重排列改为:0,3,0,1,2,-1,0,1,0……则(TrailingOnes)= 2;
更详细的说明,建议参考<<H.264_MPEG-4 Part 10 White Paper.pdf>> page 5 of 7

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大海
04.27 14:10

Q:YUV与YCrCb?
A:YUV,亦称YCrCb,是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。其中"Y"表示明亮度(Luminance或Luma),也就是灰阶值;而"U"和"V"表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。"亮度"是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。"色度"则定义了颜色的两个方面调与饱和度,分别用Cr和CB来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。(转自[url=http://www.enet.com.cn/eschool/includes/zhuanti/shuyu/info/6/02/1504.shtml]http://www.enet.com.cn/eschool/includes/zhuanti/shuyu/info/6/02/1504.shtml[/url])

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

瑛瑛/jump
05.11 14:40

Q:关于JM中Int ****** all_mv
A:(2006-05-11 14:08:33) 糖甜甜
all_mv[block_x][block_y][ list ][ref][blocktype][direction]
其中block_x, block_y分别表示4*4块在整个宏块16*16内的水平和垂直位置,同时也说明所保存的运动矢量都是以4*4为单位的,假如有一个8*4的块,其运动矢量会保存成相同的两份。
List表示的是哪个参考帧列表
Ref表示的是参考帧序号
Blocktype表示的是宏块的类型,有16×16,16×8。。。4×4
Direction表示水平或垂直方向,其值分别是0和1

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

---
05.16 19:14

Q:JM 中test.264文件是逐帧还是一次性写入?
A:从编码过程中可知,逐帧写入

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小雪
05.23 17:46

Q jm在ccs中编译:
Q1:编译错误 --- This may be a serious problem. Please contact customer support with a
description of this problem and a sample of the source files that caused this
INTERNAL ERROR message to appear.
A1: enc_picture->imgY[jj][img->pix_x+i]=(imgpel)clip1a((M1[j][ i ]+((long)img->mprr_2[new_intra_mode][j][ i ]<<DQ_BITS)+DQ_ROUND)>>DQ_BITS);
把long改为int就好了。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小雪
05.23 17:52

Q jm在ccs中编译:
Q2 :不支持open()函数。
A2:改为fopen();
open()是对fopen()的封装。
Q3:不支持timeb结构体,
A3:注掉,即//#include <sys/timeb.h> 可改用ccs中clock计时
Q4:连编时出现error: symbol _bottom_pic is defined multiple times:
f:\h264_dsp\0319JM10_2\Debug\annexb.obj and
f:\h264_dsp\0319JM10_2\Debug\biariencode.obj
A4:将出现错误的变量名前加extern就好了

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天宇
06.04 21:33

这几天看程序,收获也有点,总结一下。
我这两天还感觉我看程序有点盲目 ,看的太细 ,花了好多时间 。
程序主要是两方面 :一是算法 、二是数据, 也就是参数 ;

我想应该先把算法弄明白,弄明白算法不能靠程序 ,而应该看标准或者相关论文
弄明白算法后再看程序
这个时候看程序的轮廓,也就是理解程序的流程,看程序是怎么实现算法的 ;
看了这些后,要把几个全局变量看看,
理解为什么要设置那些变量
最后再跟踪程序, 看程序不要老为几句话纠缠,可以问问别人,或者讨论。
这就是我看程序的心得

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

风起云涌
06.08 20:50

Q:h.264在运动估计方面做了那些改进?
A:在H.263中采用了半像素估计,在H.264中则进一步采用1/4像素甚至1/8像素的运动估计。即真正的运动矢量的位移可能是以1/4甚至1/8像素为基本单位的。显然,运动矢量位移的精度越高,则帧间剩余误差越小,传输码率越低,即压缩比越高。
  在H.264中采用了6阶FIR滤波器的内插获得1/2像素位置的值。当1/2像素值获得后, 1/4像素值可通过线性内插获得,
  对于4:1:1的视频格式,亮度信号的1/4 像素精度对应于色度部分的1/8像素的运动矢量,因此需要对色度信号进行1/8像素的内插运算。
  理论上,如果将运动补偿的精度增加一倍(例如从整像素精度提高到1/2像素精度),可有0.5bit/Sample的编码增益,但实际验证发现在运动矢量精度超过1/8像素后,系统基本上就没有明显增益了,因此,在H.264中,只采用了1/4像素精度的运动矢量模式,而不是采用1/8像素的精度。

  多宏块划分模式估计

  在H.264的预测模式中,一个宏块(MB)可划分成7种不同模式的尺寸,这种多模式的灵活、细微的宏块划分,更切合图像中的实际运动物体的形状,于是,在每个宏块中可包含有1、2、4、8或16个运动矢量。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

/kf 小月之兔
06.12 22:19

Q:关于jm86中listx
A:listX[6]:该变量的作用是用来在每次编码一帧图像时,将所要用到的参考帧保存在其中。但真正所要用到的参考帧图像数据是指向到dpb对应的结构元素中。
对于P帧,只要用到listX[0]。
对于B帧,要用到listX[0],listX[1]
对于Mbaff的编码方式,可能还会用到listX[2-5]。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

/kf 小月之兔
06.17 16:58

Q:关于IPCM
A:IPCM是在264的I帧编码中,有些情况下用变换,量化,扫描后得到的数据量和花费,还不如直接使用pcm编码更划算,于是就可以用ipcm
PCM基本工作原理
脉冲调制就是把一个时间连续,取值连续的模拟信号变换成时间离散,取值离散的数字信号后在信道中传输.脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码的过程.

所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。它的抽样速率的下限是由抽样定理确定的。

所谓量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。

所谓编码,就是用一组二进制码组来表示每一个有固定电平的量化值。然而,实际上量化是在编码过程中同时完成的,故编码过程也称为模/数变换,可记作A/D。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

/kf 小月之兔
07.07 18:00

Q:关于D1格式
A:
704x576 (TV PAL)
704x480 (TV NTSC)
720x576 (DVD-Video PAL)
720x480 (DVD-Video NTSC)

[[i] 本帖最后由 firstime 于 2008-10-20 06:40 PM 编辑 [/i]]

lessuez 发表于 2006-10-14 09:38 AM

Q:  关于H.26L

A:  有人说,H.26L是H.261,H.263,H.263+,H.263++,H.264通称.  这是不对的.准确地说,H.26L是介于H.263与H.264之间的标准. 当初,在H.263++之后,VCEG继续发展的标准,命名为H.26L,直到H.26L发展较为完善,并与MPEG合作之后才改为H.264.

gracelei 发表于 2006-10-31 10:40 AM

Q:请问Skipped Macroblock是什么意思?它和Direct Prdeiction有什么联系吗?

A:
先去看这个帖子:
[url]http://bbs.chinavideo.org/viewthread.php?tid=994&extra=page%3D1%26amp%3Bfilter%3Ddigest[/url]


Skipped Macroblock 是宏块类型,Direct Prdeiction 是宏块的预测方式
Skipped Macroblock 顾名思义就是跳过不编码的宏块,那么在解码端如何重构这个宏块呢?这就有两种选择:
1、采用 Direct 方式(这是一种特殊的预测方式)先预测出其 MV,后面的处理就跟一般的帧间宏块类似了(根据 MV 获取参考图像,再进行插值重构);
2、不采用 Direct 方式进行预测,而直接 copy 参考宏块。

第一种选择正是 B 片中的 Skip 宏块所采取的方式,同时又分为空间和时间 Direct 预测方式
第二种选择正是 P 片中的 Skip 宏块所采用的方式,也就是直接 copy 参考宏块

现在应该明白 Skip 与 Direct 的联系了吧?但要注意的是 B 片中有一种类型的宏块:B_Direct_16*16,它很特殊,它的名字里有“Direct”这个单词 ,它的预测方式也采用的 Direct 方式。这种类型的宏块即有 B 片中的 Skip 宏块的特性(MV 采用 Direct 预测方式得到),同时又有一般帧间宏块的特性(有像素残差,Skip 宏块是没有像素残差的)

ynfeiyang 发表于 2007-1-21 02:50 AM

Q:关于H264 ASIC设计的难点。
A:
1)怎样设计一个高效的Memory(SDRAM or DDR)系统是其中最大的挑战。MC最少的单元是4x4,因为在一行中只有4个Pixel,必然会导致memory miss rate的增加,从而降低memory BW的利用率。也许可以利用图像的空间相关性,设计一个类似于CACHE的结构。但CACHE的大小是一个值得探讨的问题。
2)怎样用相同的硬件结构来实现帧内预测和帧间预测。
3)怎样用一套硬件结构来同时实现mpeg2/4,WMV.因为核心的算法,例如DCT都不一样。
4)怎样降低熵解码的复杂度。
5)可以最多允许多少个reference Frame的问题。这对整个硬件构架没有任何影响。但直接影响成本,也就是片外要用多少M memory的问题。

呵,或许第五点考虑的不全面

taohuahua 发表于 2007-5-9 11:36 AM

Q:我想请问一下在H.264中除了baseline profine压缩技术外,还有那些压缩技术。为什么大多数的人在H.264编码时都只考虑baseline profile呢?它有什么优势?
A:最大的优势是无需版权费。另外,不同的profile有不同的应用领域。

Q:哪baseline profile具体是指什么呀?
A:基本档次。H.264标准划分了不同的档次BP(baseline profile)、MP(main profile)、EP(extended profile)、HP(high profile)。

[[i] 本帖最后由 firstime 于 2007-11-13 12:59 PM 编辑 [/i]]

natalieparker 发表于 2007-5-11 02:05 PM

Q:在VC中运行JM时,在 Program arguments 选项中填写需要使用的编码配置文件,例如:-d encoder_baseline.cfg,
   前缀-d,-f,-p是什么意思
A:[table=98%][tr][td=1,1,90][b][i][size=3][color=#000000][font=Times New Roman]-h[/font][/font][/font][/i][/b]
[/td][td=1,1,529][b][i][size=3][color=#000000][font=Times New Roman]Prints parameter usage.[/font][/font][/font][/i][/b]
[/td][/tr][tr][td=1,1,90][i][size=3][color=#000000][font=Times New Roman]-d[/font][/font][/font][/i]
[/td][td=1,1,529][size=3][color=#000000][font=Times New Roman]Use <defenc.cfg> as default file for parameter initializations.
If not used then file defaults to “encoder.cfg” in local directory.[/font][/font][/font]
[/td][/tr][tr][td=1,1,90][i][size=3][color=#000000][font=Times New Roman]-f[/font][/font][/font][/i]
[/td][td=1,1,529][size=3][color=#000000][font=Times New Roman]Read <curencM.cfg> for resetting selected encoder parameters.
Multiple files could be used that set different parameters.[/font][/font][/font]
[/td][/tr][tr][td=1,1,90][i][size=3][color=#000000][font=Times New Roman]-p[/font][/font][/font][/i]
[/td][td=1,1,529][size=3][color=#000000][font=Times New Roman]Set parameter <EncParamM> to <EncValueM>.[/font][/font][/font]
[/td][/tr][/table]

[[i] 本帖最后由 natalieparker 于 2007-5-23 09:12 AM 编辑 [/i]]

scorpiocr 发表于 2007-5-23 10:09 PM

神伏 21:04:47
Q:请问一下如果想在JM86解码端直接拿测试序列进行误码掩盖(不经过编码和解码这个动作),应在程序的哪个位置读入这段序列???  
A:将重构图像放入参考缓冲的地方。有一个标志:好像叫EIflag,表示MB出错的,它置位即会进行掩盖  

神伏 21:13:37
Q:请问你有跟踪误码掩盖代码需要的错误测试序列;或者能否告诉我一下,怎么自己做一段错误的测试序列?
A:一般可以自己做掩盖的程序接口,自己设置掩盖的参数,如位置、策略。
如果使用264解码器,可以设置如前所述的EIflag来启动对应位置的掩盖。

sindywb 发表于 2007-12-18 01:04 PM

Q:h.264有哪些测试模型?各有何特点?
A:h.264三大测试模型:
1、JM
H.264的官方测试源码,由德国hhi研究所负责开发。
特点:实现了264所有的特性,由于是官方的测试源码,所以学术研究的算法都是在JM基础上实现并和JM进行比较。但其程序结构冗长,只考虑引入各种新特性以提高编码性能,其编码复杂度高。
开发起始时间:2002.2
2、X264
网上自由组织联合开发的兼容264标准码流的编码器,创始人是一个法国人。X264在网上的口碑极佳。
特点:注重实用。和JM相比,在不明显降低编码性能的前提下,努力降低编码的计算复杂度,故X264摈弃了264中一些对编码性能贡献微笑但计算复杂度极高的新特性,如多参考帧、帧间预测中不必要的块模式、CABAC等。
开发起始时间:2004.6
3、T264
中国视频编码自由组织联合开发的264编解码器,编码器编码输出标准的264码流,解码器只能解T264编码器生成的码流。
特点:和X264的出发点相似,并吸收了JM、X264、XVID的优点。
开发起始时间:2004.10

[[i] 本帖最后由 sindywb 于 2007-12-18 01:28 PM 编辑 [/i]]

ecice 发表于 2008-1-4 10:18 AM

Q:X264的编码输入只支持420格式吗?

A:x264也支持了RGB24,RGB32及YUVU,YV12等格式,但是支持的意思就是x264里面把这些格式转换成了I420了,具体转换工作在csp.c(Color Space Converter)里完成.

[[i] 本帖最后由 firstime 于 2008-3-23 01:07 PM 编辑 [/i]]

hitajian 发表于 2008-1-29 11:26 AM

请教

Q: 请教下,如果想在TI的DSP(如达芬奇DM642/DM648等)中实现H.264编码和解码,基于何种源码比较合适呢?
A: t264  或者x264
    我个人觉得t264上手更容易,因为他本身就给你建立了ti的项目工程,你可以直接在上面跑通程序

Q: 那么效率上来讲,C代码上的效率来讲, x264是否比t264要高呢?
A: 个人感觉差不多,我估计可能t264还高点(只是猜测,没确认过), 不过群里面很多人是基于x264来改的

Q: 从学习H.264算法的角度考虑,JIM的哪个版本比较好? 还是说最新的就是最全的? 另外JIM最新的版本是JIM10.2吗?
A: 最新估计jm13.X, 个人觉得,如果不需要看high profile部分,jm86就不错。

[[i] 本帖最后由 hitajian 于 2008-1-29 11:46 AM 编辑 [/i]]

firstime 发表于 2008-3-23 01:07 PM

Q:TML 与 JM 的区别

A:TML 是由VCEG(Video Coding Expert Group)开发的,全称为Test Model Long-term. 这是在2001年以前。
     2001年后,VCEG 和 MPEG合作组成JVT (Joint Video Team), 之后所开发的H.264软件称为Joint Model也就是JM。

cuiyao_boygood 发表于 2008-6-10 10:59 AM

(遥远)
在网上看到的这几个解释,自己一直没搞明白,发在这供大家参考:


SODB 数据比特串-->最原始的编码数据

RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐。

EBSP 扩展字节序列载荷-->在RBSP基础上填加了仿校验字节(0X03)它的原因是: 在NALU加到Annexb上时,需要填加每组NALU之前的开始码StartCodePrefix,如果该NALU对应的slice为一帧的开始则用4位字节表示,ox00000001,否则用3位字节表示ox000001.为了使NALU主体中不包括与开始码相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的0x03。解码时将0x03去掉。也称为脱壳操作。

H.264 中的RBSP 主要分为两种,一种为视频编码数据,一种为控制数据。视频编码数据可以以片(每个片由若干宏块组成)为单位进行组织;也可以对片进行数据分割,即将每个片中编码后的数据按类型分为三种,同类型的数据组织到一起,形成三个数据划分(Data Partition),视频编码数据以数据划分为单位进行组织。控制数据是指待视频序列参数、图像参数等信息。

clairelover 发表于 2008-9-7 10:11 AM

请教。。decode_one_macroblock 中的问题

Q:decode_one_macroblock中lunma decode 部分。有getLuma4x4Neighbour()函数。该函数是读取周围块属性(存在性,宏块地址,像素地址)的函数。但该函数调用的函数getNonAffNeighbour或者getAffNeighbour  后又对求出的相邻块位置坐标都 除4  如 pix->x /= 4;这是为什么?

A:是为了得到SUBblock的位置也即该像素所在4X4块的位置。然后为下文得到是在列表中否存在

[[i] 本帖最后由 firstime 于 2008-9-8 10:30 AM 编辑 [/i]]

jinmeng5588480 发表于 2008-9-19 01:31 PM

Q:全象素搜索的 需要搜索的块数(2*range+1)* (2*range+1)是什么意思?
A:是说明需要搜索周末多个点,以每个点为新搜索块块的左上角,队新搜索块进行搜索.

ddadda 发表于 2008-11-18 02:50 PM

有关H264的一些Level级别,对应的值及分辨率

Q:有关H264的一些Level级别,对应的值及分辨率,有没有介绍?
A:看SPEC的前言部分。

240213545 发表于 2008-12-1 01:45 PM

3gp中提取264视频数据出错

Q:
3GP 文件中 SPS/PPS 在哪里?

A:
根据stco中的offset定位到视频数据的位置.前4个字节为此帧的数据的大小(字节).SPS 和 PPS在3gp中存在stsd box中可以找到.

山雀23 发表于 2008-12-13 03:52 PM

Q:JM测试模型里面支持的帧间搜索算法是什么?
A:一般默认的是全搜索,它还支持UMHexagonS搜索算法,Simplified UMHexagonS算法,EPZS patterns算法;通过修改配置文件中的UseFME 值即可实现。

Jedilyn 发表于 2009-5-6 02:13 PM

[b]请教[/b]

Q1:我现在想根据h264 over RTP的rfc自己写一个对h264进行rtp打包的函数,如何得到一个h264编码的raw data文件? Linux 和 windows下分别是?

Q2:要进行rtp打包,需要对这个h264 raw data文件进行哪方面的了解?

huangyp9016 发表于 2009-7-2 09:14 AM

请问对于h264文件,如何实现帧的精确定位呢?比如选择H264文件中的每一个时间段来进行播放,此时如何获知开始帧和结束帧呢

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值