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