📄 vlc_codes.h
字号:
#ifndef _VLC_CODES_H_#define _VLC_CODES_H_#include "../portab.h"#include "mbcoding.h"#define VLC_ERROR (-1)#define ESCAPE 7167typedef struct{ uint32_t code; int8_t len;} VLC;static VLC *DCT3D[2];/****************************************************************** * common tables between encoder/decoder * ******************************************************************//* constants taken from momusys/vm_common/inlcude/max_level.h */static char max_level[4][64] = { { // intra, last = 0 27, 10, 5, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // intra, last = 1 8, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // inter, last = 0 12, 6, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // inter, last = 1 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }};static char max_run[4][256] = { { // intra, last = 0 0, 14, 9, 7, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // intra, last = 1 0, 20, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // inter, last = 0 0, 26, 10, 6, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { // inter, last = 1 0, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }};/****************************************************************** * encoder tables * ******************************************************************//* DCT coefficients. Four tables, two for last = 0, two for last = 1. the sign bit must be added afterwards. *//* first part of coeffs for last = 0. Indexed by [run][level-1] */static VLC coeff_tab0[2][12] = { /* run = 0 */ { {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7}, {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21, 10}, {0x20, 10}, {0x07, 11}, {0x06, 11}, {0x20, 11} }, /* run = 1 */ { {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f, 10}, {0x21, 11}, {0x50, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0} }};/* rest of coeffs for last = 0. indexing by [run-2][level-1] */static VLC coeff_tab1[25][4] = { /* run = 2 */ { {0x0e, 4}, {0x1d, 8}, {0x0e, 10}, {0x51, 12} }, /* run = 3 */ { {0x0d, 5}, {0x23, 9}, {0x0d, 10}, {0x00, 0} }, /* run = 4-26 */ { {0x0c, 5}, {0x22, 9}, {0x52, 12}, {0x00, 0} }, { {0x0b, 5}, {0x0c, 10}, {0x53, 12}, {0x00, 0} }, { {0x13, 6}, {0x0b, 10}, {0x54, 12}, {0x00, 0} }, { {0x12, 6}, {0x0a, 10}, {0x00, 0}, {0x00, 0} }, { {0x11, 6}, {0x09, 10}, {0x00, 0}, {0x00, 0} }, { {0x10, 6}, {0x08, 10}, {0x00, 0}, {0x00, 0} }, { {0x16, 7}, {0x55, 12}, {0x00, 0}, {0x00, 0} }, { {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x22, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x23, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x56, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x57, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0} }};/* first coeffs of last = 1. indexing by [run][level-1] */static VLC coeff_tab2[2][3] = { /* run = 0 */ { {0x07, 4}, {0x19, 9}, {0x05, 11} }, /* run = 1 */ { {0x0f, 6}, {0x04, 11}, {0x00, 0} }};/* rest of coeffs for last = 1. indexing by [run-2] */static VLC coeff_tab3[40][1] = { {{0x0e, 6}}, {{0x0d, 6}}, {{0x0c, 6}}, {{0x13, 7}}, {{0x12, 7}}, {{0x11, 7}}, {{0x10, 7}}, {{0x1a, 8}}, {{0x19, 8}}, {{0x18, 8}}, {{0x17, 8}}, {{0x16, 8}}, {{0x15, 8}}, {{0x14, 8}}, {{0x13, 8}}, {{0x18, 9}}, {{0x17, 9}}, {{0x16, 9}}, {{0x15, 9}}, {{0x14, 9}}, {{0x13, 9}}, {{0x12, 9}}, {{0x11, 9}}, {{0x07, 10}}, {{0x06, 10}}, {{0x05, 10}}, {{0x04, 10}}, {{0x24, 11}}, {{0x25, 11}}, {{0x26, 11}}, {{0x27, 11}}, {{0x58, 12}}, {{0x59, 12}}, {{0x5a, 12}}, {{0x5b, 12}}, {{0x5c, 12}}, {{0x5d, 12}}, {{0x5e, 12}}, {{0x5f, 12}}, {{0x00, 0}}};/* New tables for Intra luminance coefficients. Same codewords, different meaning *//* Coeffs for last = 0, run = 0. Indexed by [level-1] */static VLC coeff_tab4[27] = { /* run = 0 */ {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5}, {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6}, {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8}, {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9}, {0x21, 10}, {0x20, 10}, {0x0f, 10}, {0x0e, 10}, {0x07, 11}, {0x06, 11}, {0x20, 11}, {0x21, 11}, {0x50, 12}, {0x51, 12}, {0x52, 12}};/* Coeffs for last = 0, run = 1. Indexed by [level-1] */static VLC coeff_tab5[10] = { {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8}, {0x20, 9}, {0x1f, 9}, {0x0d, 10}, {0x22, 11}, {0x53, 12}, {0x55, 12}};/* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */static VLC coeff_tab6[8][5] = { /* run = 2 */ { {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c, 10}, {0x56, 12} }, /* run = 3 */ { {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b, 10}, {0x00, 0} }, /* run = 4 */ { {0x10, 6}, {0x22, 9}, {0x0a, 10}, {0x00, 0}, {0x00, 0} }, /* run = 5 */ { {0x0d, 6}, {0x1c, 9}, {0x08, 10}, {0x00, 0}, {0x00, 0} }, /* run = 6 */ { {0x12, 7}, {0x1b, 9}, {0x54, 12}, {0x00, 0}, {0x00, 0} }, /* run = 7 */ { {0x14, 7}, {0x1a, 9}, {0x57, 12}, {0x00, 0}, {0x00, 0} }, /* run = 8 */ { {0x19, 8}, {0x09, 10}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, /* run = 9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -