avcodec/indeo2: Make tables used to initialize VLCs smaller
Switching from ff_init_vlc_sparse() to ff_init_vlc_from_lengths() allows to replace codes which are so long that they need to be stored in an uint16_t by symbols which fit into an uint8_t; furthermore, it is also easily possible to already incorporate the offset (the real range of Indeo 2 symbols starts at one, not zero) into the symbols. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
		
							parent
							
								
									cd7c3ac84d
								
							
						
					
					
						commit
						f25dde0e27
					
				@ -46,7 +46,7 @@ static VLC ir2_vlc;
 | 
			
		||||
/* Indeo 2 codes are in range 0x01..0x7F and 0x81..0x90 */
 | 
			
		||||
static inline int ir2_get_code(GetBitContext *gb)
 | 
			
		||||
{
 | 
			
		||||
    return get_vlc2(gb, ir2_vlc.table, CODE_VLC_BITS, 1) + 1;
 | 
			
		||||
    return get_vlc2(gb, ir2_vlc.table, CODE_VLC_BITS, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ir2_decode_plane(Ir2Context *ctx, int width, int height, uint8_t *dst,
 | 
			
		||||
@ -237,9 +237,9 @@ static av_cold int ir2_decode_init(AVCodecContext *avctx)
 | 
			
		||||
    if (!ic->picture)
 | 
			
		||||
        return AVERROR(ENOMEM);
 | 
			
		||||
 | 
			
		||||
    INIT_LE_VLC_STATIC(&ir2_vlc, CODE_VLC_BITS, IR2_CODES,
 | 
			
		||||
                       &ir2_codes[0][1], 4, 2,
 | 
			
		||||
                       &ir2_codes[0][0], 4, 2, 1 << CODE_VLC_BITS);
 | 
			
		||||
    INIT_VLC_STATIC_FROM_LENGTHS(&ir2_vlc, CODE_VLC_BITS, IR2_CODES,
 | 
			
		||||
                                 &ir2_tab[0][1], 2, &ir2_tab[0][0], 2, 1,
 | 
			
		||||
                                 0, INIT_VLC_OUTPUT_LE, 1 << CODE_VLC_BITS);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -25,43 +25,36 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#define IR2_CODES 143
 | 
			
		||||
static const uint16_t ir2_codes[IR2_CODES][2] = {
 | 
			
		||||
    { 0x0000,  3 }, { 0x0004,  3 }, { 0x0006,  3 }, { 0x0001,  5 },
 | 
			
		||||
    { 0x0009,  5 }, { 0x0019,  5 }, { 0x000D,  5 }, { 0x001D,  5 },
 | 
			
		||||
    { 0x0023,  6 }, { 0x0013,  6 }, { 0x0033,  6 }, { 0x000B,  6 },
 | 
			
		||||
    { 0x002B,  6 }, { 0x001B,  6 }, { 0x0007,  8 }, { 0x0087,  8 },
 | 
			
		||||
    { 0x0027,  8 }, { 0x00A7,  8 }, { 0x0067,  8 }, { 0x00E7,  8 },
 | 
			
		||||
    { 0x0097,  8 }, { 0x0057,  8 }, { 0x0037,  8 }, { 0x00B7,  8 },
 | 
			
		||||
    { 0x00F7,  8 }, { 0x000F,  9 }, { 0x008F,  9 }, { 0x018F,  9 },
 | 
			
		||||
    { 0x014F,  9 }, { 0x00CF,  9 }, { 0x002F,  9 }, { 0x012F,  9 },
 | 
			
		||||
    { 0x01AF,  9 }, { 0x006F,  9 }, { 0x00EF,  9 }, { 0x01EF,  9 },
 | 
			
		||||
    { 0x001F, 10 }, { 0x021F, 10 }, { 0x011F, 10 }, { 0x031F, 10 },
 | 
			
		||||
    { 0x009F, 10 }, { 0x029F, 10 }, { 0x019F, 10 }, { 0x039F, 10 },
 | 
			
		||||
    { 0x005F, 10 }, { 0x025F, 10 }, { 0x015F, 10 }, { 0x035F, 10 },
 | 
			
		||||
    { 0x00DF, 10 }, { 0x02DF, 10 }, { 0x01DF, 10 }, { 0x03DF, 10 },
 | 
			
		||||
    { 0x003F, 13 }, { 0x103F, 13 }, { 0x083F, 13 }, { 0x183F, 13 },
 | 
			
		||||
    { 0x043F, 13 }, { 0x143F, 13 }, { 0x0C3F, 13 }, { 0x1C3F, 13 },
 | 
			
		||||
    { 0x023F, 13 }, { 0x123F, 13 }, { 0x0A3F, 13 }, { 0x1A3F, 13 },
 | 
			
		||||
    { 0x063F, 13 }, { 0x163F, 13 }, { 0x0E3F, 13 }, { 0x1E3F, 13 },
 | 
			
		||||
    { 0x013F, 13 }, { 0x113F, 13 }, { 0x093F, 13 }, { 0x193F, 13 },
 | 
			
		||||
    { 0x053F, 13 }, { 0x153F, 13 }, { 0x0D3F, 13 }, { 0x1D3F, 13 },
 | 
			
		||||
    { 0x033F, 13 }, { 0x133F, 13 }, { 0x0B3F, 13 }, { 0x1B3F, 13 },
 | 
			
		||||
    { 0x073F, 13 }, { 0x173F, 13 }, { 0x0F3F, 13 }, { 0x1F3F, 13 },
 | 
			
		||||
    { 0x00BF, 13 }, { 0x10BF, 13 }, { 0x08BF, 13 }, { 0x18BF, 13 },
 | 
			
		||||
    { 0x04BF, 13 }, { 0x14BF, 13 }, { 0x0CBF, 13 }, { 0x1CBF, 13 },
 | 
			
		||||
    { 0x02BF, 13 }, { 0x12BF, 13 }, { 0x0ABF, 13 }, { 0x1ABF, 13 },
 | 
			
		||||
    { 0x06BF, 13 }, { 0x16BF, 13 }, { 0x0EBF, 13 }, { 0x1EBF, 13 },
 | 
			
		||||
    { 0x01BF, 13 }, { 0x11BF, 13 }, { 0x09BF, 13 }, { 0x19BF, 13 },
 | 
			
		||||
    { 0x05BF, 13 }, { 0x15BF, 13 }, { 0x0DBF, 13 }, { 0x1DBF, 13 },
 | 
			
		||||
    { 0x03BF, 13 }, { 0x13BF, 13 }, { 0x0BBF, 13 }, { 0x1BBF, 13 },
 | 
			
		||||
    { 0x07BF, 13 }, { 0x17BF, 13 }, { 0x0FBF, 13 }, { 0x1FBF, 13 },
 | 
			
		||||
    { 0x007F, 14 }, { 0x207F, 14 }, { 0x107F, 14 }, { 0x307F, 14 },
 | 
			
		||||
    { 0x087F, 14 }, { 0x287F, 14 }, { 0x187F, 14 }, { 0x387F, 14 },
 | 
			
		||||
    { 0x047F, 14 }, { 0x247F, 14 }, { 0x147F, 14 }, { 0x0002,  3 },
 | 
			
		||||
    { 0x0011,  5 }, { 0x0005,  5 }, { 0x0015,  5 }, { 0x0003,  6 },
 | 
			
		||||
    { 0x003B,  6 }, { 0x0047,  8 }, { 0x00C7,  8 }, { 0x0017,  8 },
 | 
			
		||||
    { 0x00D7,  8 }, { 0x0077,  8 }, { 0x010F,  9 }, { 0x004F,  9 },
 | 
			
		||||
    { 0x01CF,  9 }, { 0x00AF,  9 }, { 0x016F,  9 },
 | 
			
		||||
static const uint8_t ir2_tab[IR2_CODES][2] = {
 | 
			
		||||
    { 0x01,  3 }, { 0x02,  3 }, { 0x80,  3 }, { 0x03,  3 }, { 0x04,  5 },
 | 
			
		||||
    { 0x81,  5 }, { 0x05,  5 }, { 0x06,  5 }, { 0x82,  5 }, { 0x83,  5 },
 | 
			
		||||
    { 0x07,  5 }, { 0x08,  5 }, { 0x84,  6 }, { 0x09,  6 }, { 0x0A,  6 },
 | 
			
		||||
    { 0x0B,  6 }, { 0x0C,  6 }, { 0x0D,  6 }, { 0x0E,  6 }, { 0x85,  6 },
 | 
			
		||||
    { 0x0F,  8 }, { 0x10,  8 }, { 0x86,  8 }, { 0x87,  8 }, { 0x11,  8 },
 | 
			
		||||
    { 0x12,  8 }, { 0x13,  8 }, { 0x14,  8 }, { 0x88,  8 }, { 0x15,  8 },
 | 
			
		||||
    { 0x16,  8 }, { 0x89,  8 }, { 0x17,  8 }, { 0x18,  8 }, { 0x8A,  8 },
 | 
			
		||||
    { 0x19,  8 }, { 0x1A,  9 }, { 0x8B,  9 }, { 0x1B,  9 }, { 0x1C,  9 },
 | 
			
		||||
    { 0x8C,  9 }, { 0x1D,  9 }, { 0x1E,  9 }, { 0x8D,  9 }, { 0x1F,  9 },
 | 
			
		||||
    { 0x20,  9 }, { 0x8E,  9 }, { 0x21,  9 }, { 0x22,  9 }, { 0x8F,  9 },
 | 
			
		||||
    { 0x23,  9 }, { 0x24,  9 }, { 0x25, 10 }, { 0x26, 10 }, { 0x27, 10 },
 | 
			
		||||
    { 0x28, 10 }, { 0x29, 10 }, { 0x2A, 10 }, { 0x2B, 10 }, { 0x2C, 10 },
 | 
			
		||||
    { 0x2D, 10 }, { 0x2E, 10 }, { 0x2F, 10 }, { 0x30, 10 }, { 0x31, 10 },
 | 
			
		||||
    { 0x32, 10 }, { 0x33, 10 }, { 0x34, 10 }, { 0x35, 13 }, { 0x36, 13 },
 | 
			
		||||
    { 0x37, 13 }, { 0x38, 13 }, { 0x39, 13 }, { 0x3A, 13 }, { 0x3B, 13 },
 | 
			
		||||
    { 0x3C, 13 }, { 0x3D, 13 }, { 0x3E, 13 }, { 0x3F, 13 }, { 0x40, 13 },
 | 
			
		||||
    { 0x41, 13 }, { 0x42, 13 }, { 0x43, 13 }, { 0x44, 13 }, { 0x45, 13 },
 | 
			
		||||
    { 0x46, 13 }, { 0x47, 13 }, { 0x48, 13 }, { 0x49, 13 }, { 0x4A, 13 },
 | 
			
		||||
    { 0x4B, 13 }, { 0x4C, 13 }, { 0x4D, 13 }, { 0x4E, 13 }, { 0x4F, 13 },
 | 
			
		||||
    { 0x50, 13 }, { 0x51, 13 }, { 0x52, 13 }, { 0x53, 13 }, { 0x54, 13 },
 | 
			
		||||
    { 0x55, 13 }, { 0x56, 13 }, { 0x57, 13 }, { 0x58, 13 }, { 0x59, 13 },
 | 
			
		||||
    { 0x5A, 13 }, { 0x5B, 13 }, { 0x5C, 13 }, { 0x5D, 13 }, { 0x5E, 13 },
 | 
			
		||||
    { 0x5F, 13 }, { 0x60, 13 }, { 0x61, 13 }, { 0x62, 13 }, { 0x63, 13 },
 | 
			
		||||
    { 0x64, 13 }, { 0x65, 13 }, { 0x66, 13 }, { 0x67, 13 }, { 0x68, 13 },
 | 
			
		||||
    { 0x69, 13 }, { 0x6A, 13 }, { 0x6B, 13 }, { 0x6C, 13 }, { 0x6D, 13 },
 | 
			
		||||
    { 0x6E, 13 }, { 0x6F, 13 }, { 0x70, 13 }, { 0x71, 13 }, { 0x72, 13 },
 | 
			
		||||
    { 0x73, 13 }, { 0x74, 13 }, { 0x75, 14 }, { 0x76, 14 }, { 0x77, 14 },
 | 
			
		||||
    { 0x78, 14 }, { 0x79, 14 }, { 0x7A, 14 }, { 0x7B, 14 }, { 0x7C, 14 },
 | 
			
		||||
    { 0x7D, 14 }, { 0x7E, 14 }, { 0x7F, 14 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const uint8_t ir2_delta_table[4][256] = {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user