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