现在的位置: 首页 > 综合 > 正文

一个帧内预测时不明白的问题!

2013年12月04日 ⁄ 综合 ⁄ 共 1742字 ⁄ 字号 评论关闭
一个帧内预测时不明白的问题!

你好!我是h.264的初学者,最近在看h.264帧内预测的程序。

void intrapred_luma(int img_x,int img_y, int *left_available, int *up_available, int *all_available)
{

int PredPel[13];
byte **imgY = enc_picture->imgY; // For MB level frame/field coding tools -- set default to imgY

int ioff = (img_x & 15);
int joff = (img_y & 15);
int mb_nr=img->current_mb_nr;

PixelPos pix_a[4];
PixelPos pix_b, pix_c, pix_d;

int block_available_up;
int block_available_left;
int block_available_up_left;
int block_available_up_right;

for (i=0;i<4;i++)
{
getNeighbour(mb_nr, ioff -1 , joff +i , 1, &pix_a[i]);
}
这个程序中的两个语句

getNeighbour(mb_nr, ioff , joff -1 , 1, &pix_b);
getNeighbour(mb_nr, ioff +4 , joff -1 , 1, &pix_c);
getNeighbour(mb_nr, ioff -1 , joff -1 , 1, &pix_d);

pix_c.available = pix_c.available && !(((ioff==4)||(ioff==12)) && ((joff==4)||(joff==12)));

if (input->UseConstrainedIntraPred)
{
for (i=0, block_available_left=1; i<4;i++)
block_available_left &= pix_a[i].available ? img->intra_block[pix_a[i].mb_addr]: 0;
block_available_up = pix_b.available ? img->intra_block [pix_b.mb_addr] : 0;
block_available_up_right = pix_c.available ? img->intra_block [pix_c.mb_addr] : 0;
block_available_up_left = pix_d.available ? img->intra_block [pix_d.mb_addr] : 0;
}
else
{
block_available_left = pix_a[0].available;
block_available_up = pix_b.available;
block_available_up_right = pix_c.available;
block_available_up_left = pix_d.available;
}
.............................................

}

这个程序中的int ioff = (img_x & 15);
int joff = (img_y & 15);这两个语句我觉得很难理解,还有你说mb_nr表示要做亮度预测的4x4块所在的宏块序号,该4x4块是由ioff和joff来指定位置的,这个又怎么理解?还有一个问题:你说

0 | 1 | 4 | 5 |  
+---+---+---+---+
| 2 | 3 | 6 | 7 |
+---+---+---+---+
| 8 | 9 |12 |13 |
+---+---+---+---+
|10 |11 |14 |15 |
中3号位置是ioff = 4, joff = 4,

7号位置是ioff = 12, joff = 4

这又是为什么?

 

 

发贴心情

如果你看到的ioff和joff的数值都对,ioff和joff指的是4x4块的宏块内像素位置啊....

3号位置是ioff = 4, joff = 4,因为它是在第1行第1列的4x4块

7号位置是ioff = 12, joff = 4,因为它是在第3列第1行的4x4块

类推的话12号位置应该是ioff = 8, joff = 8.

因为是宏块内位置,所以要"&15"

抱歉!评论已关闭.