⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vlc_codes.h

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 H
📖 第 1 页 / 共 3 页
字号:
#ifndef _VLC_CODES_H_
#define _VLC_CODES_H_

#include "../portab.h"
#include "mbcoding.h"

#define VLC_ERROR	(-1)
#define ESCAPE 7167

typedef 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 + -