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