H.264涉及到的一些术语

 
2. JM8.6(VC版)编解码配置过程
    1.下载并解压
    2.打开源代码根目录下的工作区tml.dsw
    3.编码:lencod:属性 > 常规 > 中间目录 > ./bin/          调试 > 工作目录 > ./bin     命令参数 > -d encoder_main.cfg
    4.解码:ldecod:  属性 > 常规 > 中间目录 > ./bin            调试 > 工作目录 > ./bin     命令参数 > decoder.cfg
        
3.  H.264几大开源编码器简介

 JM

德国hhi研究所负责开发的H.264的官方测试源码,对于264的学术研究和比较都必须基于JM。JM完全实现了H.264的全部内容,JM8.6之前的版本实现了H.264_200503标准,8.6之后的版本开始开始支持H.264附加案的高保真技术。但JM程序结构非常复杂,编码复杂度极高,只考虑对所有技术的完整实现,而忽视了实用性。JM包括了编码和解码。


X264
网上自由组织联合开发的兼容264标准码流的编码器,创始人是一个法国人。X264最大的特点在于其出发点是为了H.264的实用性。与JM相比,X264并没有完整的对H.264标准给与实现,而是舍去了一些对编码性能贡献很小但计算复杂度极高的新特性,如多参考帧、帧间预测中不必要的块模式等技术。从而计算复杂度降低,编码效率却并没有明显降低。码流兼容H.264。在实用的系统中,比如比较普遍的在DSP芯片上实现H.264,大多是移植X264代码。X264只有编码端没有解码端。
Note:H.264,X264。不存在H264或X.264。。。

T264
国产货,已然沦落。我不得不说这东西很恶心。原因一:编码码流不兼容H.264,也就是说用T264编的码流只能用T264解码。。。原因二:T264已经停止开发了,人人都知道不进则退的道理。

P264
网上一个叫李世平(一个很牛的人物,啥时候能到他水平就好了)的人编写的。对P264具体情况不是很熟悉,但是由于开发者只有一人,所以猜测成熟程度比不上JM和X264。但是不管怎样,Lee先生的态度和责任心确实值得称道的。


总而言之,对于H.264的学习,看代码就是基本功。如果是想纯学术角度的学习,那么JM就是不二之选。如果有项目要求,要软件或硬件做一个H.264的实现,还是看X264吧,毕竟JM的速度实在是。。。

4. 

开启 JM 的 trace 功能


5. JM文件里面CHANGES.TXT是对各个版本更新的论述。

6.怎么设置JM配置文件,进行全帧内编码: IntraPeriod = 1

7.  运动矢量是存放在 readMotionInfoFromNAL 函数中

8. 一帧包含两个场,即顶场和底场。
9. JM18的配置文件
    GenerateMultiplePPS    1,    RDPictureDecision    1,   WPMCPrecision     2
    这个时候P帧和B帧分为三个Slice
    GenerateMultiplePPS    0,    RDPictureDecision    0,   WPMCPrecision     0
      这个时候P帧和B帧分为一个Slice
   
10. h.264最优运动矢量残差输出   http://www.360doc.com/content/11/0521/14/1412027_118336851.shtml

    

  I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。IDR会导致DPB(DecodedPictureBuffer 参考帧列表——这是关键所在)清空,而I不会IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。

 

   对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。



12 . CBP

cbp一共6bit,高2bit表示cbpc(2:cb、cr中至少一个4x4块的AC系数不全为0;1:cb、cr中至少一个2x2的DC系数不全为0;0:所有色度系数全0) 

低4bit分别表示4个8x8亮度块,其中从最低一位开始的4位分别对应00,10,01,11位置的8*8亮度块。如果某位为1,表示该对应8*8块的4个4*4块中至少有一个的系数不全为0。 

ICBPTAB[0] = 0  (00 0000)表示既没有亮度系数,也没有色差系数 

ICBPTAB[1] = 16 (01 0000)表示没有亮度系数,有色差直流系数(没有交流系数) 

ICBPTAB[2] = 32 (10 0000)表示没有亮度系数,有色差交流系数(可能含有直流系数) 

ICBPTAB[3] = 15 (00 1111)表示有亮度系数,没有色差系数 

ICBPTAB[4] = 31 (01 1111)表示有亮度系数,有色差直流系数(没有交流系数) 

ICBPTAB[5] = 47 (10 1111)表示有亮度系数,有色差交流系数(可能含有直流系数)

streameye软件显示的CBP

cbp bits 0 0000 0 00 0 00
    0000   00   00
    0011        
    0111      


第一列只有第一行有数字:该值为 0 代表 Y 分量 16 个 DC 系数全部为 0,为 1 则代表 16 个 DC 系数不全部为 0;
第二列是个 4*4 的矩阵,与 Y 分量 16 个 4*4 块的位置刚好对应:某个位置的值为 0 代表该 4*4 块 AC 系数全部为 0,为 1 则代表 AC 系数不全部为 0;
第三列也只有第一行有数字:该值为 0 代表 U 分量 4 个 DC 系数全部为 0,为 1 则代表 4 个 DC 系数不全部为 0;
第四列是个 2*2 的矩阵,与 U 分量 4 个 4*4 块的位置刚好对应:某个位置的值为 0 代表该 4*4 块 AC 系数全部为 0,为 1 则代表 AC 系数不全部为 0;
第五列也只有第一行有数字:该值为 0 代表 V 分量 4 个 DC 系数全部为 0,为 1 则代表 4 个 DC 系数不全部为 0;
第六列是个 2*2 的矩阵,与 V 分量 4 个 4*4 块的位置刚好对应:某个位置的值为 0 代表该 4*4 块 AC 系数全部为 0,为 1 则代表 AC 系数不全部为 0;

【说明】:如果宏块是非 16*16 Intra 宏块,此时,DC 系数并不单独处理,因此第一列的数值虽然仍然为 0,但并不代表 DC 系数全部为 0。而这个时候,第二列的各个数值是否为 0 由 DC、AC 系数共同决定。

Miton Vector:

一般一共有16对数据,表示16*16分成16个4*4,每个4*4块的运动矢量
10,0,0:表示10,0表示一对运动矢量,最后的0表示前向预测,-1表示后向预测,
切记这里的运动矢量表示的是MV,而不是MVD,也不是MVP


13. DC, AC的意思
    每个DCT 系数yk 确定信号xn 在相应频率点上的贡献。最低的系数(即k=0)为DC 系数,代
表信号的平均值,也称为直流分量。其它系数称为AC 系数,与递增的较高频率相联系,交流细数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值