/* ------------------------------------------------------------------ * Copyright (C) 1998-2009 PacketVideo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the License for the specific language governing permissions * and limitations under the License. * ------------------------------------------------------------------- */ #ifndef _MP4LIB_INT_H_ #define _MP4LIB_INT_H_ #include "mp4def.h" #include "mp4dec_api.h" // extra structure #undef ENABLE_LOG #define BITRATE_AVERAGE_WINDOW 4 #define FRAMERATE_SCALE ((BITRATE_AVERAGE_WINDOW-1)*10000L) #define FAST_IDCT /* , for fast Variable complexity IDCT */ //#define PV_DEC_EXTERNAL_IDCT /* for separate IDCT (i.e. no direct access to output frame) */ #define PV_ANNEX_IJKT_SUPPORT #define mid_gray 1024 typedef struct tagBitstream { /* function that reteive data from outside the library. 04/11/2000 */ /* In frame-based decoding mode, this shall be NULL. 08/29/2000 */ uint32 curr_word; uint32 next_word; uint8 *bitstreamBuffer; /* pointer to buffer memory */ int32 read_point; /* starting point in the buffer to be read to cache */ int incnt; /* bit left in cached */ int incnt_next; uint32 bitcnt; /* total bit read so-far (from inbfr)*/ int32 data_end_pos; /*should be added , 06/07/2000 */ int searched_frame_boundary; } BitstreamDecVideo, *LPBitstreamDecVideo; /* complexity estimation parameters */ typedef struct tagComplexity_Est { uint8 text_1; /* texture_complexity_estimation_set_1 */ uint8 text_2; /* texture_complexity_estimation_set_2 */ uint8 mc; /* motion_compensation_complexity */ } Complexity_Est; typedef struct tagVop { PIXEL *yChan; /* The Y component */ PIXEL *uChan; /* The U component */ PIXEL *vChan; /* The V component */ uint32 timeStamp; /* Vop TimeStamp in msec */ /* Actual syntax elements for VOP (standard) */ int predictionType; /* VOP prediction type */ uint timeInc; /* VOP time increment (relative to last mtb) */ int vopCoded; int roundingType; int intraDCVlcThr; int16 quantizer; /* VOP quantizer */ int fcodeForward; /* VOP dynamic range of motion vectors */ int fcodeBackward; /* VOP dynamic range of motion vectors */ int refSelectCode; /* enhancement layer reference select code */ /* H.263 parameters */ int gobNumber; int gobFrameID; int temporalRef; /* temporal reference, roll over at 256 */ int ETR; } Vop; typedef struct tagVol { int volID; /* VOL identifier (for tracking) */ uint timeIncrementResolution;/* VOL time increment */ int nbitsTimeIncRes; /* number of bits for time increment */ uint timeInc_offset; /* timeInc offset for multiple VOP in a packet */ uint32 moduloTimeBase; /* internal decoder clock */ int fixedVopRate; BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */ int complexity_estDisable; /* VOL disable complexity estimation */ int complexity_estMethod; /* VOL complexity estimation method */ Complexity_Est complexity; /* complexity estimation flags */ /* Error Resilience Flags */ int errorResDisable; /* VOL disable error resilence mode */ /* (Use Resynch markers) */ int useReverseVLC; /* VOL reversible VLCs */ int dataPartitioning; /* VOL data partitioning */ /* Bit depth */ uint bitsPerPixel; // int mid_gray; /* 2^(bits_per_pixel+2) */ /* Quantization related parameters */ int quantPrecision; /* Quantizer precision */ uint quantType; /* MPEG-4 or H.263 Quantization Type */ /* Added loaded quant mat, 05/22/2000 */ int loadIntraQuantMat; /* Load intra quantization matrix */ int loadNonIntraQuantMat; /* Load nonintra quantization matrix */ int iqmat[64]; /* Intra quant.matrix */ int niqmat[64]; /* Non-intra quant.matrix */ /* Parameters used for scalability */ int scalability; /* VOL scalability (flag) */ int scalType; /* temporal = 0, spatial = 1, both = 2 */ int refVolID; /* VOL id of reference VOL */ int refSampDir; /* VOL resol. of ref. VOL */ int horSamp_n; /* VOL hor. resampling of ref. VOL given by */ int horSamp_m; /* sampfac = hor_samp_n/hor_samp_m */ int verSamp_n; /* VOL ver. resampling of ref. VOL given by */ int verSamp_m; /* sampfac = ver_samp_n/ver_samp_m */ int enhancementType; /* VOL type of enhancement layer */ /* profile and level */ int32 profile_level_id; /* 8-bit profile and level */ // 6/17/04 } Vol; typedef int16 typeMBStore[6][NCOEFF_BLOCK]; typedef struct tagMacroBlock { typeMBStore block; /* blocks */ /* ACDC */ uint8 pred_block[384]; /* prediction block, Aug 3,2005 */ uint8 bitmapcol[6][8]; uint8 bitmaprow[6]; int no_coeff[6]; int DCScalarLum; /* Luminance DC Scalar */ int DCScalarChr; /* Chrominance DC Scalar */ #ifdef PV_ANNEX_IJKT_SUPPORT int direction; #endif } MacroBlock; typedef struct tagHeaderInfoDecVideo { uint8 *Mode; /* Modes INTRA/INTER/etc. */ uint8 *CBP; /* MCBPC/CBPY stuff */ } HeaderInfoDecVideo; /************************************************************/ /* VLC structures */ /************************************************************/ typedef struct tagTcoef { uint last; uint run; int level; uint sign; } Tcoef, *LPTcoef; typedef struct tagVLCtab { int32 val; int32 len; } VLCtab, *LPVLCtab; typedef struct tagVLCshorttab { int16 val; int16 len; } VLCshorttab, *LPVLCshorttab ; /* for space saving, Antoine Nguyen*/ typedef struct tagVLCtab2 { uint8 run; uint8 level; uint8 last; uint8 len; } VLCtab2, *LPVLCtab2; /* 10/24/2000 */ /* This type is designed for fast access of DC/AC */ /* prediction data. If the compiler is smart */ /* enough, it will use shifting for indexing. */ /* 04/14/2000. */ typedef int16 typeDCStore[6]; /* ACDC */ typedef int16 typeDCACStore[4][8]; /* Global structure that can be passed around */ typedef struct tagVideoDecData { BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */ /* Data For Layers (Scalability) */ Vol **vol; /* Data stored for each VOL */ /* Data used for reconstructing frames */ Vop *currVop; /* Current VOP (frame) */ Vop *prevVop; /* Previous VOP (frame) */ /* Data used to facilitate multiple layer decoding. 05/04/2000 */ Vop *prevEnhcVop; /* New change to rid of memcpy(). 04/24/2001 */ Vop **vopHeader; /* one for each layer. 08/29/2000 */ /* I/O structures */ MacroBlock *mblock; /* Macroblock data structure */ uint8 *acPredFlag; /* */ /* scratch memory used in data partitioned mode */ typeDCStore *predDC; /* The DC coeffs for each MB */ typeDCACStore *predDCAC_row; typeDCACStore *predDCAC_col; int usePrevQP; /* running QP decision switch */ uint8 *sliceNo; /* Slice indicator for each MB */ /* changed this to a 1D */ /* array for optimization */ MOT *motX; /* Motion vector in X direction */ MOT *motY; /* Motion vector in Y direction */ HeaderInfoDecVideo headerInfo; /* MB Header information */ int16 *QPMB; /* Quantizer value for each MB */ uint8 *pstprcTypCur; /* Postprocessing type for current frame */ uint8 *pstprcTypPrv; /* Postprocessing type for previous frame */ /* scratch memory used in all modes */ int mbnum; /* Macroblock number */ uint mbnum_row; int mbnum_col; /* I added these variables since they are used a lot. 04/13/2000 */ int nMBPerRow, nMBPerCol; /* number of MBs in each row & column */ int nTotalMB; /* for short video header */ int nMBinGOB; /* number of MBs in GOB, 05/22/00 */ int nGOBinVop; /* number of GOB in Vop 05/22/00 */ /* VOL Dimensions */ int width; /* Width */ int height; /* Height */ int displayWidth; /* Handle image whose size is not a multiple of 16. */ int displayHeight; /* This is the actual size. 08/09/2000 */ int32 size; /* Miscellaneous data points to be passed */ int frame_idx; /* Current frame ID */ int frameRate; /* Output frame Rate (over 10 seconds) */ int32 duration; uint32 currTimestamp; int currLayer; /* Current frame layer */ int shortVideoHeader; /* shortVideoHeader mode */ int intra_acdcPredDisable; /* VOL disable INTRA DC prediction */ int numberOfLayers; /* Number of Layers */ /* Frame to be used for concealment 07/07/2001 */ uint8 *concealFrame; int vop_coding_type; /* framerate and bitrate statistics counters. 08/23/2000 */ int32 nBitsPerVop[BITRATE_AVERAGE_WINDOW]; uint32 prevTimestamp[BITRATE_AVERAGE_WINDOW]; int nBitsForMBID; /* how many bits required for MB number? */ /* total data memory used by the docder library. 08/23/2000 */ int32 memoryUsage; /* flag to turn on/off error concealment or soft decoding */ int errorConcealment; /* Application controls */ VideoDecControls *videoDecControls; int postFilterType; /* Postfilter mode 04/25/00 */ PV_STATUS(*vlcDecCoeffIntra)(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra_luma*/); PV_STATUS(*vlcDecCoeffInter)(BitstreamDecVideo *stream, Tcoef *pTcoef); int initialized; /* Annex IJKT */ int deblocking; int slice_structure; int modified_quant; int advanced_INTRA; int16 QP_CHR; /* ANNEX_T */ } VideoDecData; /* for fast VLC+Dequant 10/12/2000*/ typedef int (*VlcDequantBlockFuncP)(void *video, int comp, int switched, uint8 *bitmaprow, uint8 *bitmapcol); ////////////////////////////////////////////////////////////// // Decoder structures // ////////////////////////////////////////////////////////////// #endif /* _MP4LIB_INT_H_ */