mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
avcodec/atrac9dec: Don't confuse max_depth of VLC with max codelength
The whole point of VLCs with their tables is to read more than one bit at a time; therefore max_depth, the number of times one has to (maximally) read further bits is given by ceil(max_code_length / table_bits) which in the case of ATRAC9's coefficient VLCs gives an upper bound of two. Instead the maximum length of a code of the given VLC has been used (which is not even a compile-time constant). Use two instead. Furthermore, given that this was the only usage of the field containing the maximum of all the code lengths of a given VLC the field has been removed from its containing struct. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
0339af05a4
commit
92209cf4c9
@ -411,7 +411,7 @@ static inline void read_coeffs_coarse(ATRAC9Context *s, ATRAC9BlockData *b,
|
||||
const int groups = bands >> huff->value_cnt_pow;
|
||||
|
||||
for (int j = 0; j < groups; j++) {
|
||||
uint16_t val = get_vlc2(gb, tab->table, 9, huff->max_bit_size);
|
||||
uint16_t val = get_vlc2(gb, tab->table, 9, 2);
|
||||
|
||||
for (int k = 0; k < huff->value_cnt; k++) {
|
||||
coeffs[k] = sign_extend(val, huff->value_bits);
|
||||
|
@ -476,26 +476,25 @@ typedef struct HuffmanCodebook {
|
||||
const int value_cnt;
|
||||
const int value_cnt_pow;
|
||||
const int value_bits;
|
||||
const int max_bit_size;
|
||||
} HuffmanCodebook;
|
||||
|
||||
static const HuffmanCodebook at9_huffman_sf_unsigned[] = {
|
||||
{ 0 },
|
||||
{ huff_sfb_a1_bits, huff_sfb_a1_codes, 2, 1, 0, 1, 1, },
|
||||
{ huff_sfb_a2_bits, huff_sfb_a2_codes, 4, 1, 0, 2, 3, },
|
||||
{ huff_sfb_a3_bits, huff_sfb_a3_codes, 8, 1, 0, 3, 6, },
|
||||
{ huff_sfb_a4_bits, huff_sfb_a4_codes, 16, 1, 0, 4, 8, },
|
||||
{ huff_sfb_a5_bits, huff_sfb_a5_codes, 32, 1, 0, 5, 8, },
|
||||
{ huff_sfb_a6_bits, huff_sfb_a6_codes, 64, 1, 0, 6, 8, },
|
||||
{ huff_sfb_a1_bits, huff_sfb_a1_codes, 2, 1, 0, 1 },
|
||||
{ huff_sfb_a2_bits, huff_sfb_a2_codes, 4, 1, 0, 2 },
|
||||
{ huff_sfb_a3_bits, huff_sfb_a3_codes, 8, 1, 0, 3 },
|
||||
{ huff_sfb_a4_bits, huff_sfb_a4_codes, 16, 1, 0, 4 },
|
||||
{ huff_sfb_a5_bits, huff_sfb_a5_codes, 32, 1, 0, 5 },
|
||||
{ huff_sfb_a6_bits, huff_sfb_a6_codes, 64, 1, 0, 6 },
|
||||
};
|
||||
|
||||
static const HuffmanCodebook at9_huffman_sf_signed[] = {
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ huff_sfb_b2_bits, huff_sfb_b2_codes, 4, 1, 0, 2, 2, },
|
||||
{ huff_sfb_b3_bits, huff_sfb_b3_codes, 8, 1, 0, 3, 6, },
|
||||
{ huff_sfb_b4_bits, huff_sfb_b4_codes, 16, 1, 0, 4, 8, },
|
||||
{ huff_sfb_b5_bits, huff_sfb_b5_codes, 32, 1, 0, 5, 8, },
|
||||
{ huff_sfb_b2_bits, huff_sfb_b2_codes, 4, 1, 0, 2 },
|
||||
{ huff_sfb_b3_bits, huff_sfb_b3_codes, 8, 1, 0, 3 },
|
||||
{ huff_sfb_b4_bits, huff_sfb_b4_codes, 16, 1, 0, 4 },
|
||||
{ huff_sfb_b5_bits, huff_sfb_b5_codes, 32, 1, 0, 5 },
|
||||
};
|
||||
|
||||
static const uint8_t huff_spec_a21_bits[] = {
|
||||
@ -1539,40 +1538,40 @@ static const HuffmanCodebook at9_huffman_coeffs[][8][4] = {
|
||||
{ { 0 } },
|
||||
{ { 0 } },
|
||||
{
|
||||
{ huff_spec_a21_bits, huff_spec_a21_codes, 16, 2, 1, 2, 3, },
|
||||
{ huff_spec_a22_bits, huff_spec_a22_codes, 256, 4, 2, 2, 8, },
|
||||
{ huff_spec_a23_bits, huff_spec_a23_codes, 256, 4, 2, 2, 9, },
|
||||
{ huff_spec_a24_bits, huff_spec_a24_codes, 256, 4, 2, 2, 10, },
|
||||
{ huff_spec_a21_bits, huff_spec_a21_codes, 16, 2, 1, 2 },
|
||||
{ huff_spec_a22_bits, huff_spec_a22_codes, 256, 4, 2, 2 },
|
||||
{ huff_spec_a23_bits, huff_spec_a23_codes, 256, 4, 2, 2 },
|
||||
{ huff_spec_a24_bits, huff_spec_a24_codes, 256, 4, 2, 2 },
|
||||
},
|
||||
{
|
||||
{ huff_spec_a31_bits, huff_spec_a31_codes, 64, 2, 1, 3, 7, },
|
||||
{ huff_spec_a32_bits, huff_spec_a32_codes, 64, 2, 1, 3, 7, },
|
||||
{ huff_spec_a33_bits, huff_spec_a33_codes, 64, 2, 1, 3, 8, },
|
||||
{ huff_spec_a34_bits, huff_spec_a34_codes, 64, 2, 1, 3, 10, },
|
||||
{ huff_spec_a31_bits, huff_spec_a31_codes, 64, 2, 1, 3 },
|
||||
{ huff_spec_a32_bits, huff_spec_a32_codes, 64, 2, 1, 3 },
|
||||
{ huff_spec_a33_bits, huff_spec_a33_codes, 64, 2, 1, 3 },
|
||||
{ huff_spec_a34_bits, huff_spec_a34_codes, 64, 2, 1, 3 },
|
||||
},
|
||||
{
|
||||
{ huff_spec_a41_bits, huff_spec_a41_codes, 256, 2, 1, 4, 9, },
|
||||
{ huff_spec_a42_bits, huff_spec_a42_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_a43_bits, huff_spec_a43_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_a44_bits, huff_spec_a44_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_a41_bits, huff_spec_a41_codes, 256, 2, 1, 4 },
|
||||
{ huff_spec_a42_bits, huff_spec_a42_codes, 256, 2, 1, 4 },
|
||||
{ huff_spec_a43_bits, huff_spec_a43_codes, 256, 2, 1, 4 },
|
||||
{ huff_spec_a44_bits, huff_spec_a44_codes, 256, 2, 1, 4 },
|
||||
},
|
||||
{
|
||||
{ huff_spec_a51_bits, huff_spec_a51_codes, 32, 1, 0, 5, 6, },
|
||||
{ huff_spec_a52_bits, huff_spec_a52_codes, 32, 1, 0, 5, 6, },
|
||||
{ huff_spec_a53_bits, huff_spec_a53_codes, 32, 1, 0, 5, 7, },
|
||||
{ huff_spec_a54_bits, huff_spec_a54_codes, 32, 1, 0, 5, 8, },
|
||||
{ huff_spec_a51_bits, huff_spec_a51_codes, 32, 1, 0, 5 },
|
||||
{ huff_spec_a52_bits, huff_spec_a52_codes, 32, 1, 0, 5 },
|
||||
{ huff_spec_a53_bits, huff_spec_a53_codes, 32, 1, 0, 5 },
|
||||
{ huff_spec_a54_bits, huff_spec_a54_codes, 32, 1, 0, 5 },
|
||||
},
|
||||
{
|
||||
{ huff_spec_a61_bits, huff_spec_a61_codes, 64, 1, 0, 6, 7, },
|
||||
{ huff_spec_a62_bits, huff_spec_a62_codes, 64, 1, 0, 6, 7, },
|
||||
{ huff_spec_a63_bits, huff_spec_a63_codes, 64, 1, 0, 6, 8, },
|
||||
{ huff_spec_a64_bits, huff_spec_a64_codes, 64, 1, 0, 6, 9, },
|
||||
{ huff_spec_a61_bits, huff_spec_a61_codes, 64, 1, 0, 6 },
|
||||
{ huff_spec_a62_bits, huff_spec_a62_codes, 64, 1, 0, 6 },
|
||||
{ huff_spec_a63_bits, huff_spec_a63_codes, 64, 1, 0, 6 },
|
||||
{ huff_spec_a64_bits, huff_spec_a64_codes, 64, 1, 0, 6 },
|
||||
},
|
||||
{
|
||||
{ huff_spec_a71_bits, huff_spec_a71_codes, 128, 1, 0, 7, 8, },
|
||||
{ huff_spec_a72_bits, huff_spec_a72_codes, 128, 1, 0, 7, 8, },
|
||||
{ huff_spec_a73_bits, huff_spec_a73_codes, 128, 1, 0, 7, 9, },
|
||||
{ huff_spec_a74_bits, huff_spec_a74_codes, 128, 1, 0, 7, 10, },
|
||||
{ huff_spec_a71_bits, huff_spec_a71_codes, 128, 1, 0, 7 },
|
||||
{ huff_spec_a72_bits, huff_spec_a72_codes, 128, 1, 0, 7 },
|
||||
{ huff_spec_a73_bits, huff_spec_a73_codes, 128, 1, 0, 7 },
|
||||
{ huff_spec_a74_bits, huff_spec_a74_codes, 128, 1, 0, 7 },
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -1580,39 +1579,39 @@ static const HuffmanCodebook at9_huffman_coeffs[][8][4] = {
|
||||
{ { 0 } },
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b22_bits, huff_spec_b22_codes, 256, 4, 2, 2, 10, },
|
||||
{ huff_spec_b23_bits, huff_spec_b23_codes, 256, 4, 2, 2, 10, },
|
||||
{ huff_spec_b24_bits, huff_spec_b24_codes, 256, 4, 2, 2, 10, },
|
||||
{ huff_spec_b22_bits, huff_spec_b22_codes, 256, 4, 2, 2 },
|
||||
{ huff_spec_b23_bits, huff_spec_b23_codes, 256, 4, 2, 2 },
|
||||
{ huff_spec_b24_bits, huff_spec_b24_codes, 256, 4, 2, 2 },
|
||||
},
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b32_bits, huff_spec_b32_codes, 64, 2, 1, 3, 9, },
|
||||
{ huff_spec_b33_bits, huff_spec_b33_codes, 64, 2, 1, 3, 10, },
|
||||
{ huff_spec_b34_bits, huff_spec_b34_codes, 64, 2, 1, 3, 10, },
|
||||
{ huff_spec_b32_bits, huff_spec_b32_codes, 64, 2, 1, 3 },
|
||||
{ huff_spec_b33_bits, huff_spec_b33_codes, 64, 2, 1, 3 },
|
||||
{ huff_spec_b34_bits, huff_spec_b34_codes, 64, 2, 1, 3 },
|
||||
},
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b42_bits, huff_spec_b42_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_b43_bits, huff_spec_b43_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_b44_bits, huff_spec_b44_codes, 256, 2, 1, 4, 10, },
|
||||
{ huff_spec_b42_bits, huff_spec_b42_codes, 256, 2, 1, 4 },
|
||||
{ huff_spec_b43_bits, huff_spec_b43_codes, 256, 2, 1, 4 },
|
||||
{ huff_spec_b44_bits, huff_spec_b44_codes, 256, 2, 1, 4 },
|
||||
},
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b52_bits, huff_spec_b52_codes, 32, 1, 0, 5, 7, },
|
||||
{ huff_spec_b53_bits, huff_spec_b53_codes, 32, 1, 0, 5, 8, },
|
||||
{ huff_spec_b54_bits, huff_spec_b54_codes, 32, 1, 0, 5, 9, },
|
||||
{ huff_spec_b52_bits, huff_spec_b52_codes, 32, 1, 0, 5 },
|
||||
{ huff_spec_b53_bits, huff_spec_b53_codes, 32, 1, 0, 5 },
|
||||
{ huff_spec_b54_bits, huff_spec_b54_codes, 32, 1, 0, 5 },
|
||||
},
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b62_bits, huff_spec_b62_codes, 64, 1, 0, 6, 8, },
|
||||
{ huff_spec_b63_bits, huff_spec_b63_codes, 64, 1, 0, 6, 9, },
|
||||
{ huff_spec_b64_bits, huff_spec_b64_codes, 64, 1, 0, 6, 10, },
|
||||
{ huff_spec_b62_bits, huff_spec_b62_codes, 64, 1, 0, 6 },
|
||||
{ huff_spec_b63_bits, huff_spec_b63_codes, 64, 1, 0, 6 },
|
||||
{ huff_spec_b64_bits, huff_spec_b64_codes, 64, 1, 0, 6 },
|
||||
},
|
||||
{
|
||||
{ 0 },
|
||||
{ huff_spec_b72_bits, huff_spec_b72_codes, 128, 1, 0, 7, 9, },
|
||||
{ huff_spec_b73_bits, huff_spec_b73_codes, 128, 1, 0, 7, 10, },
|
||||
{ huff_spec_b74_bits, huff_spec_b74_codes, 128, 1, 0, 7, 10, },
|
||||
{ huff_spec_b72_bits, huff_spec_b72_codes, 128, 1, 0, 7 },
|
||||
{ huff_spec_b73_bits, huff_spec_b73_codes, 128, 1, 0, 7 },
|
||||
{ huff_spec_b74_bits, huff_spec_b74_codes, 128, 1, 0, 7 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user