13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------ 23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo 33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License. 63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at 73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * http://www.apache.org/licenses/LICENSE-2.0 93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software 113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied. 143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions 153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License. 163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * ------------------------------------------------------------------- 173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */ 183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef _MP4LIB_INT_H_ 193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define _MP4LIB_INT_H_ 203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "mp4def.h" 223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "mp4dec_api.h" // extra structure 233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#undef ENABLE_LOG 253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define BITRATE_AVERAGE_WINDOW 4 263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FRAMERATE_SCALE ((BITRATE_AVERAGE_WINDOW-1)*10000L) 273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FAST_IDCT /* , for fast Variable complexity IDCT */ 283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong//#define PV_DEC_EXTERNAL_IDCT /* for separate IDCT (i.e. no direct access to output frame) */ 293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_ANNEX_IJKT_SUPPORT 303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define mid_gray 1024 313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagBitstream 333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* function that reteive data from outside the library. 04/11/2000 */ 353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* In frame-based decoding mode, this shall be NULL. 08/29/2000 */ 363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 curr_word; 373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 next_word; 383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *bitstreamBuffer; /* pointer to buffer memory */ 393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 read_point; /* starting point in the buffer to be read to cache */ 403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int incnt; /* bit left in cached */ 413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int incnt_next; 423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 bitcnt; /* total bit read so-far (from inbfr)*/ 433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 data_end_pos; /*should be added , 06/07/2000 */ 443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int searched_frame_boundary; 453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} BitstreamDecVideo, *LPBitstreamDecVideo; 463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* complexity estimation parameters */ 483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagComplexity_Est 493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 text_1; /* texture_complexity_estimation_set_1 */ 513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 text_2; /* texture_complexity_estimation_set_2 */ 523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 mc; /* motion_compensation_complexity */ 533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} Complexity_Est; 543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVop 573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PIXEL *yChan; /* The Y component */ 593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PIXEL *uChan; /* The U component */ 603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PIXEL *vChan; /* The V component */ 613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 timeStamp; /* Vop TimeStamp in msec */ 633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Actual syntax elements for VOP (standard) */ 653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int predictionType; /* VOP prediction type */ 663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint timeInc; /* VOP time increment (relative to last mtb) */ 673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int vopCoded; 683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int roundingType; 693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int intraDCVlcThr; 703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 quantizer; /* VOP quantizer */ 713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int fcodeForward; /* VOP dynamic range of motion vectors */ 723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int fcodeBackward; /* VOP dynamic range of motion vectors */ 733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int refSelectCode; /* enhancement layer reference select code */ 743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* H.263 parameters */ 763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int gobNumber; 773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int gobFrameID; 783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int temporalRef; /* temporal reference, roll over at 256 */ 793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int ETR; 803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} Vop; 813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVol 833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int volID; /* VOL identifier (for tracking) */ 853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint timeIncrementResolution;/* VOL time increment */ 863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nbitsTimeIncRes; /* number of bits for time increment */ 873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint timeInc_offset; /* timeInc offset for multiple VOP in a packet */ 883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 moduloTimeBase; /* internal decoder clock */ 893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int fixedVopRate; 903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */ 913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int complexity_estDisable; /* VOL disable complexity estimation */ 933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int complexity_estMethod; /* VOL complexity estimation method */ 943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Complexity_Est complexity; /* complexity estimation flags */ 953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Error Resilience Flags */ 973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int errorResDisable; /* VOL disable error resilence mode */ 983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* (Use Resynch markers) */ 993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int useReverseVLC; /* VOL reversible VLCs */ 1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int dataPartitioning; /* VOL data partitioning */ 1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Bit depth */ 1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint bitsPerPixel; 1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong// int mid_gray; /* 2^(bits_per_pixel+2) */ 1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Quantization related parameters */ 1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int quantPrecision; /* Quantizer precision */ 1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint quantType; /* MPEG-4 or H.263 Quantization Type */ 1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Added loaded quant mat, 05/22/2000 */ 1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int loadIntraQuantMat; /* Load intra quantization matrix */ 1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int loadNonIntraQuantMat; /* Load nonintra quantization matrix */ 1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int iqmat[64]; /* Intra quant.matrix */ 1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int niqmat[64]; /* Non-intra quant.matrix */ 1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Parameters used for scalability */ 1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int scalability; /* VOL scalability (flag) */ 1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int scalType; /* temporal = 0, spatial = 1, both = 2 */ 1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int refVolID; /* VOL id of reference VOL */ 1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int refSampDir; /* VOL resol. of ref. VOL */ 1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int horSamp_n; /* VOL hor. resampling of ref. VOL given by */ 1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int horSamp_m; /* sampfac = hor_samp_n/hor_samp_m */ 1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int verSamp_n; /* VOL ver. resampling of ref. VOL given by */ 1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int verSamp_m; /* sampfac = ver_samp_n/ver_samp_m */ 1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int enhancementType; /* VOL type of enhancement layer */ 1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* profile and level */ 1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 profile_level_id; /* 8-bit profile and level */ // 6/17/04 1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} Vol; 1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int16 typeMBStore[6][NCOEFF_BLOCK]; 1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagMacroBlock 1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong typeMBStore block; /* blocks */ /* ACDC */ 1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 pred_block[384]; /* prediction block, Aug 3,2005 */ 1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 bitmapcol[6][8]; 1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 bitmaprow[6]; 1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int no_coeff[6]; 1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int DCScalarLum; /* Luminance DC Scalar */ 1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int DCScalarChr; /* Chrominance DC Scalar */ 1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_ANNEX_IJKT_SUPPORT 1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int direction; 1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} MacroBlock; 1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagHeaderInfoDecVideo 1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *Mode; /* Modes INTRA/INTER/etc. */ 1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *CBP; /* MCBPC/CBPY stuff */ 1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} HeaderInfoDecVideo; 1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/************************************************************/ 1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* VLC structures */ 1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/************************************************************/ 1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagTcoef 1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint last; 1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint run; 1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int level; 1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint sign; 1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} Tcoef, *LPTcoef; 1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVLCtab 1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 val; 1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 len; 1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VLCtab, *LPVLCtab; 1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVLCshorttab 1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 val; 1773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 len; 1783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VLCshorttab, *LPVLCshorttab ; /* for space saving, Antoine Nguyen*/ 1793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVLCtab2 1813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 1823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 run; 1833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 level; 1843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 last; 1853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 len; 1863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VLCtab2, *LPVLCtab2; /* 10/24/2000 */ 1873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* This type is designed for fast access of DC/AC */ 1893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* prediction data. If the compiler is smart */ 1903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* enough, it will use shifting for indexing. */ 1913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* 04/14/2000. */ 1923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int16 typeDCStore[6]; /* ACDC */ 1943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int16 typeDCACStore[4][8]; 1953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* Global structure that can be passed around */ 1993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef struct tagVideoDecData 2003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 2013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong BitstreamDecVideo *bitstream; /* library bitstream buffer (input buffer) */ 2023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Data For Layers (Scalability) */ 2033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Vol **vol; /* Data stored for each VOL */ 2043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Data used for reconstructing frames */ 2063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Vop *currVop; /* Current VOP (frame) */ 2073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Vop *prevVop; /* Previous VOP (frame) */ 2083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Data used to facilitate multiple layer decoding. 05/04/2000 */ 2093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Vop *prevEnhcVop; /* New change to rid of memcpy(). 04/24/2001 */ 2103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Vop **vopHeader; /* one for each layer. 08/29/2000 */ 2113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* I/O structures */ 2133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong MacroBlock *mblock; /* Macroblock data structure */ 2143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *acPredFlag; /* */ 2153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* scratch memory used in data partitioned mode */ 2173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong typeDCStore *predDC; /* The DC coeffs for each MB */ 2183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong typeDCACStore *predDCAC_row; 2193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong typeDCACStore *predDCAC_col; 2203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int usePrevQP; /* running QP decision switch */ 2223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *sliceNo; /* Slice indicator for each MB */ 2233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* changed this to a 1D */ 2243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* array for optimization */ 2253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong MOT *motX; /* Motion vector in X direction */ 2263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong MOT *motY; /* Motion vector in Y direction */ 2273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong HeaderInfoDecVideo headerInfo; /* MB Header information */ 2283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 *QPMB; /* Quantizer value for each MB */ 2293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *pstprcTypCur; /* Postprocessing type for current frame */ 2313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *pstprcTypPrv; /* Postprocessing type for previous frame */ 2323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* scratch memory used in all modes */ 2333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int mbnum; /* Macroblock number */ 2343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint mbnum_row; 2353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int mbnum_col; 2363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* I added these variables since they are used a lot. 04/13/2000 */ 2373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nMBPerRow, nMBPerCol; /* number of MBs in each row & column */ 2383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nTotalMB; 2393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* for short video header */ 2403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nMBinGOB; /* number of MBs in GOB, 05/22/00 */ 2413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nGOBinVop; /* number of GOB in Vop 05/22/00 */ 2423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* VOL Dimensions */ 2433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int width; /* Width */ 2443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int height; /* Height */ 2453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int displayWidth; /* Handle image whose size is not a multiple of 16. */ 2463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int displayHeight; /* This is the actual size. 08/09/2000 */ 2473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 size; 2483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Miscellaneous data points to be passed */ 2493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int frame_idx; /* Current frame ID */ 2503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int frameRate; /* Output frame Rate (over 10 seconds) */ 2513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 duration; 2523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 currTimestamp; 2533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int currLayer; /* Current frame layer */ 2543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int shortVideoHeader; /* shortVideoHeader mode */ 2553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int intra_acdcPredDisable; /* VOL disable INTRA DC prediction */ 2563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int numberOfLayers; /* Number of Layers */ 2573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Frame to be used for concealment 07/07/2001 */ 2583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *concealFrame; 2593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int vop_coding_type; 2603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* framerate and bitrate statistics counters. 08/23/2000 */ 2613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 nBitsPerVop[BITRATE_AVERAGE_WINDOW]; 2623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint32 prevTimestamp[BITRATE_AVERAGE_WINDOW]; 2633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int nBitsForMBID; /* how many bits required for MB number? */ 2643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* total data memory used by the docder library. 08/23/2000 */ 2653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int32 memoryUsage; 2663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* flag to turn on/off error concealment or soft decoding */ 2683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int errorConcealment; 2693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Application controls */ 2713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong VideoDecControls *videoDecControls; 2723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int postFilterType; /* Postfilter mode 04/25/00 */ 2733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_STATUS(*vlcDecCoeffIntra)(BitstreamDecVideo *stream, Tcoef *pTcoef/*, int intra_luma*/); 2773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_STATUS(*vlcDecCoeffInter)(BitstreamDecVideo *stream, Tcoef *pTcoef); 2783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int initialized; 2793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong /* Annex IJKT */ 2813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int deblocking; 2823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int slice_structure; 2833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int modified_quant; 2843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int advanced_INTRA; 2853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong int16 QP_CHR; /* ANNEX_T */ 2863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} VideoDecData; 2873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* for fast VLC+Dequant 10/12/2000*/ 2893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int (*VlcDequantBlockFuncP)(void *video, int comp, int switched, 2903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong uint8 *bitmaprow, uint8 *bitmapcol); 2913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 2923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong////////////////////////////////////////////////////////////// 2933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong// Decoder structures // 2943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong////////////////////////////////////////////////////////////// 2953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif /* _MP4LIB_INT_H_ */ 2963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 297