x264 - FENC_SRIDE、FDEC_STRIDE相关以及fenc、fdec的buf存储结构


http://www.360doc.com/content/14/0417/09/14169007_369668798.shtml



x264_macroblock_cache_load()函数下有如下代码:

h->mb.pic.p_fenc[0] = h->mb.pic.fenc_buf;
h->mb.pic.p_fenc[1] = h->mb.pic.fenc_buf + 16*FENC_STRIDE;
h->mb.pic.p_fenc[2] = h->mb.pic.fenc_buf + 16*FENC_STRIDE + 8;
h->mb.pic.p_fdec[0] = h->mb.pic.fdec_buf + 2*FDEC_STRIDE;
h->mb.pic.p_fdec[1] = h->mb.pic.fdec_buf + 19*FDEC_STRIDE;
h->mb.pic.p_fdec[2] = h->mb.pic.fdec_buf + 19*FDEC_STRIDE + 16;

其中

#define FENC_STRIDE 16

#define FDEC_STRIDE 32

/* pointer over mb of the frame to be compressed */

uint8_t *p_fenc[3];

/* pointer over mb of the frame to be reconstructed  */

uint8_t *p_fdec[3];

解读:

fdec指的是重建帧,fenc指的是编码帧,两者的存储结构有所不同,帧内预测会用到相邻块,所以 fdec结构需要保存相邻块信息Fdec、fenc的简易结构如下:

/* fdec:    fenc:
yyyyyyy
yYYYY     YYYY
yYYYY     YYYY
yYYYY     YYYY
yYYYY     YYYY
uuu vvv   UUVV
uUU vVV   UUVV
uUU vVV
*/

其中,fdec街头的深红色部分是存储的,用于预测的当前宏块的相邻块,y与Y指的都表示4x4块。而实际的fdec宏块的存储结构-h->mb.pic.fdec_buf如下

 

  0123456789ABCDEF0123456789ABCDEF
0 ...............................y
yyyyyyyyyyyyyyyy...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............y
YYYYYYYYYYYYYYYY...............u
uuuuuuuu.......vvvvvvvvv.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV.......u
UUUUUUUU.......vVVVVVVVV........

 

实际的fenc宏块的存储结构h->mb.pic.fenc_buf如下:

 

  0123456789ABCDEF
0 YYYYYYYYYYYYYYYY
1 YYYYYYYYYYYYYYYY
2 YYYYYYYYYYYYYYYY
3 YYYYYYYYYYYYYYYY
4 YYYYYYYYYYYYYYYY
5 YYYYYYYYYYYYYYYY
6 YYYYYYYYYYYYYYYY
7 YYYYYYYYYYYYYYYY
8 YYYYYYYYYYYYYYYY
9 YYYYYYYYYYYYYYYY
A YYYYYYYYYYYYYYYY
B YYYYYYYYYYYYYYYY
C YYYYYYYYYYYYYYYY
D YYYYYYYYYYYYYYYY
E YYYYYYYYYYYYYYYY
F YYYYYYYYYYYYYYYY
0 UUUUUUUUVVVVVVVV
1 UUUUUUUUVVVVVVVV
2 UUUUUUUUVVVVVVVV
3 UUUUUUUUVVVVVVVV
4 UUUUUUUUVVVVVVVV
5 UUUUUUUUVVVVVVVV
6 UUUUUUUUVVVVVVVV
7 UUUUUUUUVVVVVVVV

 

 

fenc_buf结构体总共有24 x 16 = 384个unit8。fdec结构体总共有27 x 32 = 864个 unit8单元,每个字母表示一个像素值。y、u、v表示所用到的相邻宏块的像素值。*p_fenc[3]*p_fdec[3]是分别指向h->mb.pic.fenc_bufh->mb.pic.fdec_buf两个结构中Y、U、V分量的指针。

h->mb.pic.fenc_buf; -- 第一个Y分量地址
h->mb.pic.fenc_buf + 16*FENC_STRIDE; -- 第一个U分量地址
h->mb.pic.fenc_buf + 16*FENC_STRIDE + 8; -- 第一个V分量地址

 

h->mb.pic.fdec_buf + 2*FDEC_STRIDE; -- 第一个Y分量地址
h->mb.pic.fdec_buf + 19*FDEC_STRIDE; -- 第一个U分量地址
h->mb.pic.fdec_buf + 19*FDEC_STRIDE + 16; -- 第一个V分量地址


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值