Я запутался со следующим кодом в libavcodec/h264_cavlc.c
, который является частью декодера h264 ffmpeg.h264 int4x4 pred режим декодирования в ffmpeg
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
.
.
.
if(IS_INTRA4x4(mb_type)){
int i;
int di = 1;
if(dct8x8_allowed && get_bits1(&sl->gb)){
mb_type |= MB_TYPE_8x8DCT;
di = 4;
}
// fill_intra4x4_pred_table(h);
for(i=0; i<16; i+=di){
int mode = pred_intra_mode(h, sl, i);
if(!get_bits1(&sl->gb)){
const int rem_mode= get_bits(&sl->gb, 3);
mode = rem_mode + (rem_mode >= mode);
}
if(di==4)
fill_rectangle(&sl->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1);
else
sl->intra4x4_pred_mode_cache[scan8[i]] = mode;
}
write_back_intra_pred_mode(h, sl);
if (ff_h264_check_intra4x4_pred_mode(h, sl) < 0)
return -1;
}
, когда он считывает di == 4
только четыре режима предсказания из битового потока. Я ожидаю извлечь 16 предварительных режимов с , мы работаем над макроблоком INTRA4x4.
какая функция fill_rectangle()
делать?