|
|
|
@ -324,88 +324,88 @@ static av_cold void init_cavlc_level_tab(void){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_cold void ff_h264_decode_init_vlc(void){ |
|
|
|
|
int i; |
|
|
|
|
int offset; |
|
|
|
|
|
|
|
|
|
chroma_dc_coeff_token_vlc.table = chroma_dc_coeff_token_vlc_table; |
|
|
|
|
chroma_dc_coeff_token_vlc.table_allocated = chroma_dc_coeff_token_vlc_table_size; |
|
|
|
|
init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5, |
|
|
|
|
&chroma_dc_coeff_token_len [0], 1, 1, |
|
|
|
|
&chroma_dc_coeff_token_bits[0], 1, 1, |
|
|
|
|
av_cold void ff_h264_decode_init_vlc(void) |
|
|
|
|
{ |
|
|
|
|
int offset; |
|
|
|
|
|
|
|
|
|
chroma_dc_coeff_token_vlc.table = chroma_dc_coeff_token_vlc_table; |
|
|
|
|
chroma_dc_coeff_token_vlc.table_allocated = chroma_dc_coeff_token_vlc_table_size; |
|
|
|
|
init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5, |
|
|
|
|
&chroma_dc_coeff_token_len [0], 1, 1, |
|
|
|
|
&chroma_dc_coeff_token_bits[0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
|
|
|
|
|
chroma422_dc_coeff_token_vlc.table = chroma422_dc_coeff_token_vlc_table; |
|
|
|
|
chroma422_dc_coeff_token_vlc.table_allocated = chroma422_dc_coeff_token_vlc_table_size; |
|
|
|
|
init_vlc(&chroma422_dc_coeff_token_vlc, CHROMA422_DC_COEFF_TOKEN_VLC_BITS, 4*9, |
|
|
|
|
&chroma422_dc_coeff_token_len [0], 1, 1, |
|
|
|
|
&chroma422_dc_coeff_token_bits[0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
|
|
|
|
|
offset = 0; |
|
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
|
coeff_token_vlc[i].table = coeff_token_vlc_tables + offset; |
|
|
|
|
coeff_token_vlc[i].table_allocated = coeff_token_vlc_tables_size[i]; |
|
|
|
|
init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17, |
|
|
|
|
&coeff_token_len [i][0], 1, 1, |
|
|
|
|
&coeff_token_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
|
|
|
|
|
chroma422_dc_coeff_token_vlc.table = chroma422_dc_coeff_token_vlc_table; |
|
|
|
|
chroma422_dc_coeff_token_vlc.table_allocated = chroma422_dc_coeff_token_vlc_table_size; |
|
|
|
|
init_vlc(&chroma422_dc_coeff_token_vlc, CHROMA422_DC_COEFF_TOKEN_VLC_BITS, 4*9, |
|
|
|
|
&chroma422_dc_coeff_token_len [0], 1, 1, |
|
|
|
|
&chroma422_dc_coeff_token_bits[0], 1, 1, |
|
|
|
|
offset += coeff_token_vlc_tables_size[i]; |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
* This is a one time safety check to make sure that |
|
|
|
|
* the packed static coeff_token_vlc table sizes |
|
|
|
|
* were initialized correctly. |
|
|
|
|
*/ |
|
|
|
|
av_assert0(offset == FF_ARRAY_ELEMS(coeff_token_vlc_tables)); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
|
|
chroma_dc_total_zeros_vlc[i + 1].table = chroma_dc_total_zeros_vlc_tables[i]; |
|
|
|
|
chroma_dc_total_zeros_vlc[i + 1].table_allocated = chroma_dc_total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&chroma_dc_total_zeros_vlc[i + 1], |
|
|
|
|
CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 4, |
|
|
|
|
&chroma_dc_total_zeros_len [i][0], 1, 1, |
|
|
|
|
&chroma_dc_total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
offset = 0; |
|
|
|
|
for(i=0; i<4; i++){ |
|
|
|
|
coeff_token_vlc[i].table = coeff_token_vlc_tables+offset; |
|
|
|
|
coeff_token_vlc[i].table_allocated = coeff_token_vlc_tables_size[i]; |
|
|
|
|
init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17, |
|
|
|
|
&coeff_token_len [i][0], 1, 1, |
|
|
|
|
&coeff_token_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
offset += coeff_token_vlc_tables_size[i]; |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
* This is a one time safety check to make sure that |
|
|
|
|
* the packed static coeff_token_vlc table sizes |
|
|
|
|
* were initialized correctly. |
|
|
|
|
*/ |
|
|
|
|
av_assert0(offset == FF_ARRAY_ELEMS(coeff_token_vlc_tables)); |
|
|
|
|
|
|
|
|
|
for(i=0; i<3; i++){ |
|
|
|
|
chroma_dc_total_zeros_vlc[i+1].table = chroma_dc_total_zeros_vlc_tables[i]; |
|
|
|
|
chroma_dc_total_zeros_vlc[i+1].table_allocated = chroma_dc_total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&chroma_dc_total_zeros_vlc[i+1], |
|
|
|
|
CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 4, |
|
|
|
|
&chroma_dc_total_zeros_len [i][0], 1, 1, |
|
|
|
|
&chroma_dc_total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for(i=0; i<7; i++){ |
|
|
|
|
chroma422_dc_total_zeros_vlc[i+1].table = chroma422_dc_total_zeros_vlc_tables[i]; |
|
|
|
|
chroma422_dc_total_zeros_vlc[i+1].table_allocated = chroma422_dc_total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&chroma422_dc_total_zeros_vlc[i+1], |
|
|
|
|
CHROMA422_DC_TOTAL_ZEROS_VLC_BITS, 8, |
|
|
|
|
&chroma422_dc_total_zeros_len [i][0], 1, 1, |
|
|
|
|
&chroma422_dc_total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for(i=0; i<15; i++){ |
|
|
|
|
total_zeros_vlc[i+1].table = total_zeros_vlc_tables[i]; |
|
|
|
|
total_zeros_vlc[i+1].table_allocated = total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&total_zeros_vlc[i+1], |
|
|
|
|
TOTAL_ZEROS_VLC_BITS, 16, |
|
|
|
|
&total_zeros_len [i][0], 1, 1, |
|
|
|
|
&total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < 7; i++) { |
|
|
|
|
chroma422_dc_total_zeros_vlc[i + 1].table = chroma422_dc_total_zeros_vlc_tables[i]; |
|
|
|
|
chroma422_dc_total_zeros_vlc[i + 1].table_allocated = chroma422_dc_total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&chroma422_dc_total_zeros_vlc[i + 1], |
|
|
|
|
CHROMA422_DC_TOTAL_ZEROS_VLC_BITS, 8, |
|
|
|
|
&chroma422_dc_total_zeros_len [i][0], 1, 1, |
|
|
|
|
&chroma422_dc_total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for(i=0; i<6; i++){ |
|
|
|
|
run_vlc[i+1].table = run_vlc_tables[i]; |
|
|
|
|
run_vlc[i+1].table_allocated = run_vlc_tables_size; |
|
|
|
|
init_vlc(&run_vlc[i+1], |
|
|
|
|
RUN_VLC_BITS, 7, |
|
|
|
|
&run_len [i][0], 1, 1, |
|
|
|
|
&run_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
run7_vlc.table = run7_vlc_table, |
|
|
|
|
run7_vlc.table_allocated = run7_vlc_table_size; |
|
|
|
|
init_vlc(&run7_vlc, RUN7_VLC_BITS, 16, |
|
|
|
|
&run_len [6][0], 1, 1, |
|
|
|
|
&run_bits[6][0], 1, 1, |
|
|
|
|
for (int i = 0; i < 15; i++) { |
|
|
|
|
total_zeros_vlc[i + 1].table = total_zeros_vlc_tables[i]; |
|
|
|
|
total_zeros_vlc[i + 1].table_allocated = total_zeros_vlc_tables_size; |
|
|
|
|
init_vlc(&total_zeros_vlc[i + 1], |
|
|
|
|
TOTAL_ZEROS_VLC_BITS, 16, |
|
|
|
|
&total_zeros_len [i][0], 1, 1, |
|
|
|
|
&total_zeros_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
init_cavlc_level_tab(); |
|
|
|
|
for (int i = 0; i < 6; i++) { |
|
|
|
|
run_vlc[i + 1].table = run_vlc_tables[i]; |
|
|
|
|
run_vlc[i + 1].table_allocated = run_vlc_tables_size; |
|
|
|
|
init_vlc(&run_vlc[i + 1], |
|
|
|
|
RUN_VLC_BITS, 7, |
|
|
|
|
&run_len [i][0], 1, 1, |
|
|
|
|
&run_bits[i][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
} |
|
|
|
|
run7_vlc.table = run7_vlc_table; |
|
|
|
|
run7_vlc.table_allocated = run7_vlc_table_size; |
|
|
|
|
init_vlc(&run7_vlc, RUN7_VLC_BITS, 16, |
|
|
|
|
&run_len [6][0], 1, 1, |
|
|
|
|
&run_bits[6][0], 1, 1, |
|
|
|
|
INIT_VLC_USE_NEW_STATIC); |
|
|
|
|
|
|
|
|
|
init_cavlc_level_tab(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline int get_level_prefix(GetBitContext *gb){ |
|
|
|
|