13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------ 23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo 33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License. 63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at 73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * http://www.apache.org/licenses/LICENSE-2.0 93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * 103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software 113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied. 143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions 153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License. 163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * ------------------------------------------------------------------- 173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */ 183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef _PVDECDEF_H_ 193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define _PVDECDEF_H_ 203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "mp4dec_api.h" 223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef enum 243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{ 253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_SUCCESS, 263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_FAIL, 273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_MB_STUFFING, /* hit Macroblock_Stuffing */ 283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_END_OF_VOP, /* hit End_of_Video_Object_Plane */ 293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PV_END_OF_MB /* hit End_of_Macroblock */ 303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_TOLERATE_VOL_ERRORS 313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong , PV_BAD_VOLHEADER 323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif 333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong} PV_STATUS; 343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef uint8 PIXEL; 363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongtypedef int16 MOT; /* : "int" type runs faster on RISC machine */ 373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define TRUE 1 393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FALSE 0 403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_ABS(x) (((x)<0)? -(x) : (x)) 423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_SIGN(x) (((x)<0)? -1 : 1) 433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_SIGN0(a) (((a)<0)? -1 : (((a)>0) ? 1 : 0)) 443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MAX(a,b) ((a)>(b)? (a):(b)) 453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MIN(a,b) ((a)<(b)? (a):(b)) 463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PV_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A)) 473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* You don't want to use ((x>UB)?UB:(x<LB)?LB:x) for the clipping */ 483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* because it will use one extra comparison if the compiler is */ 493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* not well-optimized. 04/19/2000. */ 50183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define CLIP_THE_RANGE(x,LB,UB) if ((x)<(LB)) (x) = (LB); else if ((x)>(UB)) (x) = (UB) 513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTRA 0x08 //01000 533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTRA_Q 0x09 //01001 543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_SKIPPED 0x10 //10000 553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER4V 0x14 //10100 563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER 0x16 //10110 573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER_Q 0x17 //10111 583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MODE_INTER4V_Q 0x15 //10101 593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTER_1VMASK 0x2 603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define Q_MASK 0x1 613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTRA_MASK 0x8 623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTER_MASK 0x4 633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define I_VOP 0 663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define P_VOP 1 673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define B_VOP 2 683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define LUMINANCE_DC_TYPE 1 703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CHROMINANCE_DC_TYPE 2 713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_LENGTH 32 733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* 11/30/98 */ 75183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define NoMarkerFound (-1) 763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundRM 1 /* Resync Marker */ 773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundVSC 2 /* VOP_START_CODE. */ 783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundGSC 3 /* GROUP_START_CODE */ 793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define FoundEOB 4 /* EOB_CODE */ 803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* PacketVideo "absolution timestamp" object. 06/13/2000 */ 823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PVTS_START_CODE 0x01C4 833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define PVTS_START_CODE_LENGTH 32 843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* session layer and vop layer start codes */ 863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_SEQUENCE_START_CODE 0x01B0 883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_SEQUENCE_END_CODE 0x01B1 893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VISUAL_OBJECT_START_CODE 0x01B5 913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VO_START_CODE 0x8 923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VO_HEADER_LENGTH 32 /* lengtho of VO header: VO_START_CODE + VO_ID */ 933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SOL_START_CODE 0x01BE 953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SOL_START_CODE_LENGTH 32 963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOL_START_CODE 0x12 983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOL_START_CODE_LENGTH 28 993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_START_CODE 0x1B6 1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_START_CODE_LENGTH 32 1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GROUP_START_CODE 0x01B3 1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GROUP_START_CODE_LENGTH 32 1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_ID_CODE_LENGTH 5 1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VOP_TEMP_REF_CODE_LENGTH 16 1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define USER_DATA_START_CODE 0x01B2 1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define USER_DATA_START_CODE_LENGTH 32 1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_PREFIX 0x01 1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define START_CODE_PREFIX_LENGTH 24 1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_START_MARKER 0x20 1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_START_MARKER_LENGTH 22 1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SHORT_VIDEO_END_MARKER 0x3F 1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GOB_RESYNC_MARKER 0x01 1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GOB_RESYNC_MARKER_LENGTH 17 1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* motion and resync markers used in error resilient mode */ 1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define DC_MARKER 438273 1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define DC_MARKER_LENGTH 19 1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_COMB 126977 1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_COMB_LENGTH 17 1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_SEP 81921 1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MOTION_MARKER_SEP_LENGTH 17 1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define RESYNC_MARKER 1 1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define RESYNC_MARKER_LENGTH 17 1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define SPRITE_NOT_USED 0 1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define STATIC_SPRITE 1 1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ONLINE_SPRITE 2 1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define GMC_SPRITE 3 1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* macroblock and block size */ 1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define MB_SIZE 16 1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_MB (MB_SIZE*MB_SIZE) 1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define B_SIZE 8 1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_BLOCK (B_SIZE*B_SIZE) 1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_Y NCOEFF_MB 1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_U NCOEFF_BLOCK 1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define NCOEFF_V NCOEFF_BLOCK 1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define BLK_PER_MB 4 /* Number of blocks per MB */ 1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* VLC decoding related definitions */ 1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VLC_ERROR (-1) 1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define VLC_ESCAPE 7167 1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* macro utility */ 156183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define ZERO_OUT_64BYTES(x) { *((uint32*)(x)) = *(((uint32*)(x))+1) = \ 1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+2) = *(((uint32*)(x))+3) = \ 1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+4) = *(((uint32*)(x))+5) = \ 1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+6) = *(((uint32*)(x))+7) = \ 1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+8) = *(((uint32*)(x))+9) = \ 1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+10) = *(((uint32*)(x))+11) = \ 1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+12) = *(((uint32*)(x))+13) = \ 1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *(((uint32*)(x))+14) = *(((uint32*)(x))+15) = 0; } 1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong 1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif /* _PVDECDEF_H_ */ 168