H.264avs解码

读入配置文件中的信息
打开文件初始化   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是场模式下的存放结构

同过传指针来避免值的重复拷贝是一种好的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值