摘要:config --enable-filter=yadif --enable-avfilter --enable-gpl暂时不知道哪一句起作用了,但是好使了。
阅读全文
摘要:http://hi.baidu.com/vv1133/blog/item/d03a6723688b054dac34de2b.html源地址所谓率失真(distortion-rate),其实指的是图像失真度与编码码率二者之间的相互关系。其中的图像失真度,目前一般采用原始图像与编码重建图像之间的峰值性噪比PSNR来衡量,这个PSNR可以是亮度PSNR,也可以是亮度与色度PSNR的线性组合。一般最简单的情况下,采用亮度的PSNR(Y-PSNR)来作为主要衡量依据。其中所谓的峰值信号,即图像中像素的最大值(比方说像素亮度的最大值);其中所谓的噪声,指的是原始图像与重建图像中各像素值的均方差(差值的平方
阅读全文
摘要:http://hi.baidu.com/hanyan_007/blog/item/5433b10f1160f5fa36d122d3.html1.Formatsshowavaliableformats可以使用的格式并且表明了多路复用一些问题2.Codecsshowavaiablecodecs可以使用的编解码器,对一些格式可能有的可以编码有的可以解码,这个参数就是介绍每种格式可以使用的编解码器。D只支持解码E只支持编码V可支持视频编解码A可支持音频编解码S字幕编解码SDT不明白Dsupportsdirectrenderingmethod1Tsupportsweirdframetruncation3
阅读全文
摘要:Cavlc需要内容coeff_token编码非零系数的个数(totalcoeff)和trailingones(没个宏块一个)Trailing_ones_sign_flagtrailingone值得符号Level_prefix非零系数码字的第一部分(每个系数一个,除了trailingones)Level_suffix非零系数码字的第二部分(不总是存在)Total_zeros编码第一个非零系数后面发生的零的总数(按zigzag顺序)(每个块一个)Run_before编码每个非零系数前的零的个数,按照反zigzag顺序函数中对应代码最开始调用计算非零个数函数在x264_quant_init中初始化调
阅读全文
摘要:1.dct变换对象是MxN的图像块或残差块,其处理单位为块。简单说,两边同时乘以一个A然后将原本时域信号投射到频域信号(个人理解就是颜色变换的频率),频域信号中相关性比较小。这个过程完事之后就将原来的每个信号点变成了一系列的系数矩阵。在解码端如果直到A转置的话,将解码得到的系数矩阵重新乘以这个转置A就得到了原来的信号值(残差块或者图像块)。这样变换完系数矩阵后,主要的信息其实集中在DC系数,也就是最左上角那个,其他的信息由于相关性很强并不是很重要,所以可以某种程度上,丢弃一部分。下一步的量化就是讲系数矩阵中一部分值丢弃掉,通过一定的准则。下一步的量化就是讲系数矩阵一部分某种程度上的一种丢弃。这
阅读全文
摘要:http://blog.csdn.net/sunshine1314/article/details/1685948前缀和后缀http://bbs.chinavideo.org/viewthread.php?tid=1057过程详解 还有拖尾http://www.chinavideo.org/viewthread.php?tid=1033bs编码过程http://hi.baidu.com/denglinglong/blog/item/5a4c7ea96cab3ef81e17a2f9.html代码http://www.chinavideo.org/viewthread.php?tid=14185&
阅读全文
摘要:两个局部变量i_mb_x,i_mb_y,全局的控制一个slice中的每个宏块的位置没有帧场自适应,所以初始化两个都为0在一个大的循环中While(1){/********************对于当前宏块编码完成*******************///对于两个变量进行更新然后进行写一个宏块的编码if(SLICE_MBAFF){i_mb_x+=i_mb_y&1;i_mb_y^=i_mb_x<h->mb.i_mb_width;}elsei_mb_x++;if(i_mb_x==h->mb.i_mb_width){i_mb_y++;i_mb_x=0;}}在while(1
阅读全文
摘要:最初调用位置h->zigzagf.scan_4x4(h->dct.luma4x4[p*16+idx],dct4x4);第一个参数就是个空的一维数组,第二个是4x4的宏块,经过dct和量化后的。目的就是为了将第二个数组中的内容线性的放入第一个数组Encoder_open中初始化通过参数分了帧和场主要先看帧progressivevoidx264_zigzag_init(intcpu,x264_zigzag_function_t*pf_progressive,x264_zigzag_function_t*pf_interlaced)pf_interlaced->scan_8x8=z
阅读全文
摘要:1.别人的mbcmp函数讲解http://wangluohongren.wangluoliuxing.com/hongren-708672ad01010p4n.htm2.hardamard变换http://zh.wikipedia.org/wiki/%E9%98%BF%E8%BE%BE%E9%A9%AC%E5%8F%98%E6%8D%A2文档http://bbs.chinavideo.org/viewthread.php?tid=10602一个老版本注释4.scan8 ffmpeg 代码http://bbs.chinavideo.org/viewthread.php?tid=2310x264_
阅读全文
摘要: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;到这里
阅读全文
摘要: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大
阅读全文
摘要:/* 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
阅读全文
摘要:和图像本身长宽相关的几个变量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 宏块步长,和图像中一行宏块所含的宏块数目是一样的。应该是后来
阅读全文
摘要:对于每个宏块计算它的量化系数 就是在量化过程中,首先乘以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
阅读全文
摘要: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
阅读全文
摘要:扩边,对于高和宽不是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 &
阅读全文
摘要:http://blog.yikuyiku.com/?p=2029
阅读全文
摘要: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_
阅读全文
摘要:知识点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.缺少参数时候可以在宏里面使
阅读全文