📄 pb_globals.c
字号:
//==========================================================================//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR// PURPOSE.//// Copyright (c) 1999 - 2001 On2 Technologies Inc. All Rights Reserved.////--------------------------------------------------------------------------/****************************************************************************** Module Title : PB_Globals.c** Description : Video CODEC Demo: playback dll global declarations********************************************************************************//***************************************************************************** Header Files******************************************************************************/#define STRICT /* Strict type checking. */#include "pbdll.h"#include <string.h>#include <stdlib.h>//#if defined(MACPPC)//#include <stddef.h>//#include <MacMemory.h>//#endif#include "codec_common_interface.h"/***************************************************************************** Imports******************************************************************************/ extern unsigned long GetProcessorFrequency(); /***************************************************************************** Exported Global Variables******************************************************************************/// Process Frequencyunsigned int CPUFrequency;// Truth table to indicate if the given mode uses motion estimationBOOL ModeUsesMC[MAX_MODES] = { FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE };/**************************************************************************** * * ROUTINE : DeleteTmpBuffers * * * INPUTS : Instance of PB to be initialized * * OUTPUTS : * * RETURNS : * * * FUNCTION : Initializes the Playback instance passed in * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/void DeleteTmpBuffers(PB_INSTANCE * pbi){ if(pbi->ReconDataBufferAlloc) free(pbi->ReconDataBufferAlloc); if(pbi->DequantBufferAlloc) free(pbi->DequantBufferAlloc); if(pbi->TmpDataBufferAlloc) free(pbi->TmpDataBufferAlloc); if(pbi->TmpReconBufferAlloc) free(pbi->TmpReconBufferAlloc); if(pbi->dequant_Y_coeffsAlloc) free(pbi->dequant_Y_coeffsAlloc); if(pbi->dequant_UV_coeffsAlloc) free(pbi->dequant_UV_coeffsAlloc); if(pbi->dequant_Inter_coeffsAlloc) free(pbi->dequant_Inter_coeffsAlloc); if(pbi->ScaleBufferAlloc) free(pbi->ScaleBufferAlloc); if(pbi->dequant_InterUV_coeffsAlloc) free(pbi->dequant_InterUV_coeffsAlloc); pbi->dequant_UV_coeffsAlloc = 0; pbi->ReconDataBufferAlloc=0; pbi->DequantBufferAlloc = 0; pbi->TmpDataBufferAlloc = 0; pbi->TmpReconBufferAlloc = 0; pbi->dequant_Y_coeffsAlloc = 0; pbi->dequant_UV_coeffsAlloc = 0; pbi->dequant_InterUV_coeffsAlloc = 0; pbi->dequant_Inter_coeffsAlloc = 0; pbi->ScaleBufferAlloc = 0; pbi->ScaleBuffer = 0; pbi->ReconDataBuffer=0; pbi->DequantBuffer = 0; pbi->TmpDataBuffer = 0; pbi->TmpReconBuffer = 0; pbi->dequant_Y_coeffs = 0; pbi->dequant_UV_coeffs = 0; pbi->dequant_Inter_coeffs = 0; pbi->dequant_UV_coeffs = 0; pbi->dequant_InterUV_coeffs = 0; }/**************************************************************************** * * ROUTINE : AllocateTmpBuffers * * * INPUTS : Instance of PB to be initialized * * OUTPUTS : * * RETURNS : * * * FUNCTION : Initializes the Playback instance passed in * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/#define ROUNDUP32(X) ( ( ( (unsigned long) X ) + 31 )&( 0xFFFFFFE0 ) )BOOL AllocateTmpBuffers(PB_INSTANCE * pbi){ // clear any existing info DeleteTmpBuffers(pbi); // Adjust the position of all of our temporary pbi->ReconDataBufferAlloc = (INT16 *)malloc(32+64*sizeof(INT16)); if(!pbi->ReconDataBufferAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->DequantBufferAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->DequantBufferAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->TmpDataBufferAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->TmpDataBufferAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->TmpReconBufferAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->TmpReconBufferAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->dequant_Y_coeffsAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->dequant_Y_coeffsAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->dequant_UV_coeffsAlloc = (INT16 *)malloc(260+32 + 64 * sizeof(INT16)); if(!pbi->dequant_UV_coeffsAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->dequant_Inter_coeffsAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->dequant_Inter_coeffsAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->dequant_InterUV_coeffsAlloc = (INT16 *)malloc(32 + 64 * sizeof(INT16)); if(!pbi->dequant_InterUV_coeffsAlloc) { DeleteTmpBuffers(pbi); return FALSE;}; pbi->ReconDataBuffer = (INT16 *)ROUNDUP32(pbi->ReconDataBufferAlloc); pbi->DequantBuffer = (INT16 *)ROUNDUP32(pbi->DequantBufferAlloc); pbi->TmpDataBuffer = (INT16 *)ROUNDUP32(pbi->TmpDataBufferAlloc); pbi->TmpReconBuffer = (INT16 *)ROUNDUP32(pbi->TmpReconBufferAlloc); pbi->dequant_Y_coeffs = (Q_LIST_ENTRY *)ROUNDUP32(pbi->dequant_Y_coeffsAlloc); pbi->dequant_UV_coeffs = (Q_LIST_ENTRY *)ROUNDUP32(pbi->dequant_UV_coeffsAlloc); pbi->dequant_Inter_coeffs = (Q_LIST_ENTRY *)ROUNDUP32(pbi->dequant_Inter_coeffsAlloc); pbi->dequant_InterUV_coeffs = (Q_LIST_ENTRY *)ROUNDUP32(pbi->dequant_InterUV_coeffsAlloc); return TRUE;}/**************************************************************************** * * ROUTINE : DeletePBInstance * * * INPUTS : Instance of PB to be deleted * * OUTPUTS : * * RETURNS : * * * FUNCTION : frees the Playback instance passed in * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/void DeletePBInstance(PB_INSTANCE **pbi){ // clear any existing info if(*pbi) { DeleteTmpBuffers(*pbi); } free(*pbi); *pbi=0;}/**************************************************************************** * * ROUTINE : CreatePBInstance * * * INPUTS : Instance of PB to be initialized * * OUTPUTS : * * RETURNS : * * * FUNCTION : Initializes the Playback instance passed in * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/PB_INSTANCE * CreatePBInstance(void){ PB_INSTANCE *pbi=0; CONFIG_TYPE ConfigurationInit = { 0,0,0,0, 8,8, }; int pbi_size = sizeof(PB_INSTANCE); pbi=(PB_INSTANCE *) malloc(pbi_size); if(!pbi) { return 0; } // initialize whole structure to 0 memset((unsigned char *) pbi, 0, sizeof(PB_INSTANCE)); memcpy((void *) &pbi->Configuration, (void *) &ConfigurationInit, sizeof(CONFIG_TYPE)); if(!AllocateTmpBuffers(pbi)) { free(pbi); return 0; } // variables needing initialization (not being set to 0) pbi->PostProcessingLevel = 9; /* Perform post processing */#if defined(POSTPROCESS) pbi->ModifierPointer[0] = &pbi->Modifier[0][255]; pbi->ModifierPointer[1] = &pbi->Modifier[1][255]; pbi->ModifierPointer[2] = &pbi->Modifier[2][255]; pbi->ModifierPointer[3] = &pbi->Modifier[3][255];#endif pbi->DecoderErrorCode = NO_DECODER_ERROR; pbi->KeyFrameType = DCT_KEY_FRAME; pbi->FramesHaveBeenSkipped = FALSE; pbi->SkipYUVtoRGB = FALSE; pbi->OutputRGB = FALSE; pbi->CPUFree = 70; return pbi;}/**************************************************************************** * * ROUTINE : VPInitLibrary * * * INPUTS : init VP library * * OUTPUTS : * * RETURNS : * * * FUNCTION : Fully initializes the playback library * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/void VPInitLibrary(void){ CPUFrequency = GetProcessorFrequency();#if defined(POSTPROCESS) InitPostProcessing();#endif // Initialise the RGB <-> YUV accelerator tables. SetupRgbYuvAccelerators(); // for mmx idct fillidctconstants(); // Create huffman coding trees CreateHuffmanTrees();}/*********************************************************//**************************************************************************** * * ROUTINE : VPDeinitLibrary * * * INPUTS : init VP library * * OUTPUTS : * * RETURNS : * * * FUNCTION : Fully initializes the playback library * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/void VPDeInitLibrary(void){ DestroyHuffmanTrees();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -