29 #define UNCHECKED_BITSTREAM_READER 1
42 0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
46 15, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9,
92 6, 2, 0, 0, 8, 6, 3, 0, 9, 8, 7, 5, 10, 9, 8, 6,
93 11,10, 9, 7, 13,11,10, 8, 13,13,11, 9, 13,13,13,10,
94 14,14,13,11, 14,14,14,13, 15,15,14,14, 15,15,15,14,
95 16,15,15,15, 16,16,16,15, 16,16,16,16, 16,16,16,16,
99 6, 2, 0, 0, 6, 5, 3, 0, 7, 6, 6, 4, 8, 6, 6, 4,
100 8, 7, 7, 5, 9, 8, 8, 6, 11, 9, 9, 6, 11,11,11, 7,
101 12,11,11, 9, 12,12,12,11, 12,12,12,11, 13,13,13,12,
102 13,13,13,13, 13,14,13,13, 14,14,14,13, 14,14,14,14,
106 6, 4, 0, 0, 6, 5, 4, 0, 6, 5, 5, 4, 7, 5, 5, 4,
107 7, 5, 5, 4, 7, 6, 6, 4, 7, 6, 6, 4, 8, 7, 7, 5,
108 8, 8, 7, 6, 9, 8, 8, 7, 9, 9, 8, 8, 9, 9, 9, 8,
109 10, 9, 9, 9, 10,10,10,10, 10,10,10,10, 10,10,10,10,
113 6, 6, 0, 0, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6,
114 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
115 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
116 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
123 5, 1, 0, 0, 7, 4, 1, 0, 7, 6, 5, 3, 7, 6, 5, 3,
124 7, 6, 5, 4, 15, 6, 5, 4, 11,14, 5, 4, 8,10,13, 4,
125 15,14, 9, 4, 11,10,13,12, 15,14, 9,12, 11,10,13, 8,
126 15, 1, 9,12, 11,14,13, 8, 7,10, 9,12, 4, 6, 5, 8,
130 11, 2, 0, 0, 7, 7, 3, 0, 7,10, 9, 5, 7, 6, 5, 4,
131 4, 6, 5, 6, 7, 6, 5, 8, 15, 6, 5, 4, 11,14,13, 4,
132 15,10, 9, 4, 11,14,13,12, 8,10, 9, 8, 15,14,13,12,
133 11,10, 9,12, 7,11, 6, 8, 9, 8,10, 1, 7, 6, 5, 4,
137 15,14, 0, 0, 11,15,13, 0, 8,12,14,12, 15,10,11,11,
138 11, 8, 9,10, 9,14,13, 9, 8,10, 9, 8, 15,14,13,13,
139 11,14,10,12, 15,10,13,12, 11,14, 9,12, 8,10,13, 8,
140 13, 7, 9,12, 9,12,11,10, 5, 8, 7, 6, 1, 4, 3, 2,
144 0, 1, 0, 0, 4, 5, 6, 0, 8, 9,10,11, 12,13,14,15,
145 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
146 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47,
147 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63,
152 {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
153 {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
154 {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
155 {5,3,4,4,3,3,3,4,3,4,5,5,5},
156 {4,4,4,3,3,3,3,3,4,5,4,5},
157 {6,5,3,3,3,3,3,3,4,3,6},
158 {6,5,3,3,3,2,3,4,3,6},
170 {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
171 {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
172 {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
173 {3,7,5,4,6,5,4,3,3,2,2,1,0},
174 {5,4,3,7,6,5,4,3,2,1,1,0},
175 {1,1,7,6,5,4,3,2,1,1,0},
176 {1,1,5,4,3,3,2,1,1,0},
200 { 1, 3, 3, 4, 4, 4, 5, 5 },
201 { 3, 2, 3, 3, 3, 3, 3 },
202 { 3, 3, 2, 2, 3, 3 },
210 { 1, 2, 3, 2, 3, 1, 1, 0 },
211 { 0, 1, 1, 4, 5, 6, 7 },
212 { 0, 1, 1, 2, 6, 7 },
226 {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
236 {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
271 #define LEVEL_TAB_BITS 8
274 #define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
275 #define CHROMA422_DC_COEFF_TOKEN_VLC_BITS 13
276 #define COEFF_TOKEN_VLC_BITS 8
277 #define TOTAL_ZEROS_VLC_BITS 9
278 #define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
279 #define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS 5
280 #define RUN_VLC_BITS 3
281 #define RUN7_VLC_BITS 6
289 const int index8=
scan8[n];
294 if(
i<64)
i= (
i+1)>>1;
296 ff_tlog(
h->avctx,
"pred_nnz L%X T%X n%d s%d P%X\n", left, top, n,
scan8[n],
i&31);
305 for(suffix_length=0; suffix_length<7; suffix_length++){
310 int level_code = (prefix << suffix_length) +
311 (
i >> (
av_log2(
i) - suffix_length)) - (1 << suffix_length);
312 int mask = -(level_code&1);
313 level_code = (((2 + level_code) >> 1) ^
mask) -
mask;
346 for (
int i = 0;
i < 4;
i++) {
362 for (
int i = 0;
i < 3;
i++) {
372 for (
int i = 0;
i < 7;
i++) {
382 for (
int i = 0;
i < 15;
i++) {
392 for (
int i = 0;
i < 6;
i++) {
436 const uint8_t *scantable,
const uint32_t *qmul,
439 static const int coeff_token_table_index[17]= {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3};
441 int zeros_left, coeff_token, total_coeff,
i, trailing_ones, run_before;
450 total_coeff= coeff_token>>2;
455 total_coeff= coeff_token>>2;
459 total_coeff= coeff_token>>2;
468 if(total_coeff > (
unsigned)max_coeff) {
473 trailing_ones= coeff_token&3;
474 ff_tlog(
h->avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
483 if(trailing_ones<total_coeff) {
485 int suffix_length = total_coeff > 10 & trailing_ones < 3;
490 if(level_code >= 100){
491 prefix= level_code - 100;
501 }
else if(prefix==14){
505 level_code= prefix +
get_bits(gb, 4);
513 level_code += (1<<(prefix-3))-4096;
515 level_code +=
get_bits(gb, prefix-3);
518 if(trailing_ones < 3) level_code += 2;
521 mask= -(level_code&1);
524 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
526 suffix_length = 1 + (level_code + 3U > 6U);
527 level[trailing_ones]= level_code;
531 for(
i=trailing_ones+1;
i<total_coeff;
i++) {
532 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
537 if(level_code >= 100){
538 prefix= level_code - 100;
543 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
545 level_code = 15<<suffix_length;
551 level_code += (1<<(prefix-3))-4096;
553 level_code +=
get_bits(gb, prefix-3);
555 mask= -(level_code&1);
556 level_code= (((2+level_code)>>1) ^
mask) -
mask;
559 suffix_length+= suffix_limit[suffix_length] + level_code > 2U*suffix_limit[suffix_length];
563 if(total_coeff == max_coeff)
566 if (max_coeff <= 8) {
578 #define STORE_BLOCK(type) \
579 scantable += zeros_left + total_coeff - 1; \
580 if(n >= LUMA_DC_BLOCK_INDEX){ \
581 ((type*)block)[*scantable] = level[0]; \
582 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
584 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
586 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
587 zeros_left -= run_before; \
588 scantable -= 1 + run_before; \
589 ((type*)block)[*scantable]= level[i]; \
591 for(;i<total_coeff;i++) { \
593 ((type*)block)[*scantable]= level[i]; \
596 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
597 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
599 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
601 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
602 zeros_left -= run_before; \
603 scantable -= 1 + run_before; \
604 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
606 for(;i<total_coeff;i++) { \
608 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
612 if (
h->pixel_shift) {
629 const uint8_t *scan8x8,
int pixel_shift,
630 int mb_type,
int cbp,
int p)
646 for(i8x8=0; i8x8<4; i8x8++){
647 for(i4x4=0; i4x4<4; i4x4++){
648 const int index= i4x4 + 4*i8x8 + p*16;
650 index, scan + 1,
h->ps.pps->dequant4_coeff[p][qscale], 15) < 0 ){
661 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
664 for(i8x8=0; i8x8<4; i8x8++){
667 int16_t *buf = &sl->
mb[64*i8x8+256*p << pixel_shift];
669 for(i4x4=0; i4x4<4; i4x4++){
670 const int index= i4x4 + 4*i8x8 + p*16;
672 h->ps.pps->dequant8_coeff[cqm][qscale], 16) < 0 )
676 nnz[0] += nnz[1] + nnz[8] + nnz[9];
677 new_cbp |= !!nnz[0] << i8x8;
679 for(i4x4=0; i4x4<4; i4x4++){
680 const int index= i4x4 + 4*i8x8 + p*16;
682 scan,
h->ps.pps->dequant4_coeff[cqm][qscale], 16) < 0 ){
690 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
701 unsigned int mb_type, cbp;
702 int dct8x8_allowed =
h->ps.pps->transform_8x8_mode;
703 const int decode_chroma =
h->ps.sps->chroma_format_idc == 1 ||
h->ps.sps->chroma_format_idc == 2;
704 const int pixel_shift =
h->pixel_shift;
714 if (mb_skip_run >
h->mb_num) {
731 if ((sl->
mb_y & 1) == 0)
744 goto decode_intra_mb;
752 goto decode_intra_mb;
776 h->ps.sps->bit_depth_luma;
787 h->cur_pic.qscale_table[mb_xy] = 0;
789 memset(
h->non_zero_count[mb_xy], 16, 48);
791 h->cur_pic.mb_type[mb_xy] = mb_type;
811 for(
i=0;
i<16;
i+=di){
816 mode = rem_mode + (rem_mode >=
mode);
843 }
else if(partition_count==4){
844 int i, j, sub_partition_count[4], list,
ref[2][4];
876 for (list = 0; list < sl->
list_count; list++) {
884 }
else if(ref_count == 2){
904 for (list = 0; list < sl->
list_count; list++) {
916 for(j=0; j<sub_partition_count[
i]; j++){
918 const int index= 4*
i + block_width*j;
923 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
927 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
929 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
931 mv_cache[ 1 ][0]= mx;
932 mv_cache[ 1 ][1]= my;
934 mv_cache[ 8 ][0]= mx;
935 mv_cache[ 8 ][1]= my;
937 mv_cache[ 0 ][0]= mx;
938 mv_cache[ 0 ][1]= my;
949 dct8x8_allowed &=
h->ps.sps->direct_8x8_inference_flag;
954 for (list = 0; list < sl->
list_count; list++) {
956 if(
IS_DIR(mb_type, 0, list)){
960 }
else if (rc == 2) {
972 for (list = 0; list < sl->
list_count; list++) {
973 if(
IS_DIR(mb_type, 0, list)){
977 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
984 for (list = 0; list < sl->
list_count; list++) {
991 }
else if (rc == 2) {
1005 for (list = 0; list < sl->
list_count; list++) {
1012 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1022 for (list = 0; list < sl->
list_count; list++) {
1029 }
else if (rc == 2) {
1043 for (list = 0; list < sl->
list_count; list++) {
1050 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1085 if (!decode_chroma && cbp>15) {
1091 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1095 h->cbp_table[mb_xy]= cbp;
1096 h->cur_pic.mb_type[mb_xy] = mb_type;
1099 int i4x4, i8x8, chroma_idx;
1103 const uint8_t *scan, *scan8x8;
1104 const int max_qp = 51 + 6 * (
h->ps.sps->bit_depth_luma - 8);
1108 sl->
qscale += (unsigned)dquant;
1110 if (((
unsigned)sl->
qscale) > max_qp){
1112 else sl->
qscale -= max_qp+1;
1113 if (((
unsigned)sl->
qscale) > max_qp){
1124 scan8x8 = sl->
qscale ?
h->field_scan8x8_cavlc :
h->field_scan8x8_cavlc_q0;
1125 scan = sl->
qscale ?
h->field_scan :
h->field_scan_q0;
1127 scan8x8 = sl->
qscale ?
h->zigzag_scan8x8_cavlc :
h->zigzag_scan8x8_cavlc_q0;
1128 scan = sl->
qscale ?
h->zigzag_scan :
h->zigzag_scan_q0;
1134 h->cbp_table[mb_xy] |= ret << 12;
1143 const int num_c8x8 =
h->ps.sps->chroma_format_idc;
1146 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1150 NULL, 4 * num_c8x8) < 0) {
1156 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1157 const uint32_t *qmul =
h->ps.pps->dequant4_coeff[chroma_idx+1+(
IS_INTRA( mb_type ) ? 0:3)][sl->
chroma_qp[chroma_idx]];
1158 int16_t *
mb = sl->
mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1159 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1160 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1161 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1164 mb += 16 << pixel_shift;
1178 h->cur_pic.qscale_table[mb_xy] = sl->
qscale;
static double val(void *priv, double ch)
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
mode
Use these values in ebur128_init (or'ed).
static void fill_rectangle(int x, int y, int w, int h)
#define GET_CACHE(name, gb)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define CLOSE_READER(name, gb)
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
#define OPEN_READER(name, gb)
static void skip_bits(GetBitContext *s, int n)
#define UPDATE_CACHE(name, gb)
#define LAST_SKIP_BITS(name, gb, num)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static const uint8_t * align_get_bits(GetBitContext *s)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
@ AV_PICTURE_TYPE_SI
Switching Intra.
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
static const int chroma_dc_coeff_token_vlc_table_size
static VLC_TYPE chroma_dc_coeff_token_vlc_table[256][2]
#define CHROMA_DC_COEFF_TOKEN_VLC_BITS
static int get_level_prefix(GetBitContext *gb)
static const uint8_t chroma422_dc_total_zeros_bits[7][8]
static VLC_TYPE total_zeros_vlc_tables[15][512][2]
static VLC total_zeros_vlc[15+1]
static const uint8_t coeff_token_bits[4][4 *17]
static VLC chroma422_dc_coeff_token_vlc
static const uint8_t coeff_token_len[4][4 *17]
static const uint8_t chroma422_dc_total_zeros_len[7][8]
static const int run7_vlc_table_size
static VLC_TYPE chroma422_dc_coeff_token_vlc_table[8192][2]
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
static av_cold void init_cavlc_level_tab(void)
static VLC_TYPE chroma_dc_total_zeros_vlc_tables[3][8][2]
static const int run_vlc_tables_size
static VLC_TYPE run_vlc_tables[6][8][2]
static const uint8_t chroma422_dc_coeff_token_len[4 *9]
static int pred_non_zero_count(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted number of non-zero coefficients.
static VLC coeff_token_vlc[4]
#define COEFF_TOKEN_VLC_BITS
static const uint8_t chroma_dc_coeff_token_bits[4 *5]
static int decode_residual(const H264Context *h, H264SliceContext *sl, GetBitContext *gb, int16_t *block, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
Decode a residual block.
static const int coeff_token_vlc_tables_size[4]
static const uint8_t chroma_dc_coeff_token_len[4 *5]
static const uint8_t chroma_dc_total_zeros_bits[3][4]
static const uint8_t golomb_to_intra4x4_cbp_gray[16]
#define TOTAL_ZEROS_VLC_BITS
static const uint8_t total_zeros_bits[16][16]
static VLC chroma_dc_coeff_token_vlc
static const int chroma422_dc_total_zeros_vlc_tables_size
static const int chroma_dc_total_zeros_vlc_tables_size
#define CHROMA_DC_TOTAL_ZEROS_VLC_BITS
#define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS
static const uint8_t chroma422_dc_coeff_token_bits[4 *9]
static VLC_TYPE coeff_token_vlc_tables[520+332+280+256][2]
static const uint8_t chroma_dc_total_zeros_len[3][4]
static const int total_zeros_vlc_tables_size
static const uint8_t total_zeros_len[16][16]
#define STORE_BLOCK(type)
static VLC_TYPE chroma422_dc_total_zeros_vlc_tables[7][32][2]
static const int chroma422_dc_coeff_token_vlc_table_size
static const uint8_t run_len[7][16]
static const uint8_t golomb_to_inter_cbp_gray[16]
static VLC_TYPE run7_vlc_table[96][2]
static av_always_inline int decode_luma_residual(const H264Context *h, H264SliceContext *sl, GetBitContext *gb, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p)
#define CHROMA422_DC_COEFF_TOKEN_VLC_BITS
static const uint8_t run_bits[7][16]
static VLC chroma_dc_total_zeros_vlc[3+1]
static VLC chroma422_dc_total_zeros_vlc[7+1]
static int8_t cavlc_level_tab[7][1<< LEVEL_TAB_BITS][2]
av_cold void ff_h264_decode_init_vlc(void)
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
H.264 / AVC / MPEG-4 part10 motion vector prediction.
static void fill_decode_neighbors(const H264Context *h, H264SliceContext *sl, int mb_type)
static void av_unused decode_mb_skip(const H264Context *h, H264SliceContext *sl)
decodes a P_SKIP or B_SKIP macroblock
static av_always_inline void pred_motion(const H264Context *const h, H264SliceContext *sl, int n, int part_width, int list, int ref, int *const mx, int *const my)
Get the predicted MV.
static void fill_decode_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline void pred_8x16_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 8x16 MV.
static av_always_inline void pred_16x8_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 16x8 MV.
int ff_h264_check_intra4x4_pred_mode(int8_t *pred_mode_cache, void *logctx, int top_samples_available, int left_samples_available)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
const IMbInfo ff_h264_i_mb_type_info[26]
const PMbInfo ff_h264_p_mb_type_info[5]
const uint8_t ff_h264_golomb_to_inter_cbp[48]
const uint8_t ff_h264_chroma422_dc_scan[8]
const PMbInfo ff_h264_b_sub_mb_type_info[13]
const uint8_t ff_h264_chroma_dc_scan[4]
const PMbInfo ff_h264_b_mb_type_info[23]
const uint8_t ff_h264_golomb_to_intra4x4_cbp[48]
const PMbInfo ff_h264_p_sub_mb_type_info[4]
H.264 / AVC / MPEG-4 part10 codec.
static const uint8_t scan8[16 *3+3]
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
#define PART_NOT_AVAILABLE
#define LUMA_DC_BLOCK_INDEX
#define CHROMA_DC_BLOCK_INDEX
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
const uint16_t ff_h264_mb_sizes[4]
common internal API header
static const uint16_t mask[17]
#define IS_DIR(a, part, list)
#define MB_TYPE_INTERLACED
static const uint16_t table[]
#define FF_ARRAY_ELEMS(a)
int mb_field_decoding_flag
int8_t ref_cache[2][5 *8]
uint16_t sub_mb_type[4]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
const uint8_t * intra_pcm_ptr
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
unsigned int left_samples_available
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
unsigned int top_samples_available
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
int8_t intra4x4_pred_mode_cache[5 *8]
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
int16_t mb_luma_dc[3][16 *2]
as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too lar...
VLC_TYPE(* table)[2]
code, bits
static int ref[MAX_W *MAX_W]
static const uint8_t offset[127][2]
#define init_vlc(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
#define INIT_VLC_USE_NEW_STATIC