5_2 实现过程中

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中将宏块分割

While1) 循环中开始处理每个宏块

最开始通过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等赋值操作。这些进行完了之后才在后面进行真正指针的一些赋值操作。

posted on 2012-05-02 17:39  hatreds  阅读(433)  评论(0编辑  收藏  举报