1609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* ------------------------------------------------------------------ 2609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * 4609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * you may not use this file except in compliance with the License. 6609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * You may obtain a copy of the License at 7609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * 8609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * 10609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Unless required by applicable law or agreed to in writing, software 11609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * express or implied. 14609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * See the License for the specific language governing permissions 15609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * and limitations under the License. 16609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * ------------------------------------------------------------------- 17609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber */ 18609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 19609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis file contains common code shared between AVC decoder and AVC encoder for 20609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberinternal use only. 21609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 22609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 23609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 24609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifndef AVCINT_COMMON_H_INCLUDED 25609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVCINT_COMMON_H_INCLUDED 26609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 27609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifndef AVCAPI_COMMON_H_INCLUDED 28609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#include "avcapi_common.h" 29609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif 30609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 31609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 32609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifndef TRUE 33609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define TRUE 1 34609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define FALSE 0 35609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif 36609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 37609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 38609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 39609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 40609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMathematic functions defined in subclause 5.7. 41609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberCan be replaced with assembly instructions for speedup. 42609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 43609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 44609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_ABS(x) (((x)<0)? -(x) : (x)) 45609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_SIGN(x) (((x)<0)? -1 : 1) 46609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_SIGN0(x) (((x)<0)? -1 : (((x)>0) ? 1 : 0)) 47609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_MAX(x,y) ((x)>(y)? (x):(y)) 48609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_MIN(x,y) ((x)<(y)? (x):(y)) 49609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A)) 50609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_CLIP3(a,b,x) (AVC_MAX(a,AVC_MIN(x,b))) /* clip x between a and b */ 51609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_CLIP(x) AVC_CLIP3(0,255,x) 52609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_FLOOR(x) ((int)(x)) 53609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_RASTER_SCAN(x,y,n) ((x)+(y)*(n)) 54609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_ROUND(x) (AVC_SIGN(x)*AVC_FLOOR(AVC_ABS(x)+0.5)) 55609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVC_INVERSE_RASTER_SCAN(a,b,c,d,e) (((e)==0)? (((a)%((d)/(b)))*(b)): (((a)/((d)/(b)))*(c))) 56609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* a:block address, b:block width, c:block height, d:total_width, e:x or y coordinate */ 57609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 58609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define DEFAULT_ATTR 0 /* default memory attribute */ 59609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define FAST_MEM_ATTR 1 /* fast memory attribute */ 60609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 61609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 62609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* This section is for definition of constants. */ 63609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MB_SIZE 16 64609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define BLOCK_SIZE 4 65609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define EMULATION_PREVENTION_THREE_BYTE 0x3 66609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define NUM_PIXELS_IN_MB (24*16) 67609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define NUM_BLKS_IN_MB 24 68609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 69609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVCNumI4PredMode 9 70609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVCNumI16PredMode 4 71609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVCNumIChromaMode 4 72609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 73609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* constants used in the structures below */ 74609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAXIMUMVALUEOFcpb_cnt 32 /* used in HRDParams */ 75609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE 255 /* used in SeqParamSet */ 76609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_NUM_SLICE_GROUP 8 /* used in PicParamSet */ 77609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_REF_PIC_LIST_REORDERING 32 /* 32 is maximum according to Annex A, SliceHeader */ 78609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_DEC_REF_PIC_MARKING 64 /* 64 is the maximum possible given the max num ref pictures to 31. */ 79609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_FS (16+1) /* pre-defined size of frame store array */ 80609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_LEVEL_IDX 15 /* only 15 levels defined for now */ 81609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MAX_REF_PIC_LIST 33 /* max size of the RefPicList0 and RefPicList1 */ 82609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 83609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 84609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 85609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberArchitectural related macros. 86609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 87609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 88609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifdef USE_PRED_BLOCK 89609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define MB_BASED_DEBLOCK 90609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif 91609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 92609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 93609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberPicture type, PV created. 94609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 95609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 96609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 97609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 98609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_FRAME = 3 99609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCPictureType; 100609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 101609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 102609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis slice type follows Table 7-3. The bottom 5 items may not needed. 103609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 104609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 105609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 106609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 107609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P_SLICE = 0, 108609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_B_SLICE = 1, 109609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I_SLICE = 2, 110609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SP_SLICE = 3, 111609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SI_SLICE = 4, 112609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P_ALL_SLICE = 5, 113609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_B_ALL_SLICE = 6, 114609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I_ALL_SLICE = 7, 115609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SP_ALL_SLICE = 8, 116609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SI_ALL_SLICE = 9 117609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCSliceType; 118609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 119609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 120609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberTypes of the macroblock and partition. PV Created. 121609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 122609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 123609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 124609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 125609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* intra */ 126609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4, 127609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I16, 128609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I_PCM, 129609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SI4, 130609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 131609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* inter for both P and B*/ 132609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_BDirect16, 133609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P16, 134609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P16x8, 135609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P8x16, 136609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P8, 137609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_P8ref0, 138609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_SKIP 139609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCMBMode; 140609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 141609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 142609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberEnumeration for sub-macroblock mode, interpreted from sub_mb_type. 143609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 144609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 145609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 146609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 147609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* for sub-partition mode */ 148609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_BDirect8, 149609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_8x8, 150609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_8x4, 151609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_4x8, 152609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_4x4 153609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCSubMBMode; 154609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 155609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 156609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMode of prediction of partition or sub-partition. PV Created. 157609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberDo not change the order!!! Used in table look-up mode prediction in 158609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubervlc.c. 159609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 160609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 161609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 162609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 163609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Pred_L0 = 0, 164609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Pred_L1, 165609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_BiPred, 166609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Direct 167609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCPredMode; 168609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 169609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 170609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 171609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMode of intra 4x4 prediction. Table 8-2 172609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 173609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 174609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 175609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 176609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Vertical = 0, 177609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Horizontal, 178609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_DC, 179609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Diagonal_Down_Left, 180609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Diagonal_Down_Right, 181609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Vertical_Right, 182609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Horizontal_Down, 183609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Vertical_Left, 184609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I4_Horizontal_Up 185609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCIntra4x4PredMode; 186609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 187609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 188609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMode of intra 16x16 prediction. Table 8-3 189609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 190609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 191609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 192609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 193609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I16_Vertical = 0, 194609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I16_Horizontal, 195609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I16_DC, 196609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_I16_Plane 197609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCIntra16x16PredMode; 198609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 199609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 200609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 201609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMode of intra chroma prediction. Table 8-4 202609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 203609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 204609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 205609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 206609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_IC_DC = 0, 207609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_IC_Horizontal, 208609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_IC_Vertical, 209609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_IC_Plane 210609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCIntraChromaPredMode; 211609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 212609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 213609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberType of residual going to residual_block_cavlc function, PV created. 214609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 215609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 216609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum 217609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 218609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Luma, 219609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Intra16DC, 220609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_Intra16AC, 221609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_ChromaDC, 222609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVC_ChromaAC 223609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCResidualType; 224609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 225609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 226609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 227609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains VUI parameters as specified in Annex E. 228609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSome variables may be removed from the structure if they are found to be useless to store. 229609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 230609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 231609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagHRDParams 232609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 233609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint cpb_cnt_minus1; /* ue(v), range 0..31 */ 234609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint bit_rate_scale; /* u(4) */ 235609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint cpb_size_scale; /* u(4) */ 236609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint32 bit_rate_value_minus1[MAXIMUMVALUEOFcpb_cnt];/* ue(v), range 0..2^32-2 */ 237609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint32 cpb_size_value_minus1[MAXIMUMVALUEOFcpb_cnt]; /* ue(v), range 0..2^32-2 */ 238609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint cbr_flag[MAXIMUMVALUEOFcpb_cnt]; /* u(1) */ 239609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint initial_cpb_removal_delay_length_minus1; /* u(5), default 23 */ 240609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint cpb_removal_delay_length_minus1; /* u(5), default 23 */ 241609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint dpb_output_delay_length_minus1; /* u(5), default 23 */ 242609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint time_offset_length; /* u(5), default 24 */ 243609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCHRDParams; 244609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 245609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 246609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains VUI parameters as specified in Annex E. 247609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSome variables may be removed from the structure if they are found to be useless to store. 248609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 249609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 250609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagVUIParam 251609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 252609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint aspect_ratio_info_present_flag; /* u(1) */ 253609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint aspect_ratio_idc; /* u(8), table E-1 */ 254609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint sar_width; /* u(16) */ 255609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint sar_height; /* u(16) */ 256609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint overscan_info_present_flag; /* u(1) */ 257609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint overscan_appropriate_flag; /* u(1) */ 258609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint video_signal_type_present_flag; /* u(1) */ 259609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint video_format; /* u(3), Table E-2, default 5, unspecified */ 260609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint video_full_range_flag; /* u(1) */ 261609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint colour_description_present_flag; /* u(1) */ 262609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint colour_primaries; /* u(8), Table E-3, default 2, unspecified */ 263609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint transfer_characteristics; /* u(8), Table E-4, default 2, unspecified */ 264609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint matrix_coefficients; /* u(8), Table E-5, default 2, unspecified */ 265609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint chroma_location_info_present_flag; /* u(1) */ 266609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint chroma_sample_loc_type_top_field; /* ue(v), Fig. E-1range 0..5, default 0 */ 267609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint chroma_sample_loc_type_bottom_field; /* ue(v) */ 268609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint timing_info_present_flag; /* u(1) */ 269609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_units_in_tick; /* u(32), must be > 0 */ 270609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint time_scale; /* u(32), must be > 0 */ 271609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint fixed_frame_rate_flag; /* u(1), Eq. C-13 */ 272609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint nal_hrd_parameters_present_flag; /* u(1) */ 273609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCHRDParams nal_hrd_parameters; /* hrd_paramters */ 274609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint vcl_hrd_parameters_present_flag; /* u(1) */ 275609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCHRDParams vcl_hrd_parameters; /* hrd_paramters */ 276609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if ((nal_hrd_parameters_present_flag || (vcl_hrd_parameters_present_flag)) */ 277609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint low_delay_hrd_flag; /* u(1) */ 278609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_struct_present_flag; 279609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint bitstream_restriction_flag; /* u(1) */ 280609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint motion_vectors_over_pic_boundaries_flag; /* u(1) */ 281609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint max_bytes_per_pic_denom; /* ue(v), default 2 */ 282609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint max_bits_per_mb_denom; /* ue(v), range 0..16, default 1 */ 283609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint log2_max_mv_length_vertical; /* ue(v), range 0..16, default 16 */ 284609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint log2_max_mv_length_horizontal; /* ue(v), range 0..16, default 16 */ 285609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint max_dec_frame_reordering; /* ue(v) */ 286609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint max_dec_frame_buffering; /* ue(v) */ 287609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCVUIParams; 288609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 289609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 290609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 291609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains information in a sequence parameter set NAL. 292609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSome variables may be removed from the structure if they are found to be useless to store. 293609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 294609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 295609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagSeqParamSet 296609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 297609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint Valid; /* indicates the parameter set is valid */ 298609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 299609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint profile_idc; /* u(8) */ 300609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint constrained_set0_flag; /* u(1) */ 301609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint constrained_set1_flag; /* u(1) */ 302609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint constrained_set2_flag; /* u(1) */ 303609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint constrained_set3_flag; /* u(1) */ 304609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint level_idc; /* u(8) */ 305609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint seq_parameter_set_id; /* ue(v), range 0..31 */ 306609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint log2_max_frame_num_minus4; /* ue(v), range 0..12 */ 307609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_order_cnt_type; /* ue(v), range 0..2 */ 308609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( pic_order_cnt_type == 0 ) */ 309609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint log2_max_pic_order_cnt_lsb_minus4; /* ue(v), range 0..12 */ 310609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* else if( pic_order_cnt_type == 1 ) */ 311609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint delta_pic_order_always_zero_flag; /* u(1) */ 312609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 offset_for_non_ref_pic; /* se(v) */ 313609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 offset_for_top_to_bottom_field; /* se(v) */ 314609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_frames_in_pic_order_cnt_cycle; /* ue(v) , range 0..255 */ 315609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) */ 316609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 offset_for_ref_frame[MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE]; /* se(v) */ 317609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_frames; /* ue(v), range 0..16 */ 318609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint gaps_in_frame_num_value_allowed_flag; /* u(1) */ 319609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_width_in_mbs_minus1; /* ue(v) */ 320609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_height_in_map_units_minus1; /* ue(v) */ 321609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_mbs_only_flag; /* u(1) */ 322609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( !frame_mbs_only_flag ) */ 323609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mb_adaptive_frame_field_flag; /* u(1) */ 324609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint direct_8x8_inference_flag; /* u(1), must be 1 when frame_mbs_only_flag is 0 */ 325609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_cropping_flag; /* u(1) */ 326609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( frmae_cropping_flag) */ 327609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_crop_left_offset; /* ue(v) */ 328609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_crop_right_offset; /* ue(v) */ 329609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_crop_top_offset; /* ue(v) */ 330609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_crop_bottom_offset; /* ue(v) */ 331609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint vui_parameters_present_flag; /* u(1) */ 332609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber// uint nal_hrd_parameters_present_flag; 333609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber// uint vcl_hrd_parameters_present_flag; 334609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber// AVCHRDParams *nal_hrd_parameters; 335609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber// AVCHRDParams *vcl_hrd_parameters; 336609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCVUIParams vui_parameters; /* AVCVUIParam */ 337609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCSeqParamSet; 338609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 339609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 340609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains information in a picture parameter set NAL. 341609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSome variables may be removed from the structure if they are found to be useless to store. 342609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 343609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 344609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagPicParamSet 345609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 346609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_parameter_set_id; /* ue(v), range 0..255 */ 347609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint seq_parameter_set_id; /* ue(v), range 0..31 */ 348609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint entropy_coding_mode_flag; /* u(1) */ 349609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_order_present_flag; /* u(1) */ 350609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_slice_groups_minus1; /* ue(v), range in Annex A */ 351609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( num_slice_groups_minus1 > 0) */ 352609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_group_map_type; /* ue(v), range 0..6 */ 353609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( slice_group_map_type = = 0 ) */ 354609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* for(0:1:num_slice_groups_minus1) */ 355609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint run_length_minus1[MAX_NUM_SLICE_GROUP]; /* ue(v) */ 356609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* else if( slice_group_map_type = = 2 ) */ 357609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* for(0:1:num_slice_groups_minus1-1) */ 358609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint top_left[MAX_NUM_SLICE_GROUP-1]; /* ue(v) */ 359609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint bottom_right[MAX_NUM_SLICE_GROUP-1]; /* ue(v) */ 360609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* else if( slice_group_map_type = = 3 || 4 || 5 */ 361609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_group_change_direction_flag; /* u(1) */ 362609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_group_change_rate_minus1; /* ue(v) */ 363609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* else if( slice_group_map_type = = 6 ) */ 364609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_size_in_map_units_minus1; /* ue(v) */ 365609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* for(0:1:pic_size_in_map_units_minus1) */ 366609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint *slice_group_id; /* complete MBAmap u(v) */ 367609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_idx_l0_active_minus1; /* ue(v), range 0..31 */ 368609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_idx_l1_active_minus1; /* ue(v), range 0..31 */ 369609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint weighted_pred_flag; /* u(1) */ 370609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint weighted_bipred_idc; /* u(2), range 0..2 */ 371609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pic_init_qp_minus26; /* se(v), range -26..25 */ 372609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pic_init_qs_minus26; /* se(v), range -26..25 */ 373609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int chroma_qp_index_offset; /* se(v), range -12..12 */ 374609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint deblocking_filter_control_present_flag; /* u(1) */ 375609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint constrained_intra_pred_flag; /* u(1) */ 376609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint redundant_pic_cnt_present_flag; /* u(1) */ 377609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCPicParamSet; 378609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 379609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 380609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 381609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains slice header information. 382609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSome variables may be removed from the structure if they are found to be useless to store. 383609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 384609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 385609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagSliceHeader 386609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 387609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint first_mb_in_slice; /* ue(v) */ 388609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCSliceType slice_type; /* ue(v), Table 7-3, range 0..9 */ 389609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_parameter_set_id; /* ue(v), range 0..255 */ 390609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint frame_num; /* u(v), see log2max_frame_num_minus4 */ 391609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if( !frame_mbs_only_flag) */ 392609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint field_pic_flag; /* u(1) */ 393609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(field_pic_flag) */ 394609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint bottom_field_flag; /* u(1) */ 395609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(nal_unit_type == 5) */ 396609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint idr_pic_id; /* ue(v), range 0..65535 */ 397609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(pic_order_cnt_type==0) */ 398609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint pic_order_cnt_lsb; /* u(v), range 0..MaxPicOrderCntLsb-1 */ 399609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(pic_order_present_flag && !field_pic_flag) */ 400609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 delta_pic_order_cnt_bottom; /* se(v) */ 401609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(pic_order_cnt_type==1 && !delta_pic_order_always_zero_flag) */ 402609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(pic_order_present_flag && !field_pic_flag) */ 403609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 delta_pic_order_cnt[2]; 404609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(redundant_pic_cnt_present_flag) */ 405609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint redundant_pic_cnt; /* ue(v), range 0..127 */ 406609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(slice_type == B) */ 407609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint direct_spatial_mv_pred_flag; /* u(1) */ 408609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(slice_type == P || slice_type==SP || slice_type==B) */ 409609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_idx_active_override_flag; /* u(1) */ 410609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(num_ref_idx_active_override_flag) */ 411609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_idx_l0_active_minus1; /* ue(v) */ 412609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(slie_type == B) */ 413609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint num_ref_idx_l1_active_minus1; /* ue(v) */ 414609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 415609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* ref_pic_list_reordering() */ 416609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint ref_pic_list_reordering_flag_l0; /* u(1) */ 417609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint reordering_of_pic_nums_idc_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v), range 0..3 */ 418609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint abs_diff_pic_num_minus1_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 419609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint long_term_pic_num_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 420609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint ref_pic_list_reordering_flag_l1; /* u(1) */ 421609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint reordering_of_pic_nums_idc_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v), range 0..3 */ 422609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint abs_diff_pic_num_minus1_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 423609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint long_term_pic_num_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 424609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 425609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* end ref_pic_list_reordering() */ 426609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(nal_ref_idc!=0) */ 427609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* dec_ref_pic_marking() */ 428609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint no_output_of_prior_pics_flag; /* u(1) */ 429609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint long_term_reference_flag; /* u(1) */ 430609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint adaptive_ref_pic_marking_mode_flag; /* u(1) */ 431609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint memory_management_control_operation[MAX_DEC_REF_PIC_MARKING]; /* ue(v), range 0..6 */ 432609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint difference_of_pic_nums_minus1[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 433609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint long_term_pic_num[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 434609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint long_term_frame_idx[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 435609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint max_long_term_frame_idx_plus1[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 436609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* end dec_ref_pic_marking() */ 437609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(entropy_coding_mode_flag && slice_type!=I && slice_type!=SI) */ 438609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint cabac_init_idc; /* ue(v), range 0..2 */ 439609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int slice_qp_delta; /* se(v), range 0..51 */ 440609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(slice_type==SP || slice_type==SI) */ 441609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(slice_type==SP) */ 442609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint sp_for_switch_flag; /* u(1) */ 443609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int slice_qs_delta; /* se(v) */ 444609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 445609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(deblocking_filter_control_present_flag)*/ 446609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint disable_deblocking_filter_idc; /* ue(v), range 0..2 */ 447609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(disable_deblocking_filter_idc!=1) */ 448609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int slice_alpha_c0_offset_div2; /* se(v), range -6..6, default 0 */ 449609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int slice_beta_offset_div_2; /* se(v), range -6..6, default 0 */ 450609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if(num_slice_groups_minus1>0 && slice_group_map_type>=3 && slice_group_map_type<=5)*/ 451609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_group_change_cycle; /* u(v), use ceil(log2(PicSizeInMapUnits/SliceGroupChangeRate + 1)) bits*/ 452609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 453609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCSliceHeader; 454609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 455609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 456609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis struct contains information about the neighboring pixel. 457609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 458609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 459609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagPixPos 460609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 461609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int available; 462609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mb_addr; /* macroblock address of the current pixel, see below */ 463609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int x; /* x,y positions of current pixel relative to the macroblock mb_addr */ 464609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int y; 465609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pos_x; /* x,y positions of current pixel relative to the picture. */ 466609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pos_y; 467609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCPixelPos; 468609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 469609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagNeighborAvailability 470609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 471609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int left; 472609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int top; /* macroblock address of the current pixel, see below */ 473609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int top_right; /* x,y positions of current pixel relative to the macroblock mb_addr */ 474609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCNeighborAvailability; 475609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 476609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 477609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 478609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains picture data and related information necessary to be used as 479609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberreference frame. 480609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 481609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 482609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagPictureData 483609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 484609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint16 RefIdx; /* index used for reference frame */ 485609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *Sl; /* derived from base_dpb in AVCFrameStore */ 486609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *Scb; /* for complementary fields, YUV are interlaced */ 487609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *Scr; /* Sl of top_field and bottom_fields will be one line apart and the 488609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber stride will be 2 times the width. */ 489609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* For non-complementary field, the above still applies. A special 490609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber output formatting is required. */ 491609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 492609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* Then, necessary variables that need to be stored */ 493609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureType picType; /* frame, top-field or bot-field */ 494609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 495609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint isReference; 496609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 497609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint isLongTerm; 498609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicOrderCnt; 499609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicNum; 500609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int LongTermPicNum; 501609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 502609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int width; /* how many pixel per line */ 503609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int height;/* how many line */ 504609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pitch; /* how many pixel between the line */ 505609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 506609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint padded; /* flag for being padded */ 507609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 508609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCPictureData; 509609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 510609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 511609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains information for frame storage. 512609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 513609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 514609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagFrameStore 515609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 516609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *base_dpb; /* base pointer for the YCbCr */ 517609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 518609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int IsReference; /* 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used */ 519609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int IsLongTerm; /* 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used */ 520609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if IsLongTerm is true, IsReference can be ignored. */ 521609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* if IsReference is true, IsLongterm will be checked for short-term or long-term. */ 522609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* IsUsed must be true to enable the validity of IsReference and IsLongTerm */ 523609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 524609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int IsOutputted; /* has it been outputted via AVCDecGetOutput API, then don't output it again, 525609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber wait until it is returned. */ 526609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureData frame; 527609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 528609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int FrameNum; 529609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int FrameNumWrap; 530609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int LongTermFrameIdx; 531609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicOrderCnt; /* of the frame, smaller of the 2 fields */ 532609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 533609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCFrameStore; 534609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 535609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 536609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure maintains the actual memory for the decoded picture buffer (DPB) which is 537609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberallocated at the beginning according to profile/level. 538609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberOnce decoded_picture_buffer is allocated, Sl,Scb,Scr in 539609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberAVCPictureData structure just point to the address in decoded_picture_buffer. 540609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberused_size maintains the used space. 541609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberNOTE:: In order to maintain contiguous memory space, memory equal to a single frame is 542609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberassigned at a time. Two opposite fields reside in the same frame memory. 543609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 544609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber |-------|---|---|---|xxx|-------|xxx|---|-------| decoded_picture_buffer 545609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber frame top bot top frame bot frame 546609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 0 1 1 2 3 4 5 547609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 548609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber bot 2 and top 4 do not exist, the memory is not used. 549609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 550609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 551609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 552609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagDecPicBuffer 553609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 554609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *decoded_picture_buffer; /* actual memory */ 555609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint32 dpb_size; /* size of dpb in bytes */ 556609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint32 used_size; /* used size */ 557609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber struct tagFrameStore *fs[MAX_FS]; /* list of frame stored, actual buffer */ 558609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int num_fs; /* size of fs */ 559609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 560609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCDecPicBuffer; 561609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 562609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 563609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 564609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains macroblock related variables. 565609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 566609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 567609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagMacroblock 568609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 569609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCIntraChromaPredMode intra_chroma_pred_mode; /* ue(v) */ 570609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 571609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 mvL0[16]; /* motion vectors, 16 bit packed (x,y) per element */ 572609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int32 mvL1[16]; 573609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int16 ref_idx_L0[4]; 574609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int16 ref_idx_L1[4]; 575609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint16 RefIdx[4]; /* ref index, has value of AVCPictureData->RefIdx */ 576609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* stored data */ 577609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 578609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mb_intra; /* intra flag */ 579609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 580609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mb_bottom_field; 581609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 582609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCMBMode mbMode; /* type of MB prediction */ 583609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCSubMBMode subMbMode[4]; /* for each 8x8 partition */ 584609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 585609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint CBP; /* CodeBlockPattern */ 586609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCIntra16x16PredMode i16Mode; /* Intra16x16PredMode */ 587609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCIntra4x4PredMode i4Mode[16]; /* Intra4x4PredMode, in raster scan order */ 588609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int NumMbPart; /* number of partition */ 589609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPredMode MBPartPredMode[4][4]; /* prediction mode [MBPartIndx][subMBPartIndx] */ 590609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int MbPartWidth; 591609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int MbPartHeight; 592609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int NumSubMbPart[4]; /* for each 8x8 partition */ 593609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int SubMbPartWidth[4]; /* for each 8x8 partition */ 594609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int SubMbPartHeight[4]; /* for each 8x8 partition */ 595609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 596609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 nz_coeff[NUM_BLKS_IN_MB]; /* [blk_y][blk_x], Chroma is [4..5][0...3], see predict_nnz() function */ 597609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 598609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPy; /* Luma QP */ 599609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPc; /* Chroma QP */ 600609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QSc; /* Chroma QP S-picture */ 601609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 602609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int slice_id; // MC slice 603609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCMacroblock; 604609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 605609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 606609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 607609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains common internal variables between the encoder and decoder 608609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubersuch that some functions can be shared among them. 609609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 610609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 611609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagCommonObj 612609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 613609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* put these 2 up here to make sure they are word-aligned */ 614609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int16 block[NUM_PIXELS_IN_MB]; /* for transformed residue coefficient */ 615609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pred_block; /* pointer to prediction block, could point to a frame */ 616609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifdef USE_PRED_BLOCK 617609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 pred[688]; /* for prediction */ 618609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* Luma [0-399], Cb [400-543], Cr[544-687] */ 619609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif 620609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int pred_pitch; /* either equal to 20 or to frame pitch */ 621609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 622609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* temporary buffers for intra prediction */ 623609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* these variables should remain inside fast RAM */ 624609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifdef MB_BASED_DEBLOCK 625609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *intra_pred_top; /* a row of pixel for intra prediction */ 626609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_left[17]; /* a column of pixel for intra prediction */ 627609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *intra_pred_top_cb; 628609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_left_cb[9]; 629609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *intra_pred_top_cr; 630609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_left_cr[9]; 631609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif 632609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* pointer to the prediction area for intra prediction */ 633609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_top; /* pointer to the top intra prediction value */ 634609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_left; /* pointer to the left intra prediction value */ 635609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_topleft; /* the [-1,-1] neighboring pixel */ 636609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_top_cb; 637609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_left_cb; 638609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_topleft_cb; 639609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_top_cr; 640609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 *pintra_pred_left_cr; 641609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint8 intra_pred_topleft_cr; 642609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 643609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPy; 644609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPc; 645609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPy_div_6; 646609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPy_mod_6; 647609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPc_div_6; 648609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QPc_mod_6; 649609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /**** nal_unit ******/ 650609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* previously in AVCNALUnit format */ 651609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint NumBytesInRBSP; 652609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int forbidden_bit; 653609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int nal_ref_idc; 654609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCNalUnitType nal_unit_type; 655609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCNalUnitType prev_nal_unit_type; 656609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 657609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_data_partitioning; /* flag when nal_unit_type is between 2 and 4 */ 658609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /**** ******** ******/ 659609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCSliceType slice_type; 660609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCDecPicBuffer *decPicBuf; /* decoded picture buffer */ 661609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 662609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCSeqParamSet *currSeqParams; /* the currently used one */ 663609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 664609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPicParamSet *currPicParams; /* the currently used one */ 665609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint seq_parameter_set_id; 666609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* slice header */ 667609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCSliceHeader *sliceHdr; /* slice header param syntax variables */ 668609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 669609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureData *currPic; /* pointer to current picture */ 670609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCFrameStore *currFS; /* pointer to current frame store */ 671609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureType currPicType; /* frame, top-field or bot-field */ 672609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 673609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint newPic; /* flag for new picture */ 674609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint newSlice; /* flag for new slice */ 675609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureData *prevRefPic; /* pointer to previous picture */ 676609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 677609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCMacroblock *mblock; /* array of macroblocks covering entire picture */ 678609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCMacroblock *currMB; /* pointer to current macroblock */ 679609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mbNum; /* number of current MB */ 680609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mb_x; /* x-coordinate of the current mbNum */ 681609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mb_y; /* y-coordinate of the current mbNum */ 682609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 683609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* For internal operation, scratch memory for MV, prediction, transform, etc.*/ 684609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint32 cbp4x4; /* each bit represent nonzero 4x4 block in reverse raster scan order */ 685609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* starting from luma, Cb and Cr, lsb toward msb */ 686609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mvd_l0[4][4][2]; /* [mbPartIdx][subMbPartIdx][compIdx], se(v) */ 687609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mvd_l1[4][4][2]; /* [mbPartIdx][subMbPartIdx][compIdx], se(v) */ 688609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 689609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mbAddrA, mbAddrB, mbAddrC, mbAddrD; /* address of neighboring MBs */ 690609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 691609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mbAvailA, mbAvailB, mbAvailC, mbAvailD; /* availability */ 692609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 693609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint intraAvailA, intraAvailB, intraAvailC, intraAvailD; /* for intra mode */ 694609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /***********************************************/ 695609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* The following variables are defined in the draft. */ 696609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* They may need to be stored in PictureData structure and used for reference. */ 697609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* In that case, just move or copy it to AVCDecPictureData structure. */ 698609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 699609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int padded_size; /* size of extra padding to a frame */ 700609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 701609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint MaxFrameNum; /*2^(log2_max_frame_num_minus4+4), range 0.. 2^16-1 */ 702609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint MaxPicOrderCntLsb; /*2^(log2_max_pic_order_cnt_lsb_minus4+4), 0..2^16-1 */ 703609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicWidthInMbs; /*pic_width_in_mbs_minus1+1 */ 704609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicWidthInSamplesL; /* PicWidthInMbs*16 */ 705609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicWidthInSamplesC; /* PicWIdthInMbs*8 */ 706609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicHeightInMapUnits; /* pic_height_in_map_units_minus1+1 */ 707609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicSizeInMapUnits; /* PicWidthInMbs*PicHeightInMapUnits */ 708609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint FrameHeightInMbs; /*(2-frame_mbs_only_flag)*PicHeightInMapUnits */ 709609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 710609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint SliceGroupChangeRate; /* slice_group_change_rate_minus1 + 1 */ 711609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 712609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* access unit */ 713609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint primary_pic_type; /* u(3), Table 7-2, kinda informative only */ 714609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 715609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* slice data partition */ 716609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint slice_id; /* ue(v) */ 717609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 718609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint UnusedShortTermFrameNum; 719609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PrevRefFrameNum; 720609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint MbaffFrameFlag; /* (mb_adaptive_frame_field_flag && !field_pic_flag) */ 721609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicHeightInMbs; /* FrameHeightInMbs/(1+field_pic_flag) */ 722609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicHeightInSamplesL; /* PicHeightInMbs*16 */ 723609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicHeightInSamplesC; /* PicHeightInMbs*8 */ 724609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint PicSizeInMbs; /* PicWidthInMbs*PicHeightInMbs */ 725609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint level_idc; 726609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int numMBs; 727609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint MaxPicNum; 728609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint CurrPicNum; 729609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int QSy; /* 26+pic_init_qp_minus26+slice_qs_delta */ 730609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int FilterOffsetA; 731609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int FilterOffsetB; 732609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint MapUnitsInSliceGroup0; /* Min(slie_group_change_cycle*SliceGroupChangeRate,PicSizeInMapUnits) */ 733609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* dec_ref_pic_marking */ 734609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int MaxLongTermFrameIdx; 735609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int LongTermFrameIdx; 736609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 737609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* POC related variables */ 738609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*bool*/ 739609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint mem_mgr_ctrl_eq_5; /* if memory_management_control_operation equal to 5 flag */ 740609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicOrderCnt; 741609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int BottomFieldOrderCnt, TopFieldOrderCnt; 742609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* POC mode 0 */ 743609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int prevPicOrderCntMsb; 744609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint prevPicOrderCntLsb; 745609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int PicOrderCntMsb; 746609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* POC mode 1 */ 747609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int prevFrameNumOffset, FrameNumOffset; 748609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber uint prevFrameNum; 749609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int absFrameNum; 750609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int picOrderCntCycleCnt, frameNumInPicOrderCntCycle; 751609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int expectedDeltaPerPicOrderCntCycle; 752609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int expectedPicOrderCnt; 753609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 754609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* FMO */ 755609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int *MbToSliceGroupMap; /* to be re-calculate at the beginning */ 756609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 757609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* ref pic list */ 758609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureData *RefPicList0[MAX_REF_PIC_LIST]; /* list 0 */ 759609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCPictureData *RefPicList1[MAX_REF_PIC_LIST]; /* list 1 */ 760609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCFrameStore *refFrameList0ShortTerm[32]; 761609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCFrameStore *refFrameList1ShortTerm[32]; 762609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber AVCFrameStore *refFrameListLongTerm[32]; 763609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int refList0Size; 764609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int refList1Size; 765609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 766609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* slice data semantics*/ 767609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int mb_skip_run; /* ue(v) */ 768609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /*uint mb_skip_flag;*/ /* ae(v) */ 769609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* uint end_of_slice_flag;*//* ae(v) */ 770609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /***********************************************/ 771609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 772609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber /* function pointers */ 773609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int (*is_short_ref)(AVCPictureData *s); 774609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber int (*is_long_ref)(AVCPictureData *s); 775609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 776609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCCommonObj; 777609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 778609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 779609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberCommonly used constant arrays. 780609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll 781609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 782609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 783609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberZigzag scan from 1-D to 2-D. */ 784609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 ZZ_SCAN[16] = {0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15}; 785609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* Zigzag scan from 1-D to 2-D output to block[24][16]. */ 786609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 ZZ_SCAN_BLOCK[16] = {0, 1, 16, 32, 17, 2, 3, 18, 33, 48, 49, 34, 19, 35, 50, 51}; 787609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 788609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 789609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberFrom zigzag to raster for luma DC value */ 790609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 ZIGZAG2RASTERDC[16] = {0, 4, 64, 128, 68, 8, 12, 72, 132, 192, 196, 136, 76, 140, 200, 204}; 791609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 792609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 793609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 794609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberMapping from coding scan block indx to raster scan block index */ 795609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int blkIdx2blkX[16] = {0, 1, 0, 1, 2, 3, 2, 3, 0, 1, 0, 1, 2, 3, 2, 3}; 796609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int blkIdx2blkY[16] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; 797609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** from [blk8indx][blk4indx] to raster scan index */ 798609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int blkIdx2blkXY[4][4] = {{0, 1, 4, 5}, {2, 3, 6, 7}, {8, 9, 12, 13}, {10, 11, 14, 15}}; 799609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 800609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* 801609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberAvailability of the neighboring top-right block relative to the current block. */ 802609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int BlkTopRight[16] = {2, 2, 2, 3, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0}; 803609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 804609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 805609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberTable 8-13 Specification of QPc as a function of qPI. */ 806609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 mapQPi2QPc[52] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 807609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 808609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 37, 37, 37, 38, 38, 38, 39, 39, 39, 39 809609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 810609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 811609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 812609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberSee 8.5.5 equation (8-252 and 8-253) the definition of v matrix. */ 813609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* in zigzag scan */ 814609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int dequant_coefres[6][16] = 815609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 816609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {10, 13, 13, 10, 16, 10, 13, 13, 13, 13, 16, 10, 16, 13, 13, 16}, 817609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {11, 14, 14, 11, 18, 11, 14, 14, 14, 14, 18, 11, 18, 14, 14, 18}, 818609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {13, 16, 16, 13, 20, 13, 16, 16, 16, 16, 20, 13, 20, 16, 16, 20}, 819609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {14, 18, 18, 14, 23, 14, 18, 18, 18, 18, 23, 14, 23, 18, 18, 23}, 820609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {16, 20, 20, 16, 25, 16, 20, 20, 20, 20, 25, 16, 25, 20, 20, 25}, 821609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {18, 23, 23, 18, 29, 18, 23, 23, 23, 23, 29, 18, 29, 23, 23, 29} 822609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber}; 823609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 824609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 825609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberFrom jm7.6 block.c. (in zigzag scan) */ 826609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int quant_coef[6][16] = 827609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{ 828609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {13107, 8066, 8066, 13107, 5243, 13107, 8066, 8066, 8066, 8066, 5243, 13107, 5243, 8066, 8066, 5243}, 829609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {11916, 7490, 7490, 11916, 4660, 11916, 7490, 7490, 7490, 7490, 4660, 11916, 4660, 7490, 7490, 4660}, 830609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {10082, 6554, 6554, 10082, 4194, 10082, 6554, 6554, 6554, 6554, 4194, 10082, 4194, 6554, 6554, 4194}, 831609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {9362, 5825, 5825, 9362, 3647, 9362, 5825, 5825, 5825, 5825, 3647, 9362, 3647, 5825, 5825, 3647}, 832609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {8192, 5243, 5243, 8192, 3355, 8192, 5243, 5243, 5243, 5243, 3355, 8192, 3355, 5243, 5243, 3355}, 833609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber {7282, 4559, 4559, 7282, 2893, 7282, 4559, 4559, 4559, 4559, 2893, 7282, 2893, 4559, 4559, 2893} 834609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber}; 835609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 836609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 837609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberConvert scan from raster scan order to block decoding order and 838609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberfrom block decoding order to raster scan order. Same table!!! 839609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/ 840609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 ras2dec[16] = {0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15}; 841609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 842609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* mapping from level_idc to index map */ 843609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 mapLev2Idx[61] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 844609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 0, 1, 2, 3, 255, 255, 255, 255, 255, 255, 845609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 4, 5, 6, 255, 255, 255, 255, 255, 255, 255, 846609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 7, 8, 9, 255, 255, 255, 255, 255, 255, 255, 847609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 10, 11, 12, 255, 255, 255, 255, 255, 255, 255, 848609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 13, 14, 255, 255, 255, 255, 255, 255, 255, 255 849609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 850609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map back from index to Level IDC */ 851609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint8 mapIdx2Lev[MAX_LEVEL_IDX] = {10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51}; 852609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 853609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** 854609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberfrom the index map to the MaxDPB value times 2 */ 855609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int32 MaxDPBX2[MAX_LEVEL_IDX] = {297, 675, 1782, 1782, 1782, 3564, 6075, 6075, 856609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 13500, 15360, 24576, 24576, 24576, 82620, 138240 857609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 858609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 859609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map index to the max frame size */ 860609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int MaxFS[MAX_LEVEL_IDX] = {99, 396, 396, 396, 396, 792, 1620, 1620, 3600, 5120, 861609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 8192, 8192, 8192, 22080, 36864 862609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 863609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 864609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map index to max MB processing rate */ 865609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int32 MaxMBPS[MAX_LEVEL_IDX] = {1485, 3000, 6000, 11880, 11880, 19800, 20250, 40500, 866609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 108000, 216000, 245760, 245760, 491520, 589824, 983040 867609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 868609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 869609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map index to max video bit rate */ 870609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint32 MaxBR[MAX_LEVEL_IDX] = {64, 192, 384, 768, 2000, 4000, 4000, 10000, 14000, 20000, 871609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 20000, 50000, 50000, 135000, 240000 872609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 873609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 874609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map index to max CPB size */ 875609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static uint32 MaxCPB[MAX_LEVEL_IDX] = {175, 500, 1000, 2000, 2000, 4000, 4000, 10000, 14000, 876609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 20000, 25000, 62500, 62500, 135000, 240000 877609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber }; 878609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 879609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* map index to max vertical MV range */ 880609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberconst static int MaxVmvR[MAX_LEVEL_IDX] = {64, 128, 128, 128, 128, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512}; 881609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber 882609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif /* _AVCINT_COMMON_H_ */ 883