📄 dec_cavlc.c
字号:
/* nC >= 8 */
void
T264dec_mb_read_coff_token_t3(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
{
int32_t code;
code = eg_read_direct(t->bs, 6);
*trailing_ones = coeff3_0[code].trailing_ones;
*total_coff = coeff3_0[code].total_coeff;
}
/* 8 > nC >= 4 */
void
T264dec_mb_read_coff_token_t2(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
{
int32_t code;
const vlc_coeff_token_t* table;
code = eg_show(t->bs, 10);
if (code >= 512)
{
table = coeff2_0;
code = (code >> 6) - 8;
}
else if (code >= 256)
{
table = coeff2_1;
code = (code >> 5) - 8;
}
else if (code >= 128)
{
table = coeff2_2;
code = (code >> 4) - 8;
}
else if (code >= 64)
{
table = coeff2_3;
code = (code >> 3) - 8;
}
else if (code >= 32)
{
table = coeff2_4;
code = (code >> 2) - 8;
}
else if (code >= 16)
{
table = coeff2_5;
code = (code >> 1) - 8;
}
else
{
table = coeff2_6;
}
*trailing_ones = table[code].trailing_ones;
*total_coff = table[code].total_coeff;
eg_read_skip(t->bs, table[code].len);
}
/* 4 > nC >= 2 */
void
T264dec_mb_read_coff_token_t1(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
{
int32_t code;
const vlc_coeff_token_t* table;
code = eg_show(t->bs, 14);
if (code >= 4096)
{
table = coeff1_0;
code = (code >> 10) - 4;
}
else if (code >= 1024)
{
table = coeff1_1;
code = (code >> 8) - 4;
}
else if (code >= 128)
{
table = coeff1_2;
code = (code >> 5) - 4;
}
else if (code >= 64)
{
table = coeff1_3;
code = (code >> 3) - 8;
}
else if (code >= 32)
{
table = coeff1_4;
code = (code >> 2) - 8;
}
else if (code >= 16)
{
table = coeff1_5;
code = (code >> 1) - 8;
}
else
{
table = coeff1_6;
}
*trailing_ones = table[code].trailing_ones;
*total_coff = table[code].total_coeff;
eg_read_skip(t->bs, table[code].len);
}
/* 2 > nC >= 0 */
void
T264dec_mb_read_coff_token_t0(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
{
int32_t code;
const vlc_coeff_token_t* table;
code = eg_show(t->bs, 16);
if (code >= 8192)
{
table = coeff0_5;
code >>= 13;
}
else if (code >= 4096)
{
table = coeff0_4;
code = (code >> 10) - 4;
}
else if (code >= 1024)
{
table = coeff0_3;
code = (code >> 8) - 4;
}
else if (code >= 128)
{
table = coeff0_2;
code = (code >> 5) - 4;
}
else if (code >= 64)
{
table = coeff0_1;
code = (code >> 3) - 8;
}
else
{
table = coeff0_0;
}
*trailing_ones = table[code].trailing_ones;
*total_coff = table[code].total_coeff;
eg_read_skip(t->bs, table[code].len);
}
uint8_t
T264dec_mb_read_level_prefix(T264_t* t)
{
uint8_t prefix;
int32_t code;
code = eg_show(t->bs, 16);
if (code >= 4096)
{
prefix = prefix_table0[code >> 12];
}
else if (code >= 256)
{
prefix = prefix_table1[code >> 8];
}
else if (code >= 16)
{
prefix = prefix_table2[code >> 4];
}
else
{
prefix = prefix_table3[code];
}
eg_read_skip(t->bs, prefix + 1);
return prefix;
}
uint8_t
T264dec_mb_read_total_zero1(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 9);
if (code >= 32)
{
code >>= 4;
total_zero = total_zero_table1_1[code].num;
eg_read_skip(t->bs, total_zero_table1_1[code].len);
}
else
{
total_zero = total_zero_table1_0[code].num;
eg_read_skip(t->bs, total_zero_table1_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero2(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 2;
total_zero = total_zero_table2_1[code].num;
eg_read_skip(t->bs, total_zero_table2_1[code].len);
}
else
{
total_zero = total_zero_table2_0[code].num;
eg_read_skip(t->bs, total_zero_table2_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero3(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 2;
total_zero = total_zero_table3_1[code].num;
eg_read_skip(t->bs, total_zero_table3_1[code].len);
}
else
{
total_zero = total_zero_table3_0[code].num;
eg_read_skip(t->bs, total_zero_table3_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero6(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 3;
total_zero = total_zero_table6_1[code].num;
eg_read_skip(t->bs, total_zero_table6_1[code].len);
}
else
{
total_zero = total_zero_table6_0[code].num;
eg_read_skip(t->bs, total_zero_table6_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero7(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 3;
total_zero = total_zero_table7_1[code].num;
eg_read_skip(t->bs, total_zero_table7_1[code].len);
}
else
{
total_zero = total_zero_table7_0[code].num;
eg_read_skip(t->bs, total_zero_table7_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero8(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 3;
total_zero = total_zero_table8_1[code].num;
eg_read_skip(t->bs, total_zero_table8_1[code].len);
}
else
{
total_zero = total_zero_table8_0[code].num;
eg_read_skip(t->bs, total_zero_table8_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero9(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 6);
if (code >= 8)
{
code >>= 3;
total_zero = total_zero_table9_1[code].num;
eg_read_skip(t->bs, total_zero_table9_1[code].len);
}
else
{
total_zero = total_zero_table9_0[code].num;
eg_read_skip(t->bs, total_zero_table9_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero4(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 5);
if (code >= 16)
{
code = (code >> 2) - 4;
total_zero = total_zero_table4_1[code].num;
eg_read_skip(t->bs, total_zero_table4_1[code].len);
}
else
{
total_zero = total_zero_table4_0[code].num;
eg_read_skip(t->bs, total_zero_table4_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero5(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 5);
if (code >= 16)
{
code = (code >> 2) - 4;
total_zero = total_zero_table5_1[code].num;
eg_read_skip(t->bs, total_zero_table5_1[code].len);
}
else
{
total_zero = total_zero_table5_0[code].num;
eg_read_skip(t->bs, total_zero_table5_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero10(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 5);
if (code >= 4)
{
code >>= 2;
total_zero = total_zero_table10_1[code].num;
eg_read_skip(t->bs, total_zero_table10_1[code].len);
}
else
{
total_zero = total_zero_table10_0[code].num;
eg_read_skip(t->bs, total_zero_table10_0[code].len);
}
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero11(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 4);
total_zero = total_zero_table11_0[code].num;
eg_read_skip(t->bs, total_zero_table11_0[code].len);
assert(total_zero != 255);
return total_zero;
}
uint8_t
T264dec_mb_read_total_zero12(T264_t* t)
{
uint8_t total_zero;
int32_t code;
code = eg_show(t->bs, 4);
total_zero = total_zero_table12_0[code].num;
eg_read_skip(t->bs, total_zero_table12_0[code].len);
return total_zero;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -