class H264AVCCOMMONLIB_API YuvBufferParameter
{
。。。。。。
const UInt getYBlk( LumaIdx cIdx ) const { return m_uiLumOffset + ((cIdx.y() * m_iStride + cIdx.x())<<(2 + m_iResolution)); }
。。。。。。
}
猜测作用:在整个YUV缓冲区中,获取一个宏块中一个4*4块的偏移位置。
m_iResolution含义还不明确,根据空间两分层(增强层的长和宽是基本层的2倍)下的调试,该值一直为0,暂时先不管。
比如对于352*288的图像,由于处理的时候加上的margin,如下图所示(相关参考文档:关于JSVM中的BufferParameters):
m_uiLumOffset是指图像内某个宏块相对于扩展后图像最左上点的坐标。
如上面的示意图,为了说明问题,我们只表明了索引号为0、1和n的三个宏块,0和1的坐标为(0,0),(1,0),假设宏块n的坐标为(x,y)。事实上根据宏块坐标求其左上点相对于扩展后空间左上点的偏移还是很容易的。
我们知道图像有效区域起始位置,也就是0宏块左上点位置相对于扩展空间左上点的偏移是固定的,如下:
LumaStartOffset = (352+32+32)*64 + 32 = 26656;
所以MB0_Offset = LumaStartOffset.
MB1_Offset = LumaStartOffset + 16;
MBn_Offset = LumaStartOffset + y*16*Stride + x*16.
此时m_uiLumOffset = MBn_Offset;
宏块n中的索引值0-15的16个4*4宏块的位置则通过getYBlk方法来获取,色度同理。