读入配置文件中的信息
打开文件初始化 InputStream pIRABS;
NextStartCode()找到是(001)的起始码,这个过程能将stuffing bits 去掉,同时测试buffer的充满情况
getoneunit()将两个起始码中间的bits流拿出来然后将头信息读出来
mv[2][2][2][2] 猜测前后向 4个宏块 x y坐标
direction currMB->b8pdir[k]==2 -1没有运动矢量 0前向 1后向 2双向 direction
IS_INTRA(currMB) == i8×8 i16×16
IS_DIRECT (currMB)==skip?????
currMB->b8mode[k] ==0是direct的??
IS_P8*8 是帧内?
currMB->mb_type是整个宏块的信息
currMB->b8mode[k]是每个宏块的mode
if(refFrArr[j4][i4] == -1) // next P is intra mode 等于-1是intramode
不同的模式不同的初始化模式
mbmode==-1 i宏块
mbmode==1 p宏块
mbmode==2 双向
游程编码的宏块的个数
#define P8x8 8
mb_type控制是16×16还是8×8等
mv_type控制是双向还是后向等
则mvFw_x = -(((16384/BlockDistanceRef)?(1-mvRef_x? BlockDistanceFw)-1)>>14)
img->fw_mv[i4+BLOCK_SIZE][j4][ii] = -(((16384/iTRp)*(1-iTRb*img->mv[img->block_x+i+4][img->block_y+j][0])-1)>>14);
if (IS_DIRECT (currMB) && img->cod_counter >= 0)
int i, j, iii, jjj;
currMB->cbp = 0;
read_one_macroblock:
I帧:读取一个宏块的系数
decode_macroblock:
I帧:帧内预测值的获得 反DCT变换 将值写到输出的矩阵当中
img->ipredmode[img->width/B8_SIZE +2 ][ vertical_size/B8_SIZE +2]
currse->grad 是指数哥伦布编码的K值
refFrArr[img->8width][img->8height] //参考索引值的存放
mref是将最后的参考帧传入参考帧的内插在这个函数镇南关
ref_frm[0] ,ref_frm[1] 是前向的两个pi帧
ref_frm[0] = reference_frame[0]
ref_frm[1] = reference_frame[1];
current_frame = reference_frame[2]; //这块应该有用的
解码当中有在p帧当中有***ref_frm[2] ref_frm[0]是最近的一帧中的所有的YUV信息
B帧当中有 ***f_ref_frm[2] ***b_ref_frm[2] 来存放前后参考帧中的YUV值
P帧中的**mref_frm[2]存放的是参考的y分量的值 **mref_frm[2][2]存放的是两个UV的分量
B帧当中有**mref_fref_frm[2] **mref_bref_frm[2] 存放的是参考的y分量
**mcef_fref_frm[2][2],**mcef_bref_frm[2][2]存放的是参考分量的uv分量
reference_field是场编码的时候用的
**mref_fld[4]为存放的场编码的时候用到的四个参考场
mref mcef是场模式下的存放结构
同过传指针来避免值的重复拷贝是一种好的方法