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