159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* ------------------------------------------------------------------
259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * Copyright (C) 1998-2009 PacketVideo
359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong *
459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * Licensed under the Apache License, Version 2.0 (the "License");
559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * you may not use this file except in compliance with the License.
659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * You may obtain a copy of the License at
759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong *
859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong *      http://www.apache.org/licenses/LICENSE-2.0
959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong *
1059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * Unless required by applicable law or agreed to in writing, software
1159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
1359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * express or implied.
1459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * See the License for the specific language governing permissions
1559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * and limitations under the License.
1659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong * -------------------------------------------------------------------
1759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong */
1859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifndef _PVDECDEF_H_
1959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define _PVDECDEF_H_
2059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
2146bf665ea3687f06069ebd1a0acd01ed7b5ac9cbJames Dong#include <stdint.h> // for uint8_t, etc
2259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#include <stdlib.h>
2359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#include <string.h>
2459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
2559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong// Redefine the int types
2659f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef uint8_t uint8;
2759f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef uint16_t uint16;
2859f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef int16_t int16;
2959f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef uint32_t uint32;
3059f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef int32_t int32;
3159f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned int uint;
3259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
3359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/********** platform dependent in-line assembly *****************************/
3459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
3559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/*************** Intel *****************/
3659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
3759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/*************** ARM *****************/
3859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* for general ARM instruction. #define __ARM has to be defined in compiler set up.*/
3959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* for DSP MUL */
4059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifdef __TARGET_FEATURE_DSPMUL
4159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define _ARM_DSP_MUL
4259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
4359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
4459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* for Count Leading Zero instruction */
4559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifdef __TARGET_ARCH_5T
4659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define _ARM_CLZ
4759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
4859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifdef __TARGET_ARCH_5TE
4959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define _ARM_CLZ
5059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
5159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/****************************************************************************/
5259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
5359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifndef _PV_TYPES_
5459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define _PV_TYPES_
5559f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned char UChar;
5659f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef char Char;
5759f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned int UInt;
5859f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef int Int;
5959f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned short UShort;
6059f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef short Short;
6159f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef short int SInt;
6259f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned int Bool;
6359f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef unsigned long   ULong;
6459f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef void Void;
6559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
6659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_CODEC_INIT       0
6759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_CODEC_STOP       1
6859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_CODEC_RUNNING    2
6959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_CODEC_RESET      3
7059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
7159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
7259f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef enum
7359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong{
7459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_SUCCESS,
7559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_FAIL,
7659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_EOS,             /* hit End_Of_Sequence     */
7759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_MB_STUFFING,     /* hit Macroblock_Stuffing */
7859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_END_OF_VOP,      /* hit End_of_Video_Object_Plane */
7959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_END_OF_MB,       /* hit End_of_Macroblock */
8059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong    PV_END_OF_BUF       /* hit End_of_Bitstream_Buffer */
8159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong} PV_STATUS;
8259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
8359f566c4ec3dfc097ad8163523e522280b27e5c3James Dongtypedef UChar PIXEL;
8459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong//typedef Int MOT;   /* : "int" type runs faster on RISC machine */
8559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
8659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define HTFM            /*  3/2/01, Hypothesis Test Fast Matching for early drop-out*/
8759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong//#define _MOVE_INTERFACE
8859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
8959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong//#define RANDOM_REFSELCODE
9059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
9159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* handle the case of devision by zero in RC */
9259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MAD_MIN 1
9359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
9459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* 4/11/01, if SSE or MMX, no HTFM, no SAD_HP_FLY */
9559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
9659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* Code size reduction related Macros */
9759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifdef H263_ONLY
9859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifndef NO_RVLC
9959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NO_RVLC
10059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
10159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifndef NO_MPEG_QUANT
10259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NO_MPEG_QUANT
10359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
10459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#ifndef NO_INTER4V
10559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NO_INTER4V
10659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
10759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif
10859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/**************************************/
10959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
11059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define TRUE    1
11159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define FALSE   0
11259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
11359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_ABS(x)       (((x)<0)? -(x) : (x))
11459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_SIGN(x)      (((x)<0)? -1 : 1)
11559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_SIGN0(a)     (((a)<0)? -1 : (((a)>0) ? 1 : 0))
11659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_MAX(a,b)     ((a)>(b)? (a):(b))
11759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PV_MIN(a,b)     ((a)<(b)? (a):(b))
11859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
11959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_INTRA      0
12059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_INTER      1
12159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_INTRA_Q    2
12259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_INTER_Q    3
12359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_INTER4V    4
12459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MODE_SKIPPED    6
12559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
12659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define I_VOP       0
12759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define P_VOP       1
12859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define B_VOP       2
12959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
13059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/*09/04/00 Add MB height and width */
13159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MB_WIDTH 16
13259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MB_HEIGHT 16
13359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
13459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOP_BRIGHT_WHITEENC 255
13559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
13659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
13759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define LUMINANCE_DC_TYPE   1
13859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define CHROMINANCE_DC_TYPE 2
13959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
14059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define EOB_CODE                        1
14159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define EOB_CODE_LENGTH                32
14259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
14359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* 11/30/98 */
14459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define FoundRM     1   /* Resync Marker */
14559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define FoundVSC    2   /* VOP_START_CODE. */
14659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define FoundGSC    3   /* GROUP_START_CODE */
14759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define FoundEOB    4   /* EOB_CODE */
14859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
14959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
15059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* 05/08/2000, the error code returned from BitstreamShowBits() */
15159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define BITSTREAM_ERROR_CODE 0xFFFFFFFF
15259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
15359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* PacketVideo "absolution timestamp" object.  06/13/2000 */
15459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PVTS_START_CODE         0x01C4
15559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define PVTS_START_CODE_LENGTH  32
15659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
15759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* session layer and vop layer start codes */
15859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
15959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SESSION_START_CODE  0x01B0
16059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SESSION_END_CODE    0x01B1
16159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VISUAL_OBJECT_START_CODE 0x01B5
16259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
16359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VO_START_CODE           0x8
16459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VO_HEADER_LENGTH        32      /* lengtho of VO header: VO_START_CODE +  VO_ID */
16559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
16659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SOL_START_CODE          0x01BE
16759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SOL_START_CODE_LENGTH   32
16859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
16959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOL_START_CODE 0x12
17059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOL_START_CODE_LENGTH 28
17159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
17259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOP_START_CODE 0x1B6
17359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOP_START_CODE_LENGTH   32
17459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
17559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define GROUP_START_CODE    0x01B3
17659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define GROUP_START_CODE_LENGTH  32
17759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
17859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOP_ID_CODE_LENGTH      5
17959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VOP_TEMP_REF_CODE_LENGTH    16
18059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
18159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define USER_DATA_START_CODE        0x01B2
18259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define USER_DATA_START_CODE_LENGTH 32
18359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
18459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define START_CODE_PREFIX       0x01
18559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define START_CODE_PREFIX_LENGTH    24
18659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
18759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SHORT_VIDEO_START_MARKER         0x20
18859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SHORT_VIDEO_START_MARKER_LENGTH  22
18959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SHORT_VIDEO_END_MARKER            0x3F
19059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define GOB_RESYNC_MARKER         0x01
19159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define GOB_RESYNC_MARKER_LENGTH  17
19259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
19359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* motion and resync markers used in error resilient mode  */
19459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
19559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define DC_MARKER                      438273
19659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define DC_MARKER_LENGTH                19
19759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
19859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MOTION_MARKER_COMB             126977
19959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MOTION_MARKER_COMB_LENGTH       17
20059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
20159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MOTION_MARKER_SEP              81921
20259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MOTION_MARKER_SEP_LENGTH        17
20359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
20459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define RESYNC_MARKER           1
20559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define RESYNC_MARKER_LENGTH    17
20659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
20759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define SPRITE_NOT_USED     0
20859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define STATIC_SPRITE       1
20959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define ONLINE_SPRITE       2
21059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define GMC_SPRITE      3
21159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
21259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* macroblock and block size */
21359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define MB_SIZE 16
21459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NCOEFF_MB (MB_SIZE*MB_SIZE)
21559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define B_SIZE 8
21659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NCOEFF_BLOCK (B_SIZE*B_SIZE)
21759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NCOEFF_Y NCOEFF_MB
21859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NCOEFF_U NCOEFF_BLOCK
21959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define NCOEFF_V NCOEFF_BLOCK
22059f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
22159f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* overrun buffer size  */
22259f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define DEFAULT_OVERRUN_BUFFER_SIZE 1000
22359f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
22459f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
22559f566c4ec3dfc097ad8163523e522280b27e5c3James Dong/* VLC decoding related definitions */
22659f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VLC_ERROR   (-1)
22759f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#define VLC_ESCAPE  7167
22859f566c4ec3dfc097ad8163523e522280b27e5c3James Dong
22959f566c4ec3dfc097ad8163523e522280b27e5c3James Dong#endif /* _PVDECDEF_H_ */
230