04 2012 档案

4-28 对于 mb_cmp_init函数中一些宏定义的展开 x264_encoder_open中
摘要:h->pixf.intra_mbcmp_x3_16x16(p_src,p_dst,a->i_satd_i16x16_dir);//inmbcmp_init(x264_t*h)h->pixf.intra_mbcmp_x3_16x16=satd?h->pixf.intra_satd_x3_16x16:h->pixf.intra_sad_x3_16x16;pixf->intra_sad_x3_16x16=x264_intra_sad_x3_16x16;pixf->intra_satd_x3_16x16=x264_intra_satd_x3_16x16;到这里 阅读全文

posted @ 2012-04-28 16:10 hatreds 阅读(842) 评论(0) 推荐(0)

4-28 x264_reference_update
摘要:1.X264_Reference_update和x264_reference_build_list( h, h->fdec->i_poc );之前printf("[%d][%d][%d][%d]=======",h->i_frame,h->fenc->i_frame,h->fdec->i_frame,h->fenc->i_type );没有b帧的情况下,h->i_frame和h->fenc->i_frame同步,h->fenc->i_frame比h->fdec->i_frame大 阅读全文

posted @ 2012-04-28 10:35 hatreds 阅读(1075) 评论(0) 推荐(0)

4-27 类型数据
摘要:/* Slice type */#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */#define X264_TYPE_IDR 0x0001#define X264_TYPE_I 0x0002#define X264_TYPE_P 0x0003#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */#define X264_TYPE_B 0x0005#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I dependin 阅读全文

posted @ 2012-04-27 17:48 hatreds 阅读(264) 评论(0) 推荐(0)

4-27 4x4图备忘
摘要: 阅读全文

posted @ 2012-04-27 17:20 hatreds 阅读(161) 评论(0) 推荐(0)

4-27 mb中一些参数记录备忘
摘要:和图像本身长宽相关的几个变量1.h->param.i_width 图像本身的宽度 1920h->param.i_height 图像本身的高度 1080h->mb.i_mb_width 宽度中有多少个16x16的宏块 120*16 = 1920h->mb.i_mb_height 高度中有多少个16x16个宏块 68x16 = 1088h->mb.i_mb_count总共多少个宏块 120x68 = 8160最开始slice_write中的一些宏块相关变量h->mb.i_mb_stride = 120 宏块步长,和图像中一行宏块所含的宏块数目是一样的。应该是后来 阅读全文

posted @ 2012-04-27 17:18 hatreds 阅读(453) 评论(0) 推荐(0)

