1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 #ifndef _PVDECDEF_H_
19 #define _PVDECDEF_H_
20 
21 #include "mp4dec_api.h"
22 
23 typedef enum
24 {
25     PV_SUCCESS,
26     PV_FAIL,
27     PV_MB_STUFFING,         /* hit Macroblock_Stuffing */
28     PV_END_OF_VOP,          /* hit End_of_Video_Object_Plane */
29     PV_END_OF_MB            /* hit End_of_Macroblock */
30 #ifdef PV_TOLERATE_VOL_ERRORS
31     , PV_BAD_VOLHEADER
32 #endif
33 } PV_STATUS;
34 
35 typedef uint8 PIXEL;
36 typedef int16 MOT;   /*  : "int" type runs faster on RISC machine */
37 
38 #define TRUE    1
39 #define FALSE   0
40 
41 #define PV_ABS(x)       (((x)<0)? -(x) : (x))
42 #define PV_SIGN(x)      (((x)<0)? -1 : 1)
43 #define PV_SIGN0(a)     (((a)<0)? -1 : (((a)>0) ? 1 : 0))
44 #define PV_MAX(a,b)     ((a)>(b)? (a):(b))
45 #define PV_MIN(a,b)     ((a)<(b)? (a):(b))
46 #define PV_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A))
47 /* You don't want to use ((x>UB)?UB:(x<LB)?LB:x) for the clipping */
48 /*    because it will use one extra comparison if the compiler is */
49 /*    not well-optimized.    04/19/2000.                        */
50 #define CLIP_THE_RANGE(x,LB,UB) if ((x)<(LB)) (x) = (LB); else if ((x)>(UB)) (x) = (UB)
51 
52 #define MODE_INTRA      0x08 //01000
53 #define MODE_INTRA_Q    0x09 //01001
54 #define MODE_SKIPPED    0x10 //10000
55 #define MODE_INTER4V    0x14 //10100
56 #define MODE_INTER      0x16 //10110
57 #define MODE_INTER_Q    0x17 //10111
58 #define MODE_INTER4V_Q  0x15 //10101
59 #define INTER_1VMASK    0x2
60 #define Q_MASK          0x1
61 #define INTRA_MASK      0x8
62 #define INTER_MASK      0x4
63 
64 
65 #define I_VOP       0
66 #define P_VOP       1
67 #define B_VOP       2
68 
69 #define LUMINANCE_DC_TYPE   1
70 #define CHROMINANCE_DC_TYPE 2
71 
72 #define START_CODE_LENGTH       32
73 
74 /* 11/30/98 */
75 #define NoMarkerFound (-1)
76 #define FoundRM     1   /* Resync Marker */
77 #define FoundVSC    2   /* VOP_START_CODE. */
78 #define FoundGSC    3   /* GROUP_START_CODE */
79 #define FoundEOB    4   /* EOB_CODE */
80 
81 /* PacketVideo "absolution timestamp" object.   06/13/2000 */
82 #define PVTS_START_CODE         0x01C4
83 #define PVTS_START_CODE_LENGTH  32
84 
85 /* session layer and vop layer start codes */
86 
87 #define VISUAL_OBJECT_SEQUENCE_START_CODE   0x01B0
88 #define VISUAL_OBJECT_SEQUENCE_END_CODE     0x01B1
89 
90 #define VISUAL_OBJECT_START_CODE   0x01B5
91 #define VO_START_CODE           0x8
92 #define VO_HEADER_LENGTH        32      /* lengtho of VO header: VO_START_CODE +  VO_ID */
93 
94 #define SOL_START_CODE          0x01BE
95 #define SOL_START_CODE_LENGTH   32
96 
97 #define VOL_START_CODE 0x12
98 #define VOL_START_CODE_LENGTH 28
99 
100 #define VOP_START_CODE 0x1B6
101 #define VOP_START_CODE_LENGTH   32
102 
103 #define GROUP_START_CODE    0x01B3
104 #define GROUP_START_CODE_LENGTH  32
105 
106 #define VOP_ID_CODE_LENGTH      5
107 #define VOP_TEMP_REF_CODE_LENGTH    16
108 
109 #define USER_DATA_START_CODE        0x01B2
110 #define USER_DATA_START_CODE_LENGTH 32
111 
112 #define START_CODE_PREFIX       0x01
113 #define START_CODE_PREFIX_LENGTH    24
114 
115 #define SHORT_VIDEO_START_MARKER         0x20
116 #define SHORT_VIDEO_START_MARKER_LENGTH  22
117 #define SHORT_VIDEO_END_MARKER            0x3F
118 #define GOB_RESYNC_MARKER         0x01
119 #define GOB_RESYNC_MARKER_LENGTH  17
120 
121 /* motion and resync markers used in error resilient mode  */
122 
123 #define DC_MARKER                      438273
124 #define DC_MARKER_LENGTH                19
125 
126 #define MOTION_MARKER_COMB             126977
127 #define MOTION_MARKER_COMB_LENGTH       17
128 
129 #define MOTION_MARKER_SEP              81921
130 #define MOTION_MARKER_SEP_LENGTH        17
131 
132 #define RESYNC_MARKER           1
133 #define RESYNC_MARKER_LENGTH    17
134 
135 #define SPRITE_NOT_USED     0
136 #define STATIC_SPRITE       1
137 #define ONLINE_SPRITE       2
138 #define GMC_SPRITE      3
139 
140 /* macroblock and block size */
141 #define MB_SIZE 16
142 #define NCOEFF_MB (MB_SIZE*MB_SIZE)
143 #define B_SIZE 8
144 #define NCOEFF_BLOCK (B_SIZE*B_SIZE)
145 #define NCOEFF_Y NCOEFF_MB
146 #define NCOEFF_U NCOEFF_BLOCK
147 #define NCOEFF_V NCOEFF_BLOCK
148 #define BLK_PER_MB      4   /* Number of blocks per MB */
149 
150 /* VLC decoding related definitions */
151 #define VLC_ERROR   (-1)
152 #define VLC_ESCAPE  7167
153 
154 
155 /* macro utility */
156 #define  ZERO_OUT_64BYTES(x)    { *((uint32*)(x)) = *(((uint32*)(x))+1) =  \
157         *(((uint32*)(x))+2) = *(((uint32*)(x))+3) =  \
158         *(((uint32*)(x))+4) = *(((uint32*)(x))+5) =  \
159         *(((uint32*)(x))+6) = *(((uint32*)(x))+7) =  \
160         *(((uint32*)(x))+8) = *(((uint32*)(x))+9) =  \
161         *(((uint32*)(x))+10) = *(((uint32*)(x))+11) =  \
162         *(((uint32*)(x))+12) = *(((uint32*)(x))+13) =  \
163         *(((uint32*)(x))+14) = *(((uint32*)(x))+15) =  0; }
164 
165 
166 
167 #endif /* _PVDECDEF_H_ */
168