1.
http://iphome.hhi.de/suehring/tml/download/old_jm/ ;下载个版本JM代码的网站。
1.下载并解压
2.打开源代码根目录下的工作区tml.dsw
3.编码:lencod:属性 > 常规 > 中间目录 > ./bin/ 调试 > 工作目录 > ./bin 命令参数 > -d encoder_main.cfg
4.解码:ldecod: 属性 > 常规 > 中间目录 > ./bin 调试 > 工作目录 > ./bin 命令参数 > decoder.cfg
JM
开启 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
11.
I帧和IDR帧的区别
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帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。
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)表示有亮度系数,有色差交流系数(可能含有直流系数)
低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
|
第一列只有第一行有数字:该值为 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 系数共同决定。
第二列是个 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 系数,与递增的较高频率相联系,交流细数