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