avcodec/dcahuff: Always use three bits for transition mode VLCs

It increases the size of one VLC from two to three bits, thereby
requiring four more VLCEntries (16 bytes .bss), but it allows to
inline the number of bits used when reading them.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-09-06 12:21:28 +02:00
parent 8819860f34
commit 077880ad88
3 changed files with 4 additions and 4 deletions

View File

@ -457,7 +457,7 @@ static int parse_subframe_header(DCACoreDecoder *s, int sf,
for (band = 0; band < s->subband_vq_start[ch]; band++)
if (s->bit_allocation[ch][band])
s->transition_mode[sf][ch][band] = get_vlc2(&s->gb, ff_dca_vlc_transition_mode[sel].table,
ff_dca_vlc_transition_mode[sel].bits,1);
DCA_TMODE_VLC_BITS, 1);
}
}

View File

@ -29,7 +29,6 @@
#include "put_bits.h"
#define TMODE_COUNT 4
static const uint8_t tmode_vlc_bits[TMODE_COUNT] = { 3, 3, 3, 2 };
static const uint16_t tmode_codes[TMODE_COUNT][4] = {
{ 0x0000, 0x0002, 0x0006, 0x0007 },
{ 0x0002, 0x0006, 0x0007, 0x0000 },
@ -1252,7 +1251,7 @@ VLC ff_dca_vlc_rsd;
av_cold void ff_dca_init_vlcs(void)
{
static VLCElem dca_table[30214];
static VLCElem dca_table[30218];
unsigned offset = 0;
int i, j;
@ -1277,7 +1276,7 @@ av_cold void ff_dca_init_vlcs(void)
scales_bits[i], scales_codes[i]);
for (unsigned i = 0; i < FF_ARRAY_ELEMS(ff_dca_vlc_transition_mode); i++)
DCA_INIT_VLC(ff_dca_vlc_transition_mode[i], tmode_vlc_bits[i], 4,
DCA_INIT_VLC(ff_dca_vlc_transition_mode[i], DCA_TMODE_VLC_BITS, 4,
tmode_bits[i], tmode_codes[i]);
for (i = 0; i < DCA_CODE_BOOKS; i++) {

View File

@ -40,6 +40,7 @@ typedef struct DCAVLC {
} DCAVLC;
extern DCAVLC ff_dca_vlc_bit_allocation;
#define DCA_TMODE_VLC_BITS 3
extern VLC ff_dca_vlc_transition_mode[4];
extern DCAVLC ff_dca_vlc_scale_factor;
extern DCAVLC ff_dca_vlc_quant_index[DCA_CODE_BOOKS];