讀入配置文件中的信息
打開文件初始化 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是場模式下的存放結構
同過傳指針來避免值的重複拷貝是一種好的方法