14a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* ------------------------------------------------------------------ 24a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Copyright (C) 1998-2009 PacketVideo 34a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * 44a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 54a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * you may not use this file except in compliance with the License. 64a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * You may obtain a copy of the License at 74a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * 84a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 94a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * 104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Unless required by applicable law or agreed to in writing, software 114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * express or implied. 144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * See the License for the specific language governing permissions 154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * and limitations under the License. 164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * ------------------------------------------------------------------- 174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber */ 184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis file contains common code shared between AVC decoder and AVC encoder for 204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberinternal use only. 214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifndef AVCINT_COMMON_H_INCLUDED 254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVCINT_COMMON_H_INCLUDED 264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifndef AVCAPI_COMMON_H_INCLUDED 284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#include "avcapi_common.h" 294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif 304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifndef TRUE 334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define TRUE 1 344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define FALSE 0 354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif 364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMathematic functions defined in subclause 5.7. 414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberCan be replaced with assembly instructions for speedup. 424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_ABS(x) (((x)<0)? -(x) : (x)) 454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_SIGN(x) (((x)<0)? -1 : 1) 464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_SIGN0(x) (((x)<0)? -1 : (((x)>0) ? 1 : 0)) 474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_MAX(x,y) ((x)>(y)? (x):(y)) 484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_MIN(x,y) ((x)<(y)? (x):(y)) 494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_MEDIAN(A,B,C) ((A) > (B) ? ((A) < (C) ? (A) : (B) > (C) ? (B) : (C)): (B) < (C) ? (B) : (C) > (A) ? (C) : (A)) 504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_CLIP3(a,b,x) (AVC_MAX(a,AVC_MIN(x,b))) /* clip x between a and b */ 514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_CLIP(x) AVC_CLIP3(0,255,x) 524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_FLOOR(x) ((int)(x)) 534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_RASTER_SCAN(x,y,n) ((x)+(y)*(n)) 544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_ROUND(x) (AVC_SIGN(x)*AVC_FLOOR(AVC_ABS(x)+0.5)) 554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVC_INVERSE_RASTER_SCAN(a,b,c,d,e) (((e)==0)? (((a)%((d)/(b)))*(b)): (((a)/((d)/(b)))*(c))) 564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* a:block address, b:block width, c:block height, d:total_width, e:x or y coordinate */ 574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define DEFAULT_ATTR 0 /* default memory attribute */ 594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define FAST_MEM_ATTR 1 /* fast memory attribute */ 604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* This section is for definition of constants. */ 634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MB_SIZE 16 644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define BLOCK_SIZE 4 654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define EMULATION_PREVENTION_THREE_BYTE 0x3 664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define NUM_PIXELS_IN_MB (24*16) 674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define NUM_BLKS_IN_MB 24 684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVCNumI4PredMode 9 704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVCNumI16PredMode 4 714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVCNumIChromaMode 4 724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* constants used in the structures below */ 744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAXIMUMVALUEOFcpb_cnt 32 /* used in HRDParams */ 754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE 255 /* used in SeqParamSet */ 764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_NUM_SLICE_GROUP 8 /* used in PicParamSet */ 774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_REF_PIC_LIST_REORDERING 32 /* 32 is maximum according to Annex A, SliceHeader */ 784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_DEC_REF_PIC_MARKING 64 /* 64 is the maximum possible given the max num ref pictures to 31. */ 794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_FS (16+1) /* pre-defined size of frame store array */ 804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_LEVEL_IDX 15 /* only 15 levels defined for now */ 814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MAX_REF_PIC_LIST 33 /* max size of the RefPicList0 and RefPicList1 */ 824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberArchitectural related macros. 864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifdef USE_PRED_BLOCK 894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define MB_BASED_DEBLOCK 904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif 914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberPicture type, PV created. 944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_FRAME = 3 994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCPictureType; 1004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis slice type follows Table 7-3. The bottom 5 items may not needed. 1034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P_SLICE = 0, 1084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_B_SLICE = 1, 1094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I_SLICE = 2, 1104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SP_SLICE = 3, 1114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SI_SLICE = 4, 1124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P_ALL_SLICE = 5, 1134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_B_ALL_SLICE = 6, 1144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I_ALL_SLICE = 7, 1154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SP_ALL_SLICE = 8, 1164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SI_ALL_SLICE = 9 1174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCSliceType; 1184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberTypes of the macroblock and partition. PV Created. 1214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* intra */ 1264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4, 1274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I16, 1284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I_PCM, 1294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SI4, 1304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* inter for both P and B*/ 1324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_BDirect16, 1334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P16, 1344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P16x8, 1354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P8x16, 1364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P8, 1374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_P8ref0, 1384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_SKIP 1394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCMBMode; 1404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberEnumeration for sub-macroblock mode, interpreted from sub_mb_type. 1434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* for sub-partition mode */ 1484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_BDirect8, 1494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_8x8, 1504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_8x4, 1514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_4x8, 1524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_4x4 1534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCSubMBMode; 1544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMode of prediction of partition or sub-partition. PV Created. 1574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberDo not change the order!!! Used in table look-up mode prediction in 1584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubervlc.c. 1594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Pred_L0 = 0, 1644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Pred_L1, 1654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_BiPred, 1664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Direct 1674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCPredMode; 1684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMode of intra 4x4 prediction. Table 8-2 1724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Vertical = 0, 1774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Horizontal, 1784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_DC, 1794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Diagonal_Down_Left, 1804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Diagonal_Down_Right, 1814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Vertical_Right, 1824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Horizontal_Down, 1834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Vertical_Left, 1844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I4_Horizontal_Up 1854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCIntra4x4PredMode; 1864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 1884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMode of intra 16x16 prediction. Table 8-3 1894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 1904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 1914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 1924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 1934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I16_Vertical = 0, 1944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I16_Horizontal, 1954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I16_DC, 1964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_I16_Plane 1974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCIntra16x16PredMode; 1984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 1994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 2014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMode of intra chroma prediction. Table 8-4 2024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 2034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 2044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 2054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 2064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_IC_DC = 0, 2074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_IC_Horizontal, 2084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_IC_Vertical, 2094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_IC_Plane 2104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCIntraChromaPredMode; 2114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 2134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberType of residual going to residual_block_cavlc function, PV created. 2144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 2154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 2164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum 2174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 2184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Luma, 2194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Intra16DC, 2204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_Intra16AC, 2214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_ChromaDC, 2224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVC_ChromaAC 2234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCResidualType; 2244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 2274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains VUI parameters as specified in Annex E. 2284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSome variables may be removed from the structure if they are found to be useless to store. 2294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 2304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 2314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagHRDParams 2324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 2334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint cpb_cnt_minus1; /* ue(v), range 0..31 */ 2344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint bit_rate_scale; /* u(4) */ 2354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint cpb_size_scale; /* u(4) */ 2364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint32 bit_rate_value_minus1[MAXIMUMVALUEOFcpb_cnt];/* ue(v), range 0..2^32-2 */ 2374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint32 cpb_size_value_minus1[MAXIMUMVALUEOFcpb_cnt]; /* ue(v), range 0..2^32-2 */ 2384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint cbr_flag[MAXIMUMVALUEOFcpb_cnt]; /* u(1) */ 2394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint initial_cpb_removal_delay_length_minus1; /* u(5), default 23 */ 2404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint cpb_removal_delay_length_minus1; /* u(5), default 23 */ 2414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint dpb_output_delay_length_minus1; /* u(5), default 23 */ 2424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint time_offset_length; /* u(5), default 24 */ 2434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCHRDParams; 2444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 2464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains VUI parameters as specified in Annex E. 2474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSome variables may be removed from the structure if they are found to be useless to store. 2484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 2494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 2504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagVUIParam 2514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 2524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint aspect_ratio_info_present_flag; /* u(1) */ 2534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint aspect_ratio_idc; /* u(8), table E-1 */ 2544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint sar_width; /* u(16) */ 2554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint sar_height; /* u(16) */ 2564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint overscan_info_present_flag; /* u(1) */ 2574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint overscan_appropriate_flag; /* u(1) */ 2584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint video_signal_type_present_flag; /* u(1) */ 2594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint video_format; /* u(3), Table E-2, default 5, unspecified */ 2604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint video_full_range_flag; /* u(1) */ 2614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint colour_description_present_flag; /* u(1) */ 2624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint colour_primaries; /* u(8), Table E-3, default 2, unspecified */ 2634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint transfer_characteristics; /* u(8), Table E-4, default 2, unspecified */ 2644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint matrix_coefficients; /* u(8), Table E-5, default 2, unspecified */ 2654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint chroma_location_info_present_flag; /* u(1) */ 2664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint chroma_sample_loc_type_top_field; /* ue(v), Fig. E-1range 0..5, default 0 */ 2674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint chroma_sample_loc_type_bottom_field; /* ue(v) */ 2684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint timing_info_present_flag; /* u(1) */ 2694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_units_in_tick; /* u(32), must be > 0 */ 2704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint time_scale; /* u(32), must be > 0 */ 2714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint fixed_frame_rate_flag; /* u(1), Eq. C-13 */ 2724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint nal_hrd_parameters_present_flag; /* u(1) */ 2734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCHRDParams nal_hrd_parameters; /* hrd_paramters */ 2744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint vcl_hrd_parameters_present_flag; /* u(1) */ 2754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCHRDParams vcl_hrd_parameters; /* hrd_paramters */ 2764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if ((nal_hrd_parameters_present_flag || (vcl_hrd_parameters_present_flag)) */ 2774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint low_delay_hrd_flag; /* u(1) */ 2784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_struct_present_flag; 2794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint bitstream_restriction_flag; /* u(1) */ 2804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint motion_vectors_over_pic_boundaries_flag; /* u(1) */ 2814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint max_bytes_per_pic_denom; /* ue(v), default 2 */ 2824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint max_bits_per_mb_denom; /* ue(v), range 0..16, default 1 */ 2834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint log2_max_mv_length_vertical; /* ue(v), range 0..16, default 16 */ 2844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint log2_max_mv_length_horizontal; /* ue(v), range 0..16, default 16 */ 2854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint max_dec_frame_reordering; /* ue(v) */ 2864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint max_dec_frame_buffering; /* ue(v) */ 2874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCVUIParams; 2884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 2914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains information in a sequence parameter set NAL. 2924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSome variables may be removed from the structure if they are found to be useless to store. 2934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 2944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 2954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagSeqParamSet 2964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 2974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint Valid; /* indicates the parameter set is valid */ 2984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 2994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint profile_idc; /* u(8) */ 3004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint constrained_set0_flag; /* u(1) */ 3014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint constrained_set1_flag; /* u(1) */ 3024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint constrained_set2_flag; /* u(1) */ 3034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint constrained_set3_flag; /* u(1) */ 3044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint level_idc; /* u(8) */ 3054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint seq_parameter_set_id; /* ue(v), range 0..31 */ 3064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint log2_max_frame_num_minus4; /* ue(v), range 0..12 */ 3074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_order_cnt_type; /* ue(v), range 0..2 */ 3084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( pic_order_cnt_type == 0 ) */ 3094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint log2_max_pic_order_cnt_lsb_minus4; /* ue(v), range 0..12 */ 3104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* else if( pic_order_cnt_type == 1 ) */ 3114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint delta_pic_order_always_zero_flag; /* u(1) */ 3124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 offset_for_non_ref_pic; /* se(v) */ 3134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 offset_for_top_to_bottom_field; /* se(v) */ 3144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_frames_in_pic_order_cnt_cycle; /* ue(v) , range 0..255 */ 3154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) */ 3164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 offset_for_ref_frame[MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE]; /* se(v) */ 3174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_frames; /* ue(v), range 0..16 */ 3184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint gaps_in_frame_num_value_allowed_flag; /* u(1) */ 3194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_width_in_mbs_minus1; /* ue(v) */ 3204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_height_in_map_units_minus1; /* ue(v) */ 3214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_mbs_only_flag; /* u(1) */ 3224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( !frame_mbs_only_flag ) */ 3234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mb_adaptive_frame_field_flag; /* u(1) */ 3244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint direct_8x8_inference_flag; /* u(1), must be 1 when frame_mbs_only_flag is 0 */ 3254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_cropping_flag; /* u(1) */ 3264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( frmae_cropping_flag) */ 3274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_crop_left_offset; /* ue(v) */ 3284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_crop_right_offset; /* ue(v) */ 3294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_crop_top_offset; /* ue(v) */ 3304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_crop_bottom_offset; /* ue(v) */ 3314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint vui_parameters_present_flag; /* u(1) */ 3324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber// uint nal_hrd_parameters_present_flag; 3334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber// uint vcl_hrd_parameters_present_flag; 3344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber// AVCHRDParams *nal_hrd_parameters; 3354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber// AVCHRDParams *vcl_hrd_parameters; 3364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCVUIParams vui_parameters; /* AVCVUIParam */ 3374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCSeqParamSet; 3384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 3394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 3404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains information in a picture parameter set NAL. 3414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSome variables may be removed from the structure if they are found to be useless to store. 3424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 3434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 3444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagPicParamSet 3454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 3464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_parameter_set_id; /* ue(v), range 0..255 */ 3474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint seq_parameter_set_id; /* ue(v), range 0..31 */ 3484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint entropy_coding_mode_flag; /* u(1) */ 3494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_order_present_flag; /* u(1) */ 3504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_slice_groups_minus1; /* ue(v), range in Annex A */ 3514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( num_slice_groups_minus1 > 0) */ 3524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_group_map_type; /* ue(v), range 0..6 */ 3534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( slice_group_map_type = = 0 ) */ 3544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* for(0:1:num_slice_groups_minus1) */ 3554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint run_length_minus1[MAX_NUM_SLICE_GROUP]; /* ue(v) */ 3564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* else if( slice_group_map_type = = 2 ) */ 3574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* for(0:1:num_slice_groups_minus1-1) */ 3584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint top_left[MAX_NUM_SLICE_GROUP-1]; /* ue(v) */ 3594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint bottom_right[MAX_NUM_SLICE_GROUP-1]; /* ue(v) */ 3604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* else if( slice_group_map_type = = 3 || 4 || 5 */ 3614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_group_change_direction_flag; /* u(1) */ 3624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_group_change_rate_minus1; /* ue(v) */ 3634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* else if( slice_group_map_type = = 6 ) */ 3644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_size_in_map_units_minus1; /* ue(v) */ 3654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* for(0:1:pic_size_in_map_units_minus1) */ 3664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint *slice_group_id; /* complete MBAmap u(v) */ 3674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_idx_l0_active_minus1; /* ue(v), range 0..31 */ 3684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_idx_l1_active_minus1; /* ue(v), range 0..31 */ 3694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint weighted_pred_flag; /* u(1) */ 3704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint weighted_bipred_idc; /* u(2), range 0..2 */ 3714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pic_init_qp_minus26; /* se(v), range -26..25 */ 3724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pic_init_qs_minus26; /* se(v), range -26..25 */ 3734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int chroma_qp_index_offset; /* se(v), range -12..12 */ 3744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint deblocking_filter_control_present_flag; /* u(1) */ 3754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint constrained_intra_pred_flag; /* u(1) */ 3764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint redundant_pic_cnt_present_flag; /* u(1) */ 3774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCPicParamSet; 3784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 3794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 3804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 3814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains slice header information. 3824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSome variables may be removed from the structure if they are found to be useless to store. 3834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 3844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 3854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagSliceHeader 3864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 3874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint first_mb_in_slice; /* ue(v) */ 3884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCSliceType slice_type; /* ue(v), Table 7-3, range 0..9 */ 3894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_parameter_set_id; /* ue(v), range 0..255 */ 3904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint frame_num; /* u(v), see log2max_frame_num_minus4 */ 3914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if( !frame_mbs_only_flag) */ 3924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint field_pic_flag; /* u(1) */ 3934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(field_pic_flag) */ 3944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint bottom_field_flag; /* u(1) */ 3954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(nal_unit_type == 5) */ 3964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint idr_pic_id; /* ue(v), range 0..65535 */ 3974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(pic_order_cnt_type==0) */ 3984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint pic_order_cnt_lsb; /* u(v), range 0..MaxPicOrderCntLsb-1 */ 3994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(pic_order_present_flag && !field_pic_flag) */ 4004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 delta_pic_order_cnt_bottom; /* se(v) */ 4014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(pic_order_cnt_type==1 && !delta_pic_order_always_zero_flag) */ 4024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(pic_order_present_flag && !field_pic_flag) */ 4034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 delta_pic_order_cnt[2]; 4044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(redundant_pic_cnt_present_flag) */ 4054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint redundant_pic_cnt; /* ue(v), range 0..127 */ 4064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(slice_type == B) */ 4074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint direct_spatial_mv_pred_flag; /* u(1) */ 4084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(slice_type == P || slice_type==SP || slice_type==B) */ 4094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_idx_active_override_flag; /* u(1) */ 4104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(num_ref_idx_active_override_flag) */ 4114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_idx_l0_active_minus1; /* ue(v) */ 4124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(slie_type == B) */ 4134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint num_ref_idx_l1_active_minus1; /* ue(v) */ 4144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* ref_pic_list_reordering() */ 4164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint ref_pic_list_reordering_flag_l0; /* u(1) */ 4174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint reordering_of_pic_nums_idc_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v), range 0..3 */ 4184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint abs_diff_pic_num_minus1_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 4194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint long_term_pic_num_l0[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 4204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint ref_pic_list_reordering_flag_l1; /* u(1) */ 4214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint reordering_of_pic_nums_idc_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v), range 0..3 */ 4224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint abs_diff_pic_num_minus1_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 4234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint long_term_pic_num_l1[MAX_REF_PIC_LIST_REORDERING]; /* ue(v) */ 4244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* end ref_pic_list_reordering() */ 4264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(nal_ref_idc!=0) */ 4274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* dec_ref_pic_marking() */ 4284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint no_output_of_prior_pics_flag; /* u(1) */ 4294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint long_term_reference_flag; /* u(1) */ 4304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint adaptive_ref_pic_marking_mode_flag; /* u(1) */ 4314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint memory_management_control_operation[MAX_DEC_REF_PIC_MARKING]; /* ue(v), range 0..6 */ 4324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint difference_of_pic_nums_minus1[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 4334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint long_term_pic_num[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 4344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint long_term_frame_idx[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 4354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint max_long_term_frame_idx_plus1[MAX_DEC_REF_PIC_MARKING]; /* ue(v) */ 4364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* end dec_ref_pic_marking() */ 4374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(entropy_coding_mode_flag && slice_type!=I && slice_type!=SI) */ 4384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint cabac_init_idc; /* ue(v), range 0..2 */ 4394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int slice_qp_delta; /* se(v), range 0..51 */ 4404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(slice_type==SP || slice_type==SI) */ 4414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(slice_type==SP) */ 4424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint sp_for_switch_flag; /* u(1) */ 4434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int slice_qs_delta; /* se(v) */ 4444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(deblocking_filter_control_present_flag)*/ 4464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint disable_deblocking_filter_idc; /* ue(v), range 0..2 */ 4474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(disable_deblocking_filter_idc!=1) */ 4484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int slice_alpha_c0_offset_div2; /* se(v), range -6..6, default 0 */ 4494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int slice_beta_offset_div_2; /* se(v), range -6..6, default 0 */ 4504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if(num_slice_groups_minus1>0 && slice_group_map_type>=3 && slice_group_map_type<=5)*/ 4514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_group_change_cycle; /* u(v), use ceil(log2(PicSizeInMapUnits/SliceGroupChangeRate + 1)) bits*/ 4524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCSliceHeader; 4544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 4564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis struct contains information about the neighboring pixel. 4574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 4584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 4594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagPixPos 4604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 4614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int available; 4624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mb_addr; /* macroblock address of the current pixel, see below */ 4634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int x; /* x,y positions of current pixel relative to the macroblock mb_addr */ 4644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int y; 4654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pos_x; /* x,y positions of current pixel relative to the picture. */ 4664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pos_y; 4674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCPixelPos; 4684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagNeighborAvailability 4704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 4714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int left; 4724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int top; /* macroblock address of the current pixel, see below */ 4734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int top_right; /* x,y positions of current pixel relative to the macroblock mb_addr */ 4744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCNeighborAvailability; 4754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 4784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains picture data and related information necessary to be used as 4794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberreference frame. 4804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 4814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 4824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagPictureData 4834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 4844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint16 RefIdx; /* index used for reference frame */ 4854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *Sl; /* derived from base_dpb in AVCFrameStore */ 4864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *Scb; /* for complementary fields, YUV are interlaced */ 4874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *Scr; /* Sl of top_field and bottom_fields will be one line apart and the 4884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber stride will be 2 times the width. */ 4894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* For non-complementary field, the above still applies. A special 4904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber output formatting is required. */ 4914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* Then, necessary variables that need to be stored */ 4934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureType picType; /* frame, top-field or bot-field */ 4944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 4954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint isReference; 4964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 4974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint isLongTerm; 4984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicOrderCnt; 4994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicNum; 5004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int LongTermPicNum; 5014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int width; /* how many pixel per line */ 5034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int height;/* how many line */ 5044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pitch; /* how many pixel between the line */ 5054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint padded; /* flag for being padded */ 5074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCPictureData; 5094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 5114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains information for frame storage. 5124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 5134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 5144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagFrameStore 5154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 5164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *base_dpb; /* base pointer for the YCbCr */ 5174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int IsReference; /* 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used */ 5194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int IsLongTerm; /* 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used */ 5204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if IsLongTerm is true, IsReference can be ignored. */ 5214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* if IsReference is true, IsLongterm will be checked for short-term or long-term. */ 5224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* IsUsed must be true to enable the validity of IsReference and IsLongTerm */ 5234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int IsOutputted; /* has it been outputted via AVCDecGetOutput API, then don't output it again, 5254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber wait until it is returned. */ 5264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureData frame; 5274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int FrameNum; 5294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int FrameNumWrap; 5304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int LongTermFrameIdx; 5314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicOrderCnt; /* of the frame, smaller of the 2 fields */ 5324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCFrameStore; 5344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 5364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure maintains the actual memory for the decoded picture buffer (DPB) which is 5374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberallocated at the beginning according to profile/level. 5384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberOnce decoded_picture_buffer is allocated, Sl,Scb,Scr in 5394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberAVCPictureData structure just point to the address in decoded_picture_buffer. 5404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberused_size maintains the used space. 5414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberNOTE:: In order to maintain contiguous memory space, memory equal to a single frame is 5424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberassigned at a time. Two opposite fields reside in the same frame memory. 5434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber |-------|---|---|---|xxx|-------|xxx|---|-------| decoded_picture_buffer 5454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber frame top bot top frame bot frame 5464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 0 1 1 2 3 4 5 5474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber bot 2 and top 4 do not exist, the memory is not used. 5494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 5514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 5524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagDecPicBuffer 5534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 5544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *decoded_picture_buffer; /* actual memory */ 5554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint32 dpb_size; /* size of dpb in bytes */ 5564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint32 used_size; /* used size */ 5574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber struct tagFrameStore *fs[MAX_FS]; /* list of frame stored, actual buffer */ 5584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int num_fs; /* size of fs */ 5594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCDecPicBuffer; 5614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 5644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains macroblock related variables. 5654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 5664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 5674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagMacroblock 5684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 5694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCIntraChromaPredMode intra_chroma_pred_mode; /* ue(v) */ 5704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 mvL0[16]; /* motion vectors, 16 bit packed (x,y) per element */ 5724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int32 mvL1[16]; 5734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int16 ref_idx_L0[4]; 5744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int16 ref_idx_L1[4]; 5754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint16 RefIdx[4]; /* ref index, has value of AVCPictureData->RefIdx */ 5764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* stored data */ 5774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 5784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mb_intra; /* intra flag */ 5794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 5804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mb_bottom_field; 5814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCMBMode mbMode; /* type of MB prediction */ 5834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCSubMBMode subMbMode[4]; /* for each 8x8 partition */ 5844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint CBP; /* CodeBlockPattern */ 5864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCIntra16x16PredMode i16Mode; /* Intra16x16PredMode */ 5874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCIntra4x4PredMode i4Mode[16]; /* Intra4x4PredMode, in raster scan order */ 5884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int NumMbPart; /* number of partition */ 5894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPredMode MBPartPredMode[4][4]; /* prediction mode [MBPartIndx][subMBPartIndx] */ 5904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int MbPartWidth; 5914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int MbPartHeight; 5924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int NumSubMbPart[4]; /* for each 8x8 partition */ 5934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int SubMbPartWidth[4]; /* for each 8x8 partition */ 5944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int SubMbPartHeight[4]; /* for each 8x8 partition */ 5954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 nz_coeff[NUM_BLKS_IN_MB]; /* [blk_y][blk_x], Chroma is [4..5][0...3], see predict_nnz() function */ 5974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 5984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPy; /* Luma QP */ 5994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPc; /* Chroma QP */ 6004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QSc; /* Chroma QP S-picture */ 6014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int slice_id; // MC slice 6034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCMacroblock; 6044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 6074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains common internal variables between the encoder and decoder 6084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubersuch that some functions can be shared among them. 6094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 6104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 6114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagCommonObj 6124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 6134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* put these 2 up here to make sure they are word-aligned */ 6144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int16 block[NUM_PIXELS_IN_MB]; /* for transformed residue coefficient */ 6154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pred_block; /* pointer to prediction block, could point to a frame */ 6164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifdef USE_PRED_BLOCK 6174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 pred[688]; /* for prediction */ 6184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* Luma [0-399], Cb [400-543], Cr[544-687] */ 6194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif 6204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int pred_pitch; /* either equal to 20 or to frame pitch */ 6214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* temporary buffers for intra prediction */ 6234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* these variables should remain inside fast RAM */ 6244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifdef MB_BASED_DEBLOCK 6254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *intra_pred_top; /* a row of pixel for intra prediction */ 6264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_left[17]; /* a column of pixel for intra prediction */ 6274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *intra_pred_top_cb; 6284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_left_cb[9]; 6294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *intra_pred_top_cr; 6304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_left_cr[9]; 6314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif 6324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* pointer to the prediction area for intra prediction */ 6334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_top; /* pointer to the top intra prediction value */ 6344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_left; /* pointer to the left intra prediction value */ 6354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_topleft; /* the [-1,-1] neighboring pixel */ 6364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_top_cb; 6374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_left_cb; 6384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_topleft_cb; 6394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_top_cr; 6404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 *pintra_pred_left_cr; 6414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint8 intra_pred_topleft_cr; 6424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPy; 6444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPc; 6454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPy_div_6; 6464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPy_mod_6; 6474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPc_div_6; 6484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QPc_mod_6; 6494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /**** nal_unit ******/ 6504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* previously in AVCNALUnit format */ 6514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint NumBytesInRBSP; 6524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int forbidden_bit; 6534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int nal_ref_idc; 6544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCNalUnitType nal_unit_type; 6554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCNalUnitType prev_nal_unit_type; 6564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 6574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_data_partitioning; /* flag when nal_unit_type is between 2 and 4 */ 6584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /**** ******** ******/ 6594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCSliceType slice_type; 6604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCDecPicBuffer *decPicBuf; /* decoded picture buffer */ 6614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCSeqParamSet *currSeqParams; /* the currently used one */ 6634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPicParamSet *currPicParams; /* the currently used one */ 6654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint seq_parameter_set_id; 6664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* slice header */ 6674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCSliceHeader *sliceHdr; /* slice header param syntax variables */ 6684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureData *currPic; /* pointer to current picture */ 6704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCFrameStore *currFS; /* pointer to current frame store */ 6714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureType currPicType; /* frame, top-field or bot-field */ 6724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 6734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint newPic; /* flag for new picture */ 6744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint newSlice; /* flag for new slice */ 6754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureData *prevRefPic; /* pointer to previous picture */ 6764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCMacroblock *mblock; /* array of macroblocks covering entire picture */ 6784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCMacroblock *currMB; /* pointer to current macroblock */ 6794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mbNum; /* number of current MB */ 6804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mb_x; /* x-coordinate of the current mbNum */ 6814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mb_y; /* y-coordinate of the current mbNum */ 6824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* For internal operation, scratch memory for MV, prediction, transform, etc.*/ 6844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint32 cbp4x4; /* each bit represent nonzero 4x4 block in reverse raster scan order */ 6854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* starting from luma, Cb and Cr, lsb toward msb */ 6864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mvd_l0[4][4][2]; /* [mbPartIdx][subMbPartIdx][compIdx], se(v) */ 6874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mvd_l1[4][4][2]; /* [mbPartIdx][subMbPartIdx][compIdx], se(v) */ 6884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mbAddrA, mbAddrB, mbAddrC, mbAddrD; /* address of neighboring MBs */ 6904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 6914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mbAvailA, mbAvailB, mbAvailC, mbAvailD; /* availability */ 6924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 6934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint intraAvailA, intraAvailB, intraAvailC, intraAvailD; /* for intra mode */ 6944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /***********************************************/ 6954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* The following variables are defined in the draft. */ 6964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* They may need to be stored in PictureData structure and used for reference. */ 6974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* In that case, just move or copy it to AVCDecPictureData structure. */ 6984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 6994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int padded_size; /* size of extra padding to a frame */ 7004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint MaxFrameNum; /*2^(log2_max_frame_num_minus4+4), range 0.. 2^16-1 */ 7024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint MaxPicOrderCntLsb; /*2^(log2_max_pic_order_cnt_lsb_minus4+4), 0..2^16-1 */ 7034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicWidthInMbs; /*pic_width_in_mbs_minus1+1 */ 7044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicWidthInSamplesL; /* PicWidthInMbs*16 */ 7054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicWidthInSamplesC; /* PicWIdthInMbs*8 */ 7064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicHeightInMapUnits; /* pic_height_in_map_units_minus1+1 */ 7074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicSizeInMapUnits; /* PicWidthInMbs*PicHeightInMapUnits */ 7084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint FrameHeightInMbs; /*(2-frame_mbs_only_flag)*PicHeightInMapUnits */ 7094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint SliceGroupChangeRate; /* slice_group_change_rate_minus1 + 1 */ 7114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* access unit */ 7134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint primary_pic_type; /* u(3), Table 7-2, kinda informative only */ 7144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* slice data partition */ 7164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint slice_id; /* ue(v) */ 7174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint UnusedShortTermFrameNum; 7194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PrevRefFrameNum; 7204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint MbaffFrameFlag; /* (mb_adaptive_frame_field_flag && !field_pic_flag) */ 7214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicHeightInMbs; /* FrameHeightInMbs/(1+field_pic_flag) */ 7224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicHeightInSamplesL; /* PicHeightInMbs*16 */ 7234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicHeightInSamplesC; /* PicHeightInMbs*8 */ 7244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint PicSizeInMbs; /* PicWidthInMbs*PicHeightInMbs */ 7254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint level_idc; 7264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int numMBs; 7274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint MaxPicNum; 7284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint CurrPicNum; 7294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int QSy; /* 26+pic_init_qp_minus26+slice_qs_delta */ 7304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int FilterOffsetA; 7314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int FilterOffsetB; 7324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint MapUnitsInSliceGroup0; /* Min(slie_group_change_cycle*SliceGroupChangeRate,PicSizeInMapUnits) */ 7334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* dec_ref_pic_marking */ 7344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int MaxLongTermFrameIdx; 7354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int LongTermFrameIdx; 7364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* POC related variables */ 7384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*bool*/ 7394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint mem_mgr_ctrl_eq_5; /* if memory_management_control_operation equal to 5 flag */ 7404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicOrderCnt; 7414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int BottomFieldOrderCnt, TopFieldOrderCnt; 7424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* POC mode 0 */ 7434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int prevPicOrderCntMsb; 7444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint prevPicOrderCntLsb; 7454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int PicOrderCntMsb; 7464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* POC mode 1 */ 7474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int prevFrameNumOffset, FrameNumOffset; 7484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber uint prevFrameNum; 7494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int absFrameNum; 7504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int picOrderCntCycleCnt, frameNumInPicOrderCntCycle; 7514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int expectedDeltaPerPicOrderCntCycle; 7524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int expectedPicOrderCnt; 7534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* FMO */ 7554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int *MbToSliceGroupMap; /* to be re-calculate at the beginning */ 7564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* ref pic list */ 7584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureData *RefPicList0[MAX_REF_PIC_LIST]; /* list 0 */ 7594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCPictureData *RefPicList1[MAX_REF_PIC_LIST]; /* list 1 */ 7604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCFrameStore *refFrameList0ShortTerm[32]; 7614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCFrameStore *refFrameList1ShortTerm[32]; 7624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber AVCFrameStore *refFrameListLongTerm[32]; 7634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int refList0Size; 7644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int refList1Size; 7654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* slice data semantics*/ 7674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int mb_skip_run; /* ue(v) */ 7684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /*uint mb_skip_flag;*/ /* ae(v) */ 7694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* uint end_of_slice_flag;*//* ae(v) */ 7704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /***********************************************/ 7714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber /* function pointers */ 7734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int (*is_short_ref)(AVCPictureData *s); 7744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber int (*is_long_ref)(AVCPictureData *s); 7754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCCommonObj; 7774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 7794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberCommonly used constant arrays. 7804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll 7814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 7824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 7834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberZigzag scan from 1-D to 2-D. */ 7844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 ZZ_SCAN[16] = {0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15}; 7854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* Zigzag scan from 1-D to 2-D output to block[24][16]. */ 7864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 ZZ_SCAN_BLOCK[16] = {0, 1, 16, 32, 17, 2, 3, 18, 33, 48, 49, 34, 19, 35, 50, 51}; 7874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 7894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberFrom zigzag to raster for luma DC value */ 7904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 ZIGZAG2RASTERDC[16] = {0, 4, 64, 128, 68, 8, 12, 72, 132, 192, 196, 136, 76, 140, 200, 204}; 7914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 7944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberMapping from coding scan block indx to raster scan block index */ 7954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int blkIdx2blkX[16] = {0, 1, 0, 1, 2, 3, 2, 3, 0, 1, 0, 1, 2, 3, 2, 3}; 7964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int blkIdx2blkY[16] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; 7974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** from [blk8indx][blk4indx] to raster scan index */ 7984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int blkIdx2blkXY[4][4] = {{0, 1, 4, 5}, {2, 3, 6, 7}, {8, 9, 12, 13}, {10, 11, 14, 15}}; 7994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* 8014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberAvailability of the neighboring top-right block relative to the current block. */ 8024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int BlkTopRight[16] = {2, 2, 2, 3, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0}; 8034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 8054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberTable 8-13 Specification of QPc as a function of qPI. */ 8064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas 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, 8074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 8084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 37, 37, 37, 38, 38, 38, 39, 39, 39, 39 8094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 8124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberSee 8.5.5 equation (8-252 and 8-253) the definition of v matrix. */ 8134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* in zigzag scan */ 8144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int dequant_coefres[6][16] = 8154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 8164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {10, 13, 13, 10, 16, 10, 13, 13, 13, 13, 16, 10, 16, 13, 13, 16}, 8174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {11, 14, 14, 11, 18, 11, 14, 14, 14, 14, 18, 11, 18, 14, 14, 18}, 8184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {13, 16, 16, 13, 20, 13, 16, 16, 16, 16, 20, 13, 20, 16, 16, 20}, 8194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {14, 18, 18, 14, 23, 14, 18, 18, 18, 18, 23, 14, 23, 18, 18, 23}, 8204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {16, 20, 20, 16, 25, 16, 20, 20, 20, 20, 25, 16, 25, 20, 20, 25}, 8214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {18, 23, 23, 18, 29, 18, 23, 23, 23, 23, 29, 18, 29, 23, 23, 29} 8224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber}; 8234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 8254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberFrom jm7.6 block.c. (in zigzag scan) */ 8264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int quant_coef[6][16] = 8274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{ 8284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {13107, 8066, 8066, 13107, 5243, 13107, 8066, 8066, 8066, 8066, 5243, 13107, 5243, 8066, 8066, 5243}, 8294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {11916, 7490, 7490, 11916, 4660, 11916, 7490, 7490, 7490, 7490, 4660, 11916, 4660, 7490, 7490, 4660}, 8304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {10082, 6554, 6554, 10082, 4194, 10082, 6554, 6554, 6554, 6554, 4194, 10082, 4194, 6554, 6554, 4194}, 8314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {9362, 5825, 5825, 9362, 3647, 9362, 5825, 5825, 5825, 5825, 3647, 9362, 3647, 5825, 5825, 3647}, 8324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {8192, 5243, 5243, 8192, 3355, 8192, 5243, 5243, 5243, 5243, 3355, 8192, 3355, 5243, 5243, 3355}, 8334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber {7282, 4559, 4559, 7282, 2893, 7282, 4559, 4559, 4559, 4559, 2893, 7282, 2893, 4559, 4559, 2893} 8344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber}; 8354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 8374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberConvert scan from raster scan order to block decoding order and 8384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberfrom block decoding order to raster scan order. Same table!!! 8394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/ 8404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 ras2dec[16] = {0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15}; 8414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* mapping from level_idc to index map */ 8434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 mapLev2Idx[61] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 8444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 0, 1, 2, 3, 255, 255, 255, 255, 255, 255, 8454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 4, 5, 6, 255, 255, 255, 255, 255, 255, 255, 8464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 7, 8, 9, 255, 255, 255, 255, 255, 255, 255, 8474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 10, 11, 12, 255, 255, 255, 255, 255, 255, 255, 8484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 13, 14, 255, 255, 255, 255, 255, 255, 255, 255 8494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map back from index to Level IDC */ 8514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint8 mapIdx2Lev[MAX_LEVEL_IDX] = {10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51}; 8524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** 8544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberfrom the index map to the MaxDPB value times 2 */ 8554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int32 MaxDPBX2[MAX_LEVEL_IDX] = {297, 675, 1782, 1782, 1782, 3564, 6075, 6075, 8564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 13500, 15360, 24576, 24576, 24576, 82620, 138240 8574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map index to the max frame size */ 8604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int MaxFS[MAX_LEVEL_IDX] = {99, 396, 396, 396, 396, 792, 1620, 1620, 3600, 5120, 8614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8192, 8192, 8192, 22080, 36864 8624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map index to max MB processing rate */ 8654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int32 MaxMBPS[MAX_LEVEL_IDX] = {1485, 3000, 6000, 11880, 11880, 19800, 20250, 40500, 8664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 108000, 216000, 245760, 245760, 491520, 589824, 983040 8674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map index to max video bit rate */ 8704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint32 MaxBR[MAX_LEVEL_IDX] = {64, 192, 384, 768, 2000, 4000, 4000, 10000, 14000, 20000, 8714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 20000, 50000, 50000, 135000, 240000 8724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map index to max CPB size */ 8754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static uint32 MaxCPB[MAX_LEVEL_IDX] = {175, 500, 1000, 2000, 2000, 4000, 4000, 10000, 14000, 8764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 20000, 25000, 62500, 62500, 135000, 240000 8774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber }; 8784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* map index to max vertical MV range */ 8804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberconst static int MaxVmvR[MAX_LEVEL_IDX] = {64, 128, 128, 128, 128, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512}; 8814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber 8824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif /* _AVCINT_COMMON_H_ */ 883