1.别人的mbcmp函数讲解
http://wangluohongren.wangluoliuxing.com/hongren-708672ad01010p4n.htm
2.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=2310
x264_macroblock_thread_init 初始化函数的位置
搜寻h->mb.pic.p_fenc过程
#define FENC_STRIDE 16
#define FDEC_STRIDE 32
ALIGNED_16( pixel fenc_buf[48*FENC_STRIDE] );
ALIGNED_16( pixel fdec_buf[52*FDEC_STRIDE] );
h->mb.pic.p_fenc[0] = h->mb.pic.fenc_buf;
h->mb.pic.p_fdec[0] = h->mb.pic.fdec_buf + 2*FDEC_STRIDE;
h->mb.pic.p_fenc[1] = h->mb.pic.fenc_buf + 16*FENC_STRIDE;
h->mb.pic.p_fdec[1] = h->mb.pic.fdec_buf + 19*FDEC_STRIDE;
再结合h->mb.pic.fdec_buf和 h->mb.pic.p_fenc_buf的定义
x264_macroblock_thread_init
1.Slice_write中将宏块分割
While(1) 循环中开始处理每个宏块
最开始通过mb_xy来控制编码的宏块个数
然后进阶这通过 x264_macroblock_cache_load_interlace()或者x264_macroblock_cache_load_progressive( h, i_mb_x, i_mb_y ); 来载入宏块标示
跟中进入x264_macroblock_cache_load_progressive( h, i_mb_x, i_mb_y ); 由于没有使用interlaced 可以看到调用了x264_macroblock_cache_load( h, mb_x, mb_y, 0 ); 这个函数,宏块最开始的指针初始化等行为都是在这个函数里面进行操作的。
2.在x264_macroblock_cache_load( h, mb_x, mb_y, 0 ); 首先调用了x264_macroblock_cache_load_neighbours( h, mb_x, mb_y, b_mbaff );就是分析当前宏块周围的情况,邻居h->mb.xy等赋值操作。这些进行完了之后才在后面进行真正指针的一些赋值操作。