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 _PVDECDEF_H_
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define _PVDECDEF_H_
203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "mp4dec_api.h"
223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef enum
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    PV_SUCCESS,
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    PV_FAIL,
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    PV_MB_STUFFING,         /* hit Macroblock_Stuffing */
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    PV_END_OF_VOP,          /* hit End_of_Video_Object_Plane */
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    PV_END_OF_MB            /* hit End_of_Macroblock */
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_TOLERATE_VOL_ERRORS
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    , PV_BAD_VOLHEADER
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} PV_STATUS;
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef uint8 PIXEL;
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int16 MOT;   /*  : "int" type runs faster on RISC machine */
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define TRUE    1
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FALSE   0
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_ABS(x)       (((x)<0)? -(x) : (x))
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_SIGN(x)      (((x)<0)? -1 : 1)
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_SIGN0(a)     (((a)<0)? -1 : (((a)>0) ? 1 : 0))
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MAX(a,b)     ((a)>(b)? (a):(b))
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MIN(a,b)     ((a)<(b)? (a):(b))
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A))
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* You don't want to use ((x>UB)?UB:(x<LB)?LB:x) for the clipping */
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*    because it will use one extra comparison if the compiler is */
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*    not well-optimized.    04/19/2000.                        */
50183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define CLIP_THE_RANGE(x,LB,UB) if ((x)<(LB)) (x) = (LB); else if ((x)>(UB)) (x) = (UB)
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTRA      0x08 //01000
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTRA_Q    0x09 //01001
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_SKIPPED    0x10 //10000
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER4V    0x14 //10100
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER      0x16 //10110
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER_Q    0x17 //10111
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER4V_Q  0x15 //10101
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTER_1VMASK    0x2
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define Q_MASK          0x1
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTRA_MASK      0x8
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTER_MASK      0x4
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define I_VOP       0
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define P_VOP       1
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define B_VOP       2
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define LUMINANCE_DC_TYPE   1
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CHROMINANCE_DC_TYPE 2
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_LENGTH       32
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* 11/30/98 */
75183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define NoMarkerFound (-1)
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundRM     1   /* Resync Marker */
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundVSC    2   /* VOP_START_CODE. */
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundGSC    3   /* GROUP_START_CODE */
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundEOB    4   /* EOB_CODE */
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* PacketVideo "absolution timestamp" object.   06/13/2000 */
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PVTS_START_CODE         0x01C4
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PVTS_START_CODE_LENGTH  32
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* session layer and vop layer start codes */
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_SEQUENCE_START_CODE   0x01B0
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_SEQUENCE_END_CODE     0x01B1
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_START_CODE   0x01B5
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VO_START_CODE           0x8
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VO_HEADER_LENGTH        32      /* lengtho of VO header: VO_START_CODE +  VO_ID */
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SOL_START_CODE          0x01BE
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SOL_START_CODE_LENGTH   32
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOL_START_CODE 0x12
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOL_START_CODE_LENGTH 28
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_START_CODE 0x1B6
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_START_CODE_LENGTH   32
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GROUP_START_CODE    0x01B3
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GROUP_START_CODE_LENGTH  32
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_ID_CODE_LENGTH      5
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_TEMP_REF_CODE_LENGTH    16
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define USER_DATA_START_CODE        0x01B2
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define USER_DATA_START_CODE_LENGTH 32
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_PREFIX       0x01
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_PREFIX_LENGTH    24
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_START_MARKER         0x20
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_START_MARKER_LENGTH  22
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_END_MARKER            0x3F
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GOB_RESYNC_MARKER         0x01
1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GOB_RESYNC_MARKER_LENGTH  17
1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* motion and resync markers used in error resilient mode  */
1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define DC_MARKER                      438273
1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define DC_MARKER_LENGTH                19
1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_COMB             126977
1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_COMB_LENGTH       17
1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_SEP              81921
1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_SEP_LENGTH        17
1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define RESYNC_MARKER           1
1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define RESYNC_MARKER_LENGTH    17
1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SPRITE_NOT_USED     0
1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define STATIC_SPRITE       1
1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ONLINE_SPRITE       2
1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GMC_SPRITE      3
1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* macroblock and block size */
1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MB_SIZE 16
1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_MB (MB_SIZE*MB_SIZE)
1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define B_SIZE 8
1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_BLOCK (B_SIZE*B_SIZE)
1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_Y NCOEFF_MB
1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_U NCOEFF_BLOCK
1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_V NCOEFF_BLOCK
1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define BLK_PER_MB      4   /* Number of blocks per MB */
1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* VLC decoding related definitions */
1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VLC_ERROR   (-1)
1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VLC_ESCAPE  7167
1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* macro utility */
156183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define  ZERO_OUT_64BYTES(x)    { *((uint32*)(x)) = *(((uint32*)(x))+1) =  \
1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+2) = *(((uint32*)(x))+3) =  \
1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+4) = *(((uint32*)(x))+5) =  \
1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+6) = *(((uint32*)(x))+7) =  \
1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+8) = *(((uint32*)(x))+9) =  \
1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+10) = *(((uint32*)(x))+11) =  \
1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+12) = *(((uint32*)(x))+13) =  \
1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        *(((uint32*)(x))+14) = *(((uint32*)(x))+15) =  0; }
1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif /* _PVDECDEF_H_ */
168