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

📄 global.cpp

📁 avs decoder sources, added a command line sample
💻 CPP
字号:
/** * Copyright (c) 2006 *      OpenAVS Developers. All Rights Reserved. * * Copyright (c) 2005-2006 *      NSCC. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *//** * ! \file "global.c" *   \brief Global variables and functions. *///#include <endian.h>#include "define.h"#include "global.h"#include "stream.h"#include "vlc.h"/* global variables ------------------------------- */AVS_BYTE ClipTable[CLIPSIZE * 2 + 256];AVS_INT  TabNoBuf[1025];AVS_INT  TabNoBuf2[1025];const AVS_INT ShiftTable[64] = {	15, 15, 15, 15, 15, 15, 15, 15,	14, 14, 14, 14, 14, 14, 14, 14,	14, 13, 13, 13, 13, 13, 13, 13,	12, 12, 12, 12, 12, 12, 12, 12,	12, 11, 11, 11, 11, 11, 11, 11,	11, 10, 10, 10, 10, 10, 10, 10,	10,  9,  9,  9,  9,  9,  9,  9,	 8,  8,  8,  8,  8,  8,  8,  8};const AVS_FLOAT fPictureRates[] = {	 0.0,	23.976,	24.0,	25.0,	29.97,	30.0,	50.0,	59.94,	60.0};const AVS_BYTE NCBP[64][2]= {	{63,  0}, {15, 15}, {31, 63}, {47, 31}, 	{ 0, 16}, {14, 32}, {13, 47}, {11, 13},	{ 7, 14}, { 5, 11}, {10, 12}, { 8,  5},	{12, 10}, {61,  7}, { 4, 48}, {55,  3},	{ 1,  2}, { 2,  8}, {59,  4}, { 3,  1},	{62, 61}, { 9, 55}, { 6, 59}, {29, 62},	{45, 29}, {51, 27}, {23, 23}, {39, 19},	{27, 30}, {46, 28}, {53,  9}, {30,  6}, 	{43, 60}, {37, 21}, {60, 44}, {16, 26},	{21, 51}, {28, 35}, {19, 18}, {35, 20},	{42, 24}, {26, 53}, {44, 17}, {32, 37},	{58, 39}, {24, 45}, {20, 58}, {17, 43},	{18, 42}, {48, 46}, {22, 36}, {33, 33}, 	{25, 34}, {49, 40}, {40, 52}, {36, 49},	{34, 50}, {50, 56}, {52, 25}, {54, 22},	{41, 54}, {56, 57}, {38, 41}, {57, 38}};const AVS_BYTE NCBP422[4][2]= {	{0, 0},  {1, 1},  {2, 2},  {3, 3}};const AVS_DWORD MvNum[53] = {	/* Intra Mode */	0,	/* P Mb Mode */	0, 1, 2, 2, 4,	/* B Mb Mode */	0, 0, 1, 1, 1,	2, 2, 2, 2, 2,	2, 2, 2, 2, 2,	2, 2, 2, 2, 2,	2, 2, 2, 0, 0,	1, 1, 1};const AVS_INT DequantTable[64] = {	32768, 36061, 38968, 42495, 46341, 50535, 55437, 60424,	32932, 35734, 38968, 42495, 46177, 50535, 55109, 59933,	65535, 35734, 38968, 42577, 46341, 50617, 55027, 60097,	32809, 35734, 38968, 42454, 46382, 50576, 55109, 60056,	65535, 35734, 38968, 42495, 46320, 50515, 55109, 60076,	65535, 35744, 38968, 42495, 46341, 50535, 55099, 60087,	65535, 35734, 38973, 42500, 46341, 50535, 55109, 60097,	32771, 35734, 38965, 42497, 46341, 50535, 55109, 60099};/** * Function: Construct Clip table to replace Clip macro. */void MakeClipTable(){	AVS_BYTE * p = ClipTable;	AVS_INT i;	memset(p, 0, CLIPSIZE);	p = ClipTable + CLIPSIZE;	for (i = 0; i < 256; i++)		*(p++) = i;	memset(p, 255, CLIPSIZE);}/** * Function: Construct TabNo table. * used to look up table instead of making decisions and evaluating ABS in * VLD process. */void MakeTabNoBuf(){	int i;	TabNoBuf[512] = 0;	for (i = 1; i <= 2; i++) {		TabNoBuf[512 + i] = TabNoBuf[512 - i] = i;	}	for (i = 3; i <= 4; i++) {		TabNoBuf[512 + i] = TabNoBuf[512 - i] = 3;	}	for (i = 5; i <= 7; i++) {		TabNoBuf[512 + i] = TabNoBuf[512 - i] = 4;	}	for (i = 8; i <= 10; i++) {		TabNoBuf[512 + i] = TabNoBuf[512 - i] = 5;	}	for (i = 11; i <= 512; i++) {		TabNoBuf[512 + i] = TabNoBuf[512 - i] = 6;	}	// table2	TabNoBuf2[512] = 0;	for (i = 1; i <= 3; i++) {		TabNoBuf2[512 + i] = TabNoBuf2[512 - i] = i;	}	for (i = 4; i <= 6; i++) {		TabNoBuf2[512 + i] = TabNoBuf2[512 - i] = 4;	}	for(i = 7; i <= 9; i++) {		TabNoBuf2[512 + i] = TabNoBuf2[512 - i] = 5;	}	for(i = 10; i < 512; i++) {		TabNoBuf2[512 + i] = TabNoBuf2[512 - i] = 6;	}}/** * Function: seek for next Start/End code. * To make sure current data is a whole frame of data. */AVS_BOOL FindNextPicOrEndStartCode(		const AVS_BYTE * pbData, AVS_DWORD dwDataLen, 		AVS_DWORD* dwLeft){	const AVS_BYTE * pbCurrent = pbData + 4;	AVS_DWORD Left = dwDataLen - 4;	while ((Left > 4) && #if __BYTE_ORDER == __LITTLE_ENDIAN	       ((*(AVS_DWORD *) pbCurrent) != 0xB3010000) && 	       ((*(AVS_DWORD *) pbCurrent) != 0xB6010000) &&	       ((*(AVS_DWORD *) pbCurrent) != 0xB1010000)#elif __BYTE_ORDER == __BIG_ENDIAN		((*(AVS_DWORD *) pbCurrent) != 0x000001B3) &&		((*(AVS_DWORD *) pbCurrent) != 0x000001B6) &&		((*(AVS_DWORD *) pbCurrent) != 0x000001B1)#else#error "Cannot determine byte order"#endif	) {		pbCurrent ++;		Left --;	}	if (Left > 4) {		*dwLeft = Left;		return TRUE;	}	return FALSE;}/** * Function: seek for next slice header. */AVS_BOOL FindSliceStartCode(const AVS_BYTE** pbData, AVS_DWORD* dwLeft){	const AVS_BYTE * pbCurrent = *pbData;	AVS_DWORD Left = *dwLeft;	while (Left > 4 && 	       ! IS_SLICE_START_CODE(DWORD_SWAP(*(AVS_DWORD *) pbCurrent))) {		pbCurrent ++;		Left --;	}	if (Left > 4) {		*pbData = pbCurrent;		*dwLeft = Left;		return TRUE;	}	return FALSE;}/** * Function: Decide if input is slice header or not. */AVS_BOOL IsSliceHeader(const AVS_BYTE * pbData, AVS_DWORD dwBitOffset){	AVS_DWORD dwByteOffset = dwBitOffset / 8;	if (dwBitOffset % 8 > 0)		dwByteOffset += 1;	return IS_SLICE_START_CODE(DWORD_SWAP(*(AVS_DWORD*)(pbData+dwByteOffset)));}/** * Function: Allocate memory for reference picture. */AVS_HRESULT GetMem(VIDEODATA ** refFrame, AVS_INT refNum){	AVS_INT iYlen = AVS_MAX_HORIZONTAL*AVS_MAX_VERTICAL;	AVS_INT iUVlen = iYlen/4;	AVS_INT i;	for (i = 0; i < refNum; i++) {		refFrame[i] = (VIDEODATA *)malloc(sizeof(VIDEODATA));	}	for (i = 0; i < refNum; i++) {		refFrame[i]->y = (AVS_BYTE *)malloc(sizeof(AVS_BYTE) * iYlen);		refFrame[i]->u = (AVS_BYTE *)malloc(sizeof(AVS_BYTE) * iUVlen);		refFrame[i]->v = (AVS_BYTE *)malloc(sizeof(AVS_BYTE) * iUVlen);	}	return AVS_NOERROR;}/** * Function: Release memory for reference picture. */void ReleaseMem(VIDEODATA* refFrame[], AVS_INT refNum){	for (AVS_INT i = 0; i < refNum; i++) {		free(refFrame[i]->y);		free(refFrame[i]->u);		free(refFrame[i]->v);		free(refFrame[i]);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -