mp4def.h revision 2426d11f795a99de85999b3ff0a26cc070a99a59
1113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* ------------------------------------------------------------------
2113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Copyright (C) 1998-2009 PacketVideo
3113e0824d6bddf4376240681f9cf6a2deded9498John Reck *
4113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Licensed under the Apache License, Version 2.0 (the "License");
5113e0824d6bddf4376240681f9cf6a2deded9498John Reck * you may not use this file except in compliance with the License.
6113e0824d6bddf4376240681f9cf6a2deded9498John Reck * You may obtain a copy of the License at
7113e0824d6bddf4376240681f9cf6a2deded9498John Reck *
8113e0824d6bddf4376240681f9cf6a2deded9498John Reck *      http://www.apache.org/licenses/LICENSE-2.0
9113e0824d6bddf4376240681f9cf6a2deded9498John Reck *
10113e0824d6bddf4376240681f9cf6a2deded9498John Reck * Unless required by applicable law or agreed to in writing, software
11113e0824d6bddf4376240681f9cf6a2deded9498John Reck * distributed under the License is distributed on an "AS IS" BASIS,
12113e0824d6bddf4376240681f9cf6a2deded9498John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13113e0824d6bddf4376240681f9cf6a2deded9498John Reck * express or implied.
14113e0824d6bddf4376240681f9cf6a2deded9498John Reck * See the License for the specific language governing permissions
15113e0824d6bddf4376240681f9cf6a2deded9498John Reck * and limitations under the License.
16113e0824d6bddf4376240681f9cf6a2deded9498John Reck * -------------------------------------------------------------------
17113e0824d6bddf4376240681f9cf6a2deded9498John Reck */
18a447d29c65fb811cd184775a3476101a1cede929John Reck#ifndef _PVDECDEF_H_
19113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define _PVDECDEF_H_
20113e0824d6bddf4376240681f9cf6a2deded9498John Reck
21113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <stdint.h> // for uint8_t, etc
22e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include <stdlib.h>
23e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include <string.h>
24113e0824d6bddf4376240681f9cf6a2deded9498John Reck
25113e0824d6bddf4376240681f9cf6a2deded9498John Reck// Redefine the int types
26113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef uint8_t uint8;
27113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef uint16_t uint16;
28113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef int16_t int16;
29e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Recktypedef uint32_t uint32;
30113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef int32_t int32;
31113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef unsigned int uint;
32113e0824d6bddf4376240681f9cf6a2deded9498John Reck
3325fbb3fa1138675379102a44405852555cefccbdJohn Reck/********** platform dependent in-line assembly *****************************/
3425fbb3fa1138675379102a44405852555cefccbdJohn Reck
35e0bb87d4bdbd3b08ab6a8569c8e564ed59b8a5a7Chris Craik/*************** Intel *****************/
36113e0824d6bddf4376240681f9cf6a2deded9498John Reck
37113e0824d6bddf4376240681f9cf6a2deded9498John Reck/*************** ARM *****************/
38113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* for general ARM instruction. #define __ARM has to be defined in compiler set up.*/
39113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* for DSP MUL */
40113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifdef __TARGET_FEATURE_DSPMUL
41113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define _ARM_DSP_MUL
42113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif
43113e0824d6bddf4376240681f9cf6a2deded9498John Reck
44113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* for Count Leading Zero instruction */
45113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifdef __TARGET_ARCH_5T
46113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define _ARM_CLZ
47113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif
48113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifdef __TARGET_ARCH_5TE
49113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define _ARM_CLZ
50113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif
51113e0824d6bddf4376240681f9cf6a2deded9498John Reck/****************************************************************************/
52113e0824d6bddf4376240681f9cf6a2deded9498John Reck
53113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifndef _PV_TYPES_
54113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define _PV_TYPES_
55113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef unsigned char UChar;
56113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef char Char;
57113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef unsigned int UInt;
58113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef int Int;
598de65a8e05285df52a1e6f0c1d5616dd233298a7John Recktypedef unsigned short UShort;
60ff941dcd815021bb20d6504eb486acb1e50592c3John Recktypedef short Short;
618de65a8e05285df52a1e6f0c1d5616dd233298a7John Recktypedef short int SInt;
628de65a8e05285df52a1e6f0c1d5616dd233298a7John Recktypedef unsigned int Bool;
63e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Recktypedef uint32_t ULong;
6425fbb3fa1138675379102a44405852555cefccbdJohn Recktypedef void Void;
6525fbb3fa1138675379102a44405852555cefccbdJohn Reck
66113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define PV_CODEC_INIT       0
67113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define PV_CODEC_STOP       1
68113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define PV_CODEC_RUNNING    2
69113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define PV_CODEC_RESET      3
708de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck#endif
7125fbb3fa1138675379102a44405852555cefccbdJohn Reck
72113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef enum
73113e0824d6bddf4376240681f9cf6a2deded9498John Reck{
748de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_SUCCESS,
758de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_FAIL,
768de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_EOS,             /* hit End_Of_Sequence     */
778de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_MB_STUFFING,     /* hit Macroblock_Stuffing */
788de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_END_OF_VOP,      /* hit End_of_Video_Object_Plane */
798de65a8e05285df52a1e6f0c1d5616dd233298a7John Reck    PV_END_OF_MB,       /* hit End_of_Macroblock */
80113e0824d6bddf4376240681f9cf6a2deded9498John Reck    PV_END_OF_BUF       /* hit End_of_Bitstream_Buffer */
81113e0824d6bddf4376240681f9cf6a2deded9498John Reck} PV_STATUS;
82113e0824d6bddf4376240681f9cf6a2deded9498John Reck
83113e0824d6bddf4376240681f9cf6a2deded9498John Recktypedef UChar PIXEL;
84113e0824d6bddf4376240681f9cf6a2deded9498John Reck//typedef Int MOT;   /* : "int" type runs faster on RISC machine */
85113e0824d6bddf4376240681f9cf6a2deded9498John Reck
86113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define HTFM            /*  3/2/01, Hypothesis Test Fast Matching for early drop-out*/
87113e0824d6bddf4376240681f9cf6a2deded9498John Reck//#define _MOVE_INTERFACE
88113e0824d6bddf4376240681f9cf6a2deded9498John Reck
893f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik//#define RANDOM_REFSELCODE
90113e0824d6bddf4376240681f9cf6a2deded9498John Reck
91113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* handle the case of devision by zero in RC */
92113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define MAD_MIN 1
93d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck
94113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* 4/11/01, if SSE or MMX, no HTFM, no SAD_HP_FLY */
95113e0824d6bddf4376240681f9cf6a2deded9498John Reck
96113e0824d6bddf4376240681f9cf6a2deded9498John Reck/* Code size reduction related Macros */
97113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifdef H263_ONLY
98113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifndef NO_RVLC
993f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik#define NO_RVLC
100113e0824d6bddf4376240681f9cf6a2deded9498John Reck#endif
101113e0824d6bddf4376240681f9cf6a2deded9498John Reck#ifndef NO_MPEG_QUANT
102fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define NO_MPEG_QUANT
103fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#endif
104fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#ifndef NO_INTER4V
105fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define NO_INTER4V
106fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#endif
107fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#endif
108fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck/**************************************/
109fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck
110fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define TRUE    1
111fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck#define FALSE   0
112fe5e7b7346a54537b980796ceeca66bfdbd05561John Reck
113f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define PV_ABS(x)       (((x)<0)? -(x) : (x))
114f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define PV_SIGN(x)      (((x)<0)? -1 : 1)
115f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define PV_SIGN0(a)     (((a)<0)? -1 : (((a)>0) ? 1 : 0))
116f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define PV_MAX(a,b)     ((a)>(b)? (a):(b))
117f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define PV_MIN(a,b)     ((a)<(b)? (a):(b))
118f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck
119e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck#define MODE_INTRA      0
120a447d29c65fb811cd184775a3476101a1cede929John Reck#define MODE_INTER      1
121a447d29c65fb811cd184775a3476101a1cede929John Reck#define MODE_INTRA_Q    2
122a447d29c65fb811cd184775a3476101a1cede929John Reck#define MODE_INTER_Q    3
123a447d29c65fb811cd184775a3476101a1cede929John Reck#define MODE_INTER4V    4
124a447d29c65fb811cd184775a3476101a1cede929John Reck#define MODE_SKIPPED    6
125a447d29c65fb811cd184775a3476101a1cede929John Reck
126a447d29c65fb811cd184775a3476101a1cede929John Reck#define I_VOP       0
127a447d29c65fb811cd184775a3476101a1cede929John Reck#define P_VOP       1
128e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck#define B_VOP       2
129e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck
130e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck/*09/04/00 Add MB height and width */
13125fbb3fa1138675379102a44405852555cefccbdJohn Reck#define MB_WIDTH 16
13225fbb3fa1138675379102a44405852555cefccbdJohn Reck#define MB_HEIGHT 16
13325fbb3fa1138675379102a44405852555cefccbdJohn Reck
13425fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOP_BRIGHT_WHITEENC 255
13525fbb3fa1138675379102a44405852555cefccbdJohn Reck
13625fbb3fa1138675379102a44405852555cefccbdJohn Reck
13725fbb3fa1138675379102a44405852555cefccbdJohn Reck#define LUMINANCE_DC_TYPE   1
13825fbb3fa1138675379102a44405852555cefccbdJohn Reck#define CHROMINANCE_DC_TYPE 2
13925fbb3fa1138675379102a44405852555cefccbdJohn Reck
14025fbb3fa1138675379102a44405852555cefccbdJohn Reck#define EOB_CODE                        1
14125fbb3fa1138675379102a44405852555cefccbdJohn Reck#define EOB_CODE_LENGTH                32
14225fbb3fa1138675379102a44405852555cefccbdJohn Reck
14325fbb3fa1138675379102a44405852555cefccbdJohn Reck/* 11/30/98 */
14425fbb3fa1138675379102a44405852555cefccbdJohn Reck#define FoundRM     1   /* Resync Marker */
14525fbb3fa1138675379102a44405852555cefccbdJohn Reck#define FoundVSC    2   /* VOP_START_CODE. */
14625fbb3fa1138675379102a44405852555cefccbdJohn Reck#define FoundGSC    3   /* GROUP_START_CODE */
14725fbb3fa1138675379102a44405852555cefccbdJohn Reck#define FoundEOB    4   /* EOB_CODE */
14825fbb3fa1138675379102a44405852555cefccbdJohn Reck
14925fbb3fa1138675379102a44405852555cefccbdJohn Reck
15025fbb3fa1138675379102a44405852555cefccbdJohn Reck/* 05/08/2000, the error code returned from BitstreamShowBits() */
15125fbb3fa1138675379102a44405852555cefccbdJohn Reck#define BITSTREAM_ERROR_CODE 0xFFFFFFFF
15225fbb3fa1138675379102a44405852555cefccbdJohn Reck
15325fbb3fa1138675379102a44405852555cefccbdJohn Reck/* PacketVideo "absolution timestamp" object.  06/13/2000 */
15425fbb3fa1138675379102a44405852555cefccbdJohn Reck#define PVTS_START_CODE         0x01C4
15525fbb3fa1138675379102a44405852555cefccbdJohn Reck#define PVTS_START_CODE_LENGTH  32
15625fbb3fa1138675379102a44405852555cefccbdJohn Reck
15725fbb3fa1138675379102a44405852555cefccbdJohn Reck/* session layer and vop layer start codes */
15825fbb3fa1138675379102a44405852555cefccbdJohn Reck
15925fbb3fa1138675379102a44405852555cefccbdJohn Reck#define SESSION_START_CODE  0x01B0
16025fbb3fa1138675379102a44405852555cefccbdJohn Reck#define SESSION_END_CODE    0x01B1
16125fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VISUAL_OBJECT_START_CODE 0x01B5
16225fbb3fa1138675379102a44405852555cefccbdJohn Reck
16325fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VO_START_CODE           0x8
16425fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VO_HEADER_LENGTH        32      /* lengtho of VO header: VO_START_CODE +  VO_ID */
16525fbb3fa1138675379102a44405852555cefccbdJohn Reck
16625fbb3fa1138675379102a44405852555cefccbdJohn Reck#define SOL_START_CODE          0x01BE
16725fbb3fa1138675379102a44405852555cefccbdJohn Reck#define SOL_START_CODE_LENGTH   32
16825fbb3fa1138675379102a44405852555cefccbdJohn Reck
16925fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOL_START_CODE 0x12
17025fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOL_START_CODE_LENGTH 28
17125fbb3fa1138675379102a44405852555cefccbdJohn Reck
17225fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOP_START_CODE 0x1B6
17325fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOP_START_CODE_LENGTH   32
17425fbb3fa1138675379102a44405852555cefccbdJohn Reck
17525fbb3fa1138675379102a44405852555cefccbdJohn Reck#define GROUP_START_CODE    0x01B3
17625fbb3fa1138675379102a44405852555cefccbdJohn Reck#define GROUP_START_CODE_LENGTH  32
17725fbb3fa1138675379102a44405852555cefccbdJohn Reck
17825fbb3fa1138675379102a44405852555cefccbdJohn Reck#define VOP_ID_CODE_LENGTH      5
179f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define VOP_TEMP_REF_CODE_LENGTH    16
180a447d29c65fb811cd184775a3476101a1cede929John Reck
181e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck#define USER_DATA_START_CODE        0x01B2
18225fbb3fa1138675379102a44405852555cefccbdJohn Reck#define USER_DATA_START_CODE_LENGTH 32
183e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck
184e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck#define START_CODE_PREFIX       0x01
18525fbb3fa1138675379102a44405852555cefccbdJohn Reck#define START_CODE_PREFIX_LENGTH    24
186e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck
187e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define SHORT_VIDEO_START_MARKER         0x20
188e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define SHORT_VIDEO_START_MARKER_LENGTH  22
18925fbb3fa1138675379102a44405852555cefccbdJohn Reck#define SHORT_VIDEO_END_MARKER            0x3F
19025fbb3fa1138675379102a44405852555cefccbdJohn Reck#define GOB_RESYNC_MARKER         0x01
19125fbb3fa1138675379102a44405852555cefccbdJohn Reck#define GOB_RESYNC_MARKER_LENGTH  17
19225fbb3fa1138675379102a44405852555cefccbdJohn Reck
19325fbb3fa1138675379102a44405852555cefccbdJohn Reck/* motion and resync markers used in error resilient mode  */
194f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck
19525fbb3fa1138675379102a44405852555cefccbdJohn Reck#define DC_MARKER                      438273
19625fbb3fa1138675379102a44405852555cefccbdJohn Reck#define DC_MARKER_LENGTH                19
197a447d29c65fb811cd184775a3476101a1cede929John Reck
198f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define MOTION_MARKER_COMB             126977
199f4198b713e43c0c0f9adac74203cf24c2a49b802John Reck#define MOTION_MARKER_COMB_LENGTH       17
200ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
201ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define MOTION_MARKER_SEP              81921
202ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define MOTION_MARKER_SEP_LENGTH        17
203ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
204e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define RESYNC_MARKER           1
205ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define RESYNC_MARKER_LENGTH    17
206ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
207ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define SPRITE_NOT_USED     0
208113e0824d6bddf4376240681f9cf6a2deded9498John Reck#define STATIC_SPRITE       1
209ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define ONLINE_SPRITE       2
210ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define GMC_SPRITE      3
211ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
212ff941dcd815021bb20d6504eb486acb1e50592c3John Reck/* macroblock and block size */
213ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define MB_SIZE 16
21425fbb3fa1138675379102a44405852555cefccbdJohn Reck#define NCOEFF_MB (MB_SIZE*MB_SIZE)
215ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define B_SIZE 8
216ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define NCOEFF_BLOCK (B_SIZE*B_SIZE)
217ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define NCOEFF_Y NCOEFF_MB
218e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define NCOEFF_U NCOEFF_BLOCK
21952622668f91c69ec718b356d2e0f8555fc88435fJohn Reck#define NCOEFF_V NCOEFF_BLOCK
22052244fff29042926e21fa897ef5ab11148e35299John Reck
221ff941dcd815021bb20d6504eb486acb1e50592c3John Reck/* overrun buffer size  */
222e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define DEFAULT_OVERRUN_BUFFER_SIZE 1000
223e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
224ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
225e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck/* VLC decoding related definitions */
226e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define VLC_ERROR   (-1)
227ff941dcd815021bb20d6504eb486acb1e50592c3John Reck#define VLC_ESCAPE  7167
228ff941dcd815021bb20d6504eb486acb1e50592c3John Reck
229e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reck#endif /* _PVDECDEF_H_ */
230a447d29c65fb811cd184775a3476101a1cede929John Reck