4-27 自适应量化
摘要:对于每个宏块计算它的量化系数 就是在量化过程中,首先乘以DCT中那两个矩阵之后,还要乘以一个E,这里就是对于每个宏块自适应的计算出来这个矩阵,不用默认的。没有分析完成 在expandborder中计算了 宏块相关内容void x264_adaptive_quant_frame( x264_t *h, x264_frame_t *frame, float *quant_offsets ){ /* constants chosen to result in approximately the same overall bitrate as without AQ. * FIXME: while th 阅读全文

posted @ 2012-04-27 17:18 hatreds 阅读(1256) 评论(0) 推荐(1)

4-27 参考帧管理
摘要:Ppt中介绍的大体过程建立参考队列list0和list1P slice从list0中取参考帧做预测,b slice 从list1中取参考帧做预测List0中存储的是display顺序在poc顺序在当前帧之前的帧,顺序是从高到低List1中存储的是在当前帧poc之后的真。它的顺序是从低到高。里面有一个函数x264_reference_check_reorder 用来检测是否list0有顺序和标准不符合的帧存在X264_t中一些变量含义Int i_ref[2] 表示参考帧个数 i_ref[0]表示过去的帧 i_ref[1]表示以后的帧h->frames.fref[][] DPB表示的就是li 阅读全文

posted @ 2012-04-27 17:16 hatreds 阅读(884) 评论(0) 推荐(0)

4-27 expand_border
摘要:扩边,对于高和宽不是16倍数要进行填充Frame->i_plane是存储在plane中存了几维的数据,这里是2,对应色亮度和两个色度,0存储亮度,1,和2存储色度void x264_frame_expand_border_mod16( x264_t *h, x264_frame_t *frame ){ for( int i = 0; i < frame->i_plane; i++ ) { int i_width = h->param.i_width; int h_shift = i && CHROMA_H_SHIFT; int v_shift = i & 阅读全文

posted @ 2012-04-27 17:16 hatreds 阅读(236) 评论(0) 推荐(0)

4-27 参数原来还有很多没有理解 比较详细的解释
摘要:http://blog.yikuyiku.com/?p=2029 阅读全文

posted @ 2012-04-27 13:04 hatreds 阅读(191) 评论(0) 推荐(0)

4-27 x264_frame_copy_picture
摘要:dst->i_type = src->i_type; dst->i_qpplus1 = src->i_qpplus1; //printf("src->i_pts is [%d]\n",src->i_pts); dst->i_pts = dst->i_reordered_pts = src->i_pts; dst->param = src->param; dst->i_pic_struct = src->i_pic_struct; dst->extra_sei = src->extra_ 阅读全文

posted @ 2012-04-27 12:54 hatreds 阅读(2018) 评论(0) 推荐(0)

4-26 pixel赋值问题 mbcmp函数 宏定义
摘要:知识点1. 宏中的 ## 和 #首先明白宏就是替换 ## 就是连接替换中的参数例子1如果你有几个参数有相关作用,为了区别用param1,param2,param3表示,用这个宏可以只传递1,2,3就可以输出每一个你想要的参数//类似于c++中多态的作用#define TEST1(id) cout<<param##id<<endl;void main(){ int param1 = 1, param2 = 2, param3 = 3; TEST1(1); TEST1(2); TEST1(3);}单个的#就是在参数两侧加上””2.\多行的宏定义3.缺少参数时候可以在宏里面使 阅读全文

posted @ 2012-04-27 12:50 hatreds 阅读(224) 评论(0) 推荐(0)

4-26 x264全局 完整有些东西还没理解
摘要:http://blog.csdn.net/szu030606/article/details/7212315完整版 有些东西还是没有理解判断上一帧重构fdec是否做参考帧,如果是参考帧, 放入reference队列中,然后从unused队列中分配一帧给fdec,如果上一帧不是参考帧(比如b帧), 返回,具体实现函数x264_reference_update()从unused队列中取一帧给fenc,然后将输入的yuv数据复制到fenc的缓冲区中。图像宽度高度不是16的倍数的时候进行扩边。H->frames.i_input记录图像的输入顺序。将fenc指针放入next队列中。(next队列) 阅读全文

posted @ 2012-04-26 13:24 hatreds 阅读(443) 评论(0) 推荐(0)

4-26 pts dts
摘要:http://www.cnblogs.com/qingquan/archive/2011/07/27/2118967.html 阅读全文

posted @ 2012-04-26 13:16 hatreds 阅读(150) 评论(0) 推荐(0)

4-26 大话dct
摘要:http://www.chinavideo.org/viewthread.php?tid=12198&highlight=http://www.cnblogs.com/cplusplus/archive/2012/04/29/2476105.html另外一个比较详细的http://www.cnblogs.com/cplusplus/archive/2012/04/29/2476105.html 阅读全文

posted @ 2012-04-26 11:48 hatreds 阅读(220) 评论(0) 推荐(0)

4-26 根据gop 讲解x264整个过程
摘要:GOP 两个IDR帧之间的距离,x264中和GOP中相关的参数有两个,其一是-keyint,控制的是GOP中最大可能距离,另一个是-min-keyint,控制的是允许最小的GOP距离IDR 和IDR有关的参数除了上面的GOP设定的两个基本参数之外,还有一个scenecut控制了如何自适应的通过判断场景的变化加入IDR帧,用来override之前的判断。具体做法是通过计算本帧和前一帧之间visual difference 在根据scenecut和minkeyint的设定值形成判断,判定此处是否存在scenechange,判断成立的话将本帧判断为IDR帧,反之则有可能为I帧(判断依据的前半成立)或 阅读全文

posted @ 2012-04-26 11:45 hatreds 阅读(2954) 评论(0) 推荐(0)

4-26 pixel赋值问题 mbcmp函数 宏定义
摘要:知识点1. 宏中的 ## 和 #首先明白宏就是替换 ## 就是连接替换中的参数例子1如果你有几个参数有相关作用,为了区别用param1,param2,param3表示,用这个宏可以只传递1,2,3就可以输出每一个你想要的参数//类似于c++中多态的作用#define TEST1(id) cout<<param##id<<endl;void main(){ int param1 = 1, param2 = 2, param3 = 3; TEST1(1); TEST1(2); TEST1(3);}单个的#就是在参数两侧加上””2.\多行的宏定义3.缺少参数时候可以在宏里面使 阅读全文

posted @ 2012-04-26 11:43 hatreds 阅读(744) 评论(0) 推荐(0)

帧内宏块预测流程 (转载)
摘要:H.264帧内编码的模式选择H.264中4X4亮度预测依据预测方向的不同共有9种预测模式。在亮度4x4帧内预测时,其中DC预测(模式2)、垂直预测(模式0)和水平预测(模式2总是被认为有效的,即使在编码块上面像素或左边像素不可用的情况下(这时候上面像素或左边像素的值就使用128这个值来代替),而其它模式仅当所有需要利用的预测象素点都可用的情况下才可以使用(如果E, F, G,H不可用,可以用D的值来代替)。这儿所说的像素点可用(available)是指此像素所在的子块存在并且与当前编码的子块属于同一个slice。模式选择在H.264帧内编码中,每个宏块亮度信号都要完成9种4x4预测模式和4种1 阅读全文

posted @ 2012-04-16 13:18 hatreds 阅读(1239) 评论(0) 推荐(1)

SAD SATD转过来的
摘要:源地址 http://blog.csdn.net/wuzhong325/article/details/7449184SAD和SATD的区别与几个名词解释Q:如果不用率失真最优化,为什么选择SATD+delta×r(mv,mode)作为模式选择的依据?为什么运动估计中,整象素搜索用SAD,而亚象素用SATD?为什么帧内模式选择要用SATD?A: SAD即绝对误差和,仅反映残差时域差异,影响PSNR值,不能有效反映码流的大小。SATD即将残差经哈德曼变换的4×4块的预测残差绝对值总和,可以将其看作简单的时频变换,其值在一定程度上可以反映生成码流的大小。因此,不用率失真最优化时 阅读全文

posted @ 2012-04-16 13:15 hatreds 阅读(1964) 评论(0) 推荐(0)

帧内预测1
摘要:帧内预测static void x264_mb_analyse_intra( x264_t *h, x264_mb_analysis_t *a, int i_satd_inter ){ount++;*/通过一个标志位来决定帧内或帧间const unsigned int flags = h->sh.i_type == SLICE_TYPE_I ? h->param.analyse.intra : h->param.analyse.inter;这里跟我想的很不一样,我分析的是第一个IDR帧,我想这个时候p_dst要么应该是空的要么初值应该和p_src是相同的,但是打印出来并不是这 阅读全文

posted @ 2012-04-13 17:42 hatreds 阅读(858) 评论(1) 推荐(0)

4.1总结
摘要:帧选择相关内容帧间和帧内编码自动判断准则可以看出帧类型是有编码器自适应判断出来的,通过公式判断帧间的相关性(VAR)VAR值越小相关性越大,看其值和64做比较,当VAR<64的时候才用帧间模式,VAR>64的时候才用帧内模式。有特殊情况,当过去帧方差大(部分像素值变化大的时候),也会导致残差较大时候,可以才用帧间编码处理, 另外一个公示 当VAR>64,但是另外一个参数大于等于VAR的时候也才用帧间编码 详见(毕厚杰4.2.2.2)然后如果才用帧间预测的话,由于使用的最小部分为宏块,所作预测是在宏块基础上做预测。首先根据过去帧和当前帧宏块匹配时候,求出该宏块的运动矢量x和y, 阅读全文

posted @ 2012-04-05 08:40 hatreds 阅读(312) 评论(0) 推荐(0)