• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* The copyright in this software is being made available under the BSD
2  * License, included below. This software may be subject to other third party
3  * and contributor rights, including patent rights, and no such rights are
4  * granted under this license.
5  *
6  * Copyright (c) 2002-2016, Audio Video coding Standard Workgroup of China
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  *  * Redistributions of source code must retain the above copyright notice,
13  *    this list of conditions and the following disclaimer.
14  *  * Redistributions in binary form must reproduce the above copyright notice,
15  *    this list of conditions and the following disclaimer in the documentation
16  *    and/or other materials provided with the distribution.
17  *  * Neither the name of Audio Video coding Standard Workgroup of China
18  *    nor the names of its contributors maybe
19  *    used to endorse or promote products
20  *    derived from this software without
21  *    specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
27  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33  * THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
36 
37 
38 
39 /*
40  * File name: global.h
41  * Function:  global definitions for for AVS decoder.
42  *
43  */
44 
45 #ifndef _GLOBAL_H_
46 #define _GLOBAL_H_
47 
48 /* #include <stdio.h>                              //!< for FILE */
49 /* #include <stdlib.h> */
50 
51 #define AML
52 #define SANITY_CHECK
53 #undef NO_DISPLAY
54 
55 /* #include "define.h" */
56 #define RD      "19.2"
57 #define VERSION "19.2"
58 
59 #define RESERVED_PROFILE_ID      0x24
60 #define BASELINE_PICTURE_PROFILE 18
61 #define BASELINE_PROFILE         32  /* 0x20 */
62 #define BASELINE10_PROFILE       34  /* 0x22 */
63 
64 
65 #define SCENE_PROFILE            48  /* 0x21 */
66 #define SCENE10_PROFILE          50  /* 0x23 */
67 
68 #define TRACE                    0 /* !< 0:Trace off 1:Trace on */
69 
70 
71 /* Type definitions and file operation for Windows/Linux
72  * All file operations for windows are replaced with native (FILE *) operations
73  * Falei LUO (falei.luo@vipl.ict.ac.cn)
74  * */
75 
76 #define _FILE_OFFSET_BITS 64       /* for 64 bit fseeko */
77 #define fseek fseeko
78 
79 #define int16 int16_t
80 #define int64 int64_t
81 
82 /* ////////////////// bug fix ///////////////////////////// */
83 #define ALFSliceFix                        1
84 #define WRITENBIT_FIX                      1
85 #define FIX_PROFILE_LEVEL_DPB_RPS_1        1
86 #define FIX_PROFILE_LEVEL_DPB_RPS_2        1
87 #define FIX_RPS_PICTURE_REMOVE             1   /* flluo@pku.edu.cn */
88 #define Mv_Clip                            1   /* yuquanhe@hisilicon.com */
89 #define REMOVE_UNUSED                      1   /* yuquanhe@hisilicon.com */
90 #define SAO_Height_Fix                     1   /* yuquanhe@hisilicon.com */
91 #define B_BACKGROUND_Fix                   1   /* yuquanhe@hisilicon.com */
92 #define Check_Bitstream                    1   /* yuquanhe@hisilicon.com */
93 #define Wq_param_Clip                      1   /* yuquanhe@hisilicon.com */
94     /* luofalei flluo@pku.edu.cn , wlq15@mails.tsinghua.edu.cn ,
95     Longfei.Wang@mediatek.com */
96 #define RD1501_FIX_BG                      1
97     /* yuquanhe@hisilicon.com ; he-yuan.lin@mstarsemi.com */
98 #define Mv_Rang                            1
99      /* Longfei.Wang@mediatek.com ;fred.chiu@mediatek.com
100      jie1222.chen@samsung.com */
101 #define RD160_FIX_BG                       1
102      /* Y_K_Tu@novatek.com.tw, he-yuan.lin@mstarsemi.com,
103      victor.huang@montage-tech.com M4041 */
104 #define RD1601_FIX_BG                      1
105 #define SEQ_CHANGE_CHECKER                 1    /* he-yuan.lin@mstarsemi.com */
106 #define M4140_END_OF_SLICE_CHECKER         1    /* he-yuan.lin@mstarsemi.com */
107      /* wlq15@mails.tsinghua.edu.cn */
108 #define Mv_check_bug                       1
109 #define SAO_ASSERTION_FIX                  1    /* fred.chiu@mediatek.com */
110 #define FIELD_HORI_MV_NO_SCALE_FIX         1    /* fred.chiu@mediatek.com */
111 #define RD170_FIX_BG                       1
112 #define FIX_CHROMA_FIELD_MV_BK_DIST        1
113 #define FIX_LUMA_FIELD_MV_BK_DIST          1
114 #define FIX_CHROMA_FIELD_MV_CLIP           1
115 #if 1
116 #define FIX_FLUSH_DPB_BY_LF                1    /* fred.chiu@mediatek.com */
117 #define FIX_SEQ_END_FLUSH_DPB_BY_LF        1   /* fred.chiu@mediatek.com */
118 #else
119 #define FIX_FLUSH_DPB_BY_LF                0    /* fred.chiu@mediatek.com */
120 #define FIX_SEQ_END_FLUSH_DPB_BY_LF        0   /* fred.chiu@mediatek.com */
121 #endif
122 #define RD191_FIX_BUG                      1  /* yuquanhe@hsilicon.com */
123 #define SYM_MV_SCALE_FIX                   1/* peisong.chen@broadcom.com */
124 #define BUG_10BIT_REFINEQP                 0 /* wangzhenyu */
125 
126 
127 
128 #if RD191_FIX_BUG
129 #endif
130 
131 /************************
132  * AVS2 macros start
133  **************************/
134 
135 #define INTERLACE_CODING                   1
136 #if INTERLACE_CODING  /* M3531: MV scaling compensation */
137 /* Luma component */
138 #define HALF_PIXEL_COMPENSATION            1 /* common functions definition */
139 #define HALF_PIXEL_COMPENSATION_PMV        1 /* spacial MV prediction */
140 #define HALF_PIXEL_COMPENSATION_DIRECT     1 /* B direct mode */
141   /* MV derivation method 1, weighted P_skip mode */
142 #define HALF_PIXEL_COMPENSATION_M1         1
143   /* M1 related with mv-scaling function */
144 #define HALF_PIXEL_COMPENSATION_M1_FUCTION 1
145 #define HALF_PIXEL_COMPENSATION_MVD        1 /* MV scaling from FW->BW */
146 /* Chroma components */
147   /* chroma MV is scaled with luma MV for 4:2:0 format */
148 #define HALF_PIXEL_CHROMA                  1
149   /* half pixel compensation for p skip/direct */
150 #define HALF_PIXEL_PSKIP                   1
151 #define INTERLACE_CODING_FIX               1 /* HLS fix */
152 #define OUTPUT_INTERLACE_MERGED_PIC        1
153 
154 #endif
155 /*
156  *******************************
157 AVS2 10bit/12bit profile
158  ********************************
159  */
160 
161 #define DBFIX_10bit              1
162 
163 #define BUG_10bit              1
164 
165 /*
166  ***************************************
167 AVS2 HIGH LEVEL SYNTAX
168  ***************************************
169  */
170 #define AVS2_HDR_HLS             1
171  /* AVS2 HDR technology //yuquanhe@hisilicon.com */
172 #define AVS2_HDR_Tec                       1
173 #if AVS2_HDR_Tec
174 #define HDR_CHROMA_DELTA_QP                1 /* M3905 */
175 #define HDR_ADPTIVE_UV_DELTA                  1
176 #endif
177 /*
178  *************************************
179 AVS2 S2
180  *************************************
181  */
182 #define AVS2_S2_FASTMODEDECISION 1
183 #define RD1510_FIX_BG            1      /* 20160714, flluo@pku.edu.cn */
184 
185 
186 /* ////////////////// prediction techniques ///////////////////////////// */
187 #define LAM_2Level_TU            0.8
188 
189 
190 #define DIRECTION                4
191 #define DS_FORWARD               4
192 #define DS_BACKWARD              2
193 #define DS_SYM                   3
194 #define DS_BID                   1
195 
196 #define MH_PSKIP_NUM             4
197 #define NUM_OFFSET               0
198 #define BID_P_FST                1
199 #define BID_P_SND                2
200 #define FW_P_FST                 3
201 #define FW_P_SND                 4
202 #define WPM_NUM                  3
203       /* M3330 changes it to 2, the original value is 3 */
204 #define MAX_MVP_CAND_NUM         2
205 
206 #define DMH_MODE_NUM             5     /* Number of DMH mode */
207 #define TH_ME                    0     /* Threshold of ME */
208 
209 #define MV_SCALE                 1
210 
211 /* ///// reference picture management // */
212 #define FIX_MAX_REF              1     /* Falei LUO, flluo@pku.edu.cn */
213 #if FIX_MAX_REF
214       /* maximum number of reference frame for each frame */
215 #define MAXREF                   7
216 #define MAXGOP                   32
217 #endif
218 
219 /* #define REF_MAXBUFFER            7 */
220 /* more bufferes for displaying and background */
221 /* #define REF_MAXBUFFER            15 */
222 #if 1
223 #define REF_MAXBUFFER            23
224 #define REF_BUFFER  16
225 #else
226 #if RD170_FIX_BG
227 #define REF_MAXBUFFER            16
228 #else
229 #define REF_MAXBUFFER            7
230 #endif
231 #endif
232 
233 #ifdef TO_PORTING
234     /* block-composed background reference, fangdong@mail.ustc.edu.cn */
235 #define BCBR                     1
236 #else
237 #define BCBR    0
238 #endif
239 /* one more buffer for background when background_picture_output_flag is 0*/
240 #define AVS2_MAX_BUFFER_NUM               (REF_MAXBUFFER + 1)
241 
242 /* /////////////////Adaptive Loop Filter////////////////////////// */
243 #define NUM_ALF_COEFF_CTX        1
244 #define NUM_ALF_LCU_CTX          4
245 
246 #define LAMBDA_SCALE_LUMA       (1.0)
247 #define LAMBDA_SCALE_CHROMA     (1.0)
248 
249 
250 
251 /* ////////////////// entropy coding ///////////////////////////// */
252    /* M3090: Make sure rs1 will not overflow for 8-bit unsign char */
253 #define NUN_VALUE_BOUND          254
254 #define Encoder_BYPASS_Final     1    /* M3484 */
255 #define Decoder_Bypass_Annex     0    /* M3484 */
256 #define Decoder_Final_Annex      0    /* M3540 */
257 
258 
259 /* ////////////////// coefficient coding ///// */
260      /* M3035 size of an coefficient group, 4x4 */
261 #define CG_SIZE                  16
262 
263 #define SWAP(x, y) {\
264 	(y) = (y) ^ (x);\
265 	(x) = (y) ^ (x);\
266 	(y) = (x) ^ (y);\
267 }
268 
269 /* ////////////////// encoder optimization /////// */
270 #define TH                                 2
271 
272 #define M3624MDLOG                             /* reserved */
273 
274 #define TDRDO                               1  /* M3528 */
275 /* #define FIX_TDRDO_BG  1  // flluo@pku.edu.cn, 20160318// */
276 #define RATECONTROL                         1  /* M3580 M3627 M3689 */
277 #define AQPO                                1  /* M3623 */
278 #define AQPOM3694                           0
279 #define AQPOM4063                           1
280 #define AQPOM3762                           1
281 #define BGQPO                               1  /* M4061 */
282 #if BGQPO
283 #define LONGREFERENCE                       32
284 #endif
285 
286 /* #define REPORT */
287 /* ////////////////// Quantization   /////////////////////////////////////// */
288  /* Adaptive frequency weighting quantization */
289 #define FREQUENCY_WEIGHTING_QUANTIZATION    1
290 #if FREQUENCY_WEIGHTING_QUANTIZATION
291 #define CHROMA_DELTA_QP                     1
292 #define AWQ_WEIGHTING                       1
293 #define AWQ_LARGE_BLOCK_ENABLE              1
294 #define COUNT_BIT_OVERHEAD                  0
295 #define AWQ_LARGE_BLOCK_EXT_MAPPING         1
296 #endif
297 
298 #define QuantClip                           1
299 #define QuantMatrixClipFix                  1  /* 20160418, fllu@pku.edu.cn */
300 
301 #define WQ_MATRIX_FCD                       1
302 #if !WQ_MATRIX_FCD
303 #define WQ_FLATBASE_INBIT  7
304 #else
305 #define WQ_FLATBASE_INBIT  6
306 #endif
307 
308 
309 #define REFINED_QP                          1
310 
311 
312 /* ////////////////// delta QP ///// */
313       /* M3122: the minimum dQP unit is Macro block */
314 #define MB_DQP                    1
315       /* M3122: 1 represents left prediction
316       and 0 represents previous prediction */
317 #define LEFT_PREDICTION           1
318 
319 
320 /* //////////////////////SAO///////// */
321 #define NUM_BO_OFFSET             32
322 #define MAX_NUM_SAO_CLASSES       32
323 #define NUM_SAO_BO_CLASSES_LOG2   5
324 #define NUM_SAO_BO_CLASSES_IN_BIT 5
325 #define MAX_DOUBLE                (1.7e + 308)
326 #define NUM_SAO_EO_TYPES_LOG2     2
327 #define NUM_SAO_BO_CLASSES        (1<<NUM_SAO_BO_CLASSES_LOG2)
328 #define SAO_RATE_THR              0.75
329 #define SAO_RATE_CHROMA_THR       1
330 #define SAO_SHIFT_PIX_NUM         4
331 
332 #define SAO_PARA_CROSS_SLICE      1
333 #define SAO_MULSLICE_FTR_FIX      1
334 
335 /* /////////////////// Transform ///////////////////// */
336 #define SEC_TR_SIZE               4
337    /* apply secT to greater than or equal to 8x8 block, */
338 #define SEC_TR_MIN_BITSIZE        3
339 
340 #define BUGFIXED_COMBINED_ST_BD   1
341 
342 /* /////////////////// Scalable ///////////////////// */
343 #define M3480_TEMPORAL_SCALABLE   1
344 #define TEMPORAL_MAXLEVEL         8
345 #define TEMPORAL_MAXLEVEL_BIT     3
346 
347 
348 
349 
350 /*
351  *************************************
352  * AVS2 macros end
353  *
354  *************************************
355  */
356 
357 #define CHROMA                    1
358 #define LUMA_8x8                  2
359 #define NUM_BLOCK_TYPES           8
360 
361 #if (!defined clamp)
362      /* !< clamp a to the range of [b;c] */
363 #define clamp(a, b, c) ((a) < (b) ? (b) : ((a) > (c) ? (c) : (a)))
364 #endif
365 
366 	/* POC200301 moved from defines.h */
367 #define LOG2_MAX_FRAME_NUM_MINUS4    4
368 	/* !< bytes for one frame */
369 #define MAX_CODED_FRAME_SIZE         15000000
370 
371 /* ----------------------- */
372 /* FLAGS and DEFINES for new chroma intra prediction, Dzung Hoang */
373 /* Threshold values to zero out quantized transform coefficients. */
374 /* Recommend that _CHROMA_COEFF_COST_ be low to improve chroma quality */
375 #define _LUMA_COEFF_COST_         4 /* !< threshold for luma coeffs */
376   /* !< Number of pixels padded around the reference frame (>=4) */
377 #define IMG_PAD_SIZE              64
378 
379 #define OUTSTRING_SIZE            255
380 
381 	/* !< abs macro, faster than procedure */
382 #define absm(A) ((A) < (0) ? (-(A)) : (A))
383     /* !< used for start value for some variables */
384 #define MAX_VALUE                999999
385 
386 #define Clip1(a)     ((a) > 255 ? 255:((a) < 0 ? 0 : (a)))
387 #define Clip3(min, max, val) (((val) < (min)) ?\
388 		(min) : (((val) > (max)) ? (max) : (val)))
389 
390 /* --------------------------------------------- */
391 
392 /* block size of block transformed by AVS */
393 #define PSKIPDIRECT               0
394 #define P2NX2N                    1
395 #define P2NXN                     2
396 #define PNX2N                     3
397 #define PHOR_UP                   4
398 #define PHOR_DOWN                 5
399 #define PVER_LEFT                 6
400 #define PVER_RIGHT                7
401 #define PNXN                      8
402 #define I8MB                      9
403 #define I16MB                     10
404 #define IBLOCK                    11
405 #define InNxNMB                   12
406 #define INxnNMB                   13
407 #define MAXMODE                   14   /* add yuqh 20130824 */
408 #define  LAMBDA_ACCURACY_BITS     16
409 #define  LAMBDA_FACTOR(lambda) ((int)((double)(1 << LAMBDA_ACCURACY_BITS)\
410 		* lambda + 0.5))
411 #define  WEIGHTED_COST(factor, bits) (((factor) * (bits))\
412 		>> LAMBDA_ACCURACY_BITS)
413 #define  MV_COST(f, s, cx, cy, px, py) (WEIGHTED_COST(f, mvbits[((cx) << (s))\
414 		- px] +	mvbits[((cy) << (s)) - py]))
415 #define  REF_COST(f, ref)              (WEIGHTED_COST(f, refbits[(ref)]))
416 
417 #define  BWD_IDX(ref)                 (((ref) < 2) ? 1 - (ref) : (ref))
418 #define  REF_COST_FWD(f, ref) (WEIGHTED_COST(f,\
419 		((img->num_ref_pic_active_fwd_minus1 == 0) ?\
420 			0 : refbits[(ref)])))
421 #define  REF_COST_BWD(f, ef) (WEIGHTED_COST(f,\
422 		((img->num_ref_pic_active_bwd_minus1 == 0) ?\
423 			0 : BWD_IDX(refbits[ref]))))
424 
425 #define IS_INTRA(MB) ((MB)->cuType == I8MB ||\
426 	(MB)->cuType == I16MB ||\
427 	(MB)->cuType == InNxNMB || (MB)->cuType == INxnNMB)
428 #define IS_INTER(MB) ((MB)->cuType != I8MB &&\
429 	(MB)->cuType != I16MB && (MB)->cuType != InNxNMB\
430 	&& (MB)->cuType != INxnNMB)
431 #define IS_INTERMV(MB) ((MB)->cuType != I8MB &&\
432 	(MB)->cuType != I16MB && (MB)->cuType != InNxNMB &&\
433 	(MB)->cuType != INxnNMB && (MB)->cuType != 0)
434 
435 
436 #define IS_DIRECT(MB) ((MB)->cuType == PSKIPDIRECT && (img->type == B_IMG))
437 #define IS_P_SKIP(MB) ((MB)->cuType == PSKIPDIRECT &&\
438 	(((img->type == F_IMG)) || ((img->type == P_IMG))))
439 #define IS_P8x8(MB)  ((MB)->cuType == PNXN)
440 
441 /* Quantization parameter range */
442 #define MIN_QP                       0
443 #define MAX_QP                       63
444 #define SHIFT_QP                     11
445 
446 /* Picture types */
447 #define INTRA_IMG                    0   /* !< I frame */
448 #define INTER_IMG                    1   /* !< P frame */
449 #define B_IMG                        2   /* !< B frame */
450 #define I_IMG                        0   /* !< I frame */
451 #define P_IMG                        1   /* !< P frame */
452 #define F_IMG                        4  /* !< F frame */
453 
454 #define BACKGROUND_IMG               3
455 
456 #define BP_IMG                       5
457 
458 
459 /* Direct Mode types */
460 #define MIN_CU_SIZE                  8
461 #define MIN_BLOCK_SIZE               4
462 #define MIN_CU_SIZE_IN_BIT           3
463 #define MIN_BLOCK_SIZE_IN_BIT        2
464 #define BLOCK_MULTIPLE              (MIN_CU_SIZE/(MIN_BLOCK_SIZE))
465 #define MAX_CU_SIZE                  64
466 #define MAX_CU_SIZE_IN_BIT           6
467 #define B4X4_IN_BIT                  2
468 #define B8X8_IN_BIT                  3
469 #define B16X16_IN_BIT                4
470 #define B32X32_IN_BIT                5
471 #define B64X64_IN_BIT                6
472     /* !< # luma intra prediction modes */
473 #define NUM_INTRA_PMODE              33
474     /* number of luma modes for full RD search */
475 #define NUM_MODE_FULL_RD             9
476     /* !< #chroma intra prediction modes */
477 #define NUM_INTRA_PMODE_CHROMA       5
478 
479 /* luma intra prediction modes */
480 
481 #define DC_PRED                      0
482 #define PLANE_PRED                   1
483 #define BI_PRED                      2
484 #define VERT_PRED                    12
485 #define HOR_PRED                     24
486 
487 
488 /* chroma intra prediction modes */
489 #define DM_PRED_C                    0
490 #define DC_PRED_C                    1
491 #define HOR_PRED_C                   2
492 #define VERT_PRED_C                  3
493 #define BI_PRED_C                    4
494 
495 #define EOS                          1         /* !< End Of Sequence */
496 	/* !< Start Of Picture */
497 #define SOP                          2
498 
499 #define DECODING_OK                  0
500 #define SEARCH_SYNC                  1
501 #define DECODE_MB                    1
502 
503 #ifndef max
504   /* !< Macro returning max value */
505 #define max(a, b)                   ((a) > (b) ? (a) : (b))
506   /* !< Macro returning min value */
507 #define min(a, b)                   ((a) < (b) ? (a) : (b))
508 #endif
509 
510 
511 #define XY_MIN_PMV                   1
512 #if XY_MIN_PMV
513 #define MVPRED_xy_MIN                0
514 #else
515 #define MVPRED_MEDIAN                0
516 #endif
517 #define MVPRED_L                     1
518 #define MVPRED_U                     2
519 #define MVPRED_UR                    3
520 
521 #define DUAL                         4
522 #define FORWARD                      0
523 #define BACKWARD                     1
524 #define SYM                          2
525 #define BID                          3
526 #define INTRA                        -1
527 
528 #define BUF_CYCLE                    5
529 
530 #define ROI_M3264                    1      /* ROI Information Encoding */
531 
532 #define PicExtensionData             1
533 
534 
535 #define REF_OUTPUT                   1  /* M3337 */
536 
537 
538 /* MV scaling 14 bit */
539 #define MULTI                        16384
540 #define HALF_MULTI                   8192
541 #define OFFSET                       14
542 /* end of MV scaling */
543  /* store the middle pixel's mv in a motion information unit */
544 #define MV_DECIMATION_FACTOR         4
545 
546 /* BUGFIX_AVAILABILITY_INTRA */
547 #define NEIGHBOR_INTRA_LEFT                 0
548 #define NEIGHBOR_INTRA_UP                   1
549 #define NEIGHBOR_INTRA_UP_RIGHT             2
550 #define NEIGHBOR_INTRA_UP_LEFT              3
551 #define NEIGHBOR_INTRA_LEFT_DOWN            4
552 /* end of BUGFIX_AVAILABILITY_INTRA */
553 
554 /* end #include "define.h" */
555 
556 /*#include "commonStructures.h"*/
557 
558 /*typedef uint16_t byte;*/    /* !< byte type definition */
559 #define byte uint16_t
560 #define pel_t byte
561 
562 enum BitCountType_e {
563 	BITS_HEADER,
564 	BITS_TOTAL_MB,
565 	BITS_MB_MODE,
566 	BITS_INTER_MB,
567 	BITS_CBP_MB,
568 	BITS_CBP01_MB,
569 	BITS_COEFF_Y_MB,
570 	BITS_COEFF_UV_MB,
571 	BITS_DELTA_QUANT_MB,
572 	BITS_SAO_MB,
573 	MAX_BITCOUNTER_MB
574 };
575 
576 
577 enum SAOEOClasses {
578 /* EO Groups, the assignments depended on
579 how you implement the edgeType calculation */
580 	SAO_CLASS_EO_FULL_VALLEY = 0,
581 	SAO_CLASS_EO_HALF_VALLEY = 1,
582 	SAO_CLASS_EO_PLAIN       = 2,
583 	SAO_CLASS_EO_HALF_PEAK   = 3,
584 	SAO_CLASS_EO_FULL_PEAK   = 4,
585 	SAO_CLASS_BO             = 5,
586 	NUM_SAO_EO_CLASSES = SAO_CLASS_BO,
587 	NUM_SAO_OFFSET
588 };
589 
590 struct SAOstatdata {
591 	int32_t diff[MAX_NUM_SAO_CLASSES];
592 	int32_t  count[MAX_NUM_SAO_CLASSES];
593 };
594 
595 struct CopyRight_s {
596 	int32_t extension_id;
597 	int32_t copyright_flag;
598 	int32_t copyright_id;
599 	int32_t original_or_copy;
600 	int32_t reserved;
601 	int32_t copyright_number;
602 };
603 
604 struct CameraParamters_s {
605 	int32_t reserved;
606 	int32_t camera_id;
607 	int32_t height_of_image_device;
608 	int32_t focal_length;
609 	int32_t f_number;
610 	int32_t vertical_angle_of_view;
611 	int32_t camera_position_x;
612 	int32_t camera_position_y;
613 	int32_t camera_position_z;
614 	int32_t camera_direction_x;
615 	int32_t camera_direction_y;
616 	int32_t camera_direction_z;
617 	int32_t image_plane_vertical_x;
618 	int32_t image_plane_vertical_y;
619 	int32_t image_plane_vertical_z;
620 };
621 
622 /* ! SNRParameters */
623 struct SNRParameters_s {
624 	double snr_y;               /* !< current Y SNR */
625 	double snr_u;               /* !< current U SNR */
626 	double snr_v;               /* !< current V SNR */
627 	double snr_y1;              /* !< SNR Y(dB) first frame */
628 	double snr_u1;              /* !< SNR U(dB) first frame */
629 	double snr_v1;              /* !< SNR V(dB) first frame */
630 	double snr_ya;              /* !< Average SNR Y(dB) remaining frames */
631 	double snr_ua;              /* !< Average SNR U(dB) remaining frames */
632 	double snr_va;              /* !< Average SNR V(dB) remaining frames */
633 #if INTERLACE_CODING
634 	double i_snr_ya;               /* !< current Y SNR */
635 	double i_snr_ua;               /* !< current U SNR */
636 	double i_snr_va;               /* !< current V SNR */
637 #endif
638 };
639 
640 /* signal to noise ratio parameters */
641 
642 /* ! codingUnit */
643 struct codingUnit {
644 	uint32_t        ui_MbBitSize;
645 	int32_t                 uiBitSize;            /* size of MB */
646 	/* !< number of current syntax element */
647 	int32_t                 currSEnr;
648 	int32_t                 slice_nr;
649 	int32_t                 delta_quant;          /* !< for rate control */
650 	int32_t                 delta_qp;
651 	int32_t                 qp;
652 	int32_t                 bitcounter[MAX_BITCOUNTER_MB];
653 	struct codingUnit
654 	*mb_available[3][3]; /*!< pointer to neighboring MBs
655 		in a 3x3 window of current MB, which is located at [1][1] \n
656 		NULL pointer identifies neighboring MBs which are unavailable */
657 	/* some storage of codingUnit syntax elements for global access */
658 	int32_t                 cuType;
659 	int32_t                 weighted_skipmode;
660 
661 	int32_t                 md_directskip_mode;
662 
663 	int32_t                 trans_size;
664 	int
665 	/* !< indices correspond to [forw,backw][block_y][block_x][x,y, dmh] */
666 	mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][3];
667 
668 	int32_t  intra_pred_modes[BLOCK_MULTIPLE * BLOCK_MULTIPLE];
669 	int32_t  real_intra_pred_modes[BLOCK_MULTIPLE * BLOCK_MULTIPLE];
670 	int32_t  l_ipred_mode;
671 	int32_t  cbp, cbp_blk;
672 	uint32_t cbp_bits;
673 
674 	int32_t                 b8mode[4];
675 	int32_t                 b8pdir[4];
676       /* !< chroma intra prediction mode */
677 	int32_t                 c_ipred_mode;
678 
679    /* !< pointer to neighboring MB (AEC) */
680 	struct codingUnit   *mb_available_up;
681 	 /* !< pointer to neighboring MB (AEC) */
682 	struct codingUnit   *mb_available_left;
683 	int32_t                 mbAddrA, mbAddrB, mbAddrC, mbAddrD;
684        /* !<added by mz, 2008.04 */
685 	int32_t                 slice_set_index;
686      /* added by mz, 2008.04 */
687 	int32_t                 slice_header_flag;
688 	int32_t                 sliceqp;         /* added by mz, 2008.04 */
689 #if MB_DQP
690 	int32_t                 previouse_qp;
691 	int32_t                 left_cu_qp;
692 #endif
693 	int32_t                 block_available_up;
694 	int32_t                 block_available_left;
695 
696 };
697 
698 
699 /* image parameters */
700 struct syntaxelement;
701 struct slice;
702 struct alfdatapart;
703 struct SAOBlkParam_s {
704 	int32_t modeIdc; /* NEW, MERGE, OFF */
705 	/* NEW: EO_0, EO_90, EO_135, EO_45, BO. MERGE: left, above */
706 	int32_t typeIdc;
707 	int32_t startBand; /* BO: starting band index */
708 	int32_t startBand2;
709 	int32_t deltaband;
710 	int32_t offset[MAX_NUM_SAO_CLASSES];
711 };
712 struct ALFParam_s {
713 	int32_t alf_flag;
714 	int32_t num_coeff;
715 	int32_t filters_per_group;
716 	int32_t componentID;
717 	int32_t filterPattern[16]; /* *filterPattern; */
718 	int32_t coeffmulti[16][9]; /* **coeffmulti; */
719 };
720 
721 enum ALFComponentID {
722 	ALF_Y = 0,
723 	ALF_Cb,
724 	ALF_Cr,
725 	NUM_ALF_COMPONENT
726 };
727 struct ALF_APS_s {
728 	int32_t usedflag;
729 	int32_t cur_number;
730 	int32_t max_number;
731 	struct ALFParam_s alf_par[NUM_ALF_COMPONENT];
732 };
733 
734 
735 /* ------------------------------------------------------
736  * frame data
737  */
738 struct avs2_frame_s {
739 	int32_t imgcoi_ref;
740 	byte * *referenceFrame[3];
741 	int32_t **refbuf;
742 	int32_t ***mvbuf;
743 #if 0
744 	double saorate[NUM_SAO_COMPONENTS];
745 #endif
746 	byte ***ref;
747 
748 	int32_t imgtr_fwRefDistance;
749 	int32_t refered_by_others;
750 	int32_t is_output;
751 	int32_t to_prepare_disp;
752 #if M3480_TEMPORAL_SCALABLE
753 	/* temporal level setted in configure file */
754 	int32_t temporal_id;
755 #endif
756 	byte **oneForthRefY;
757 #if FIX_MAX_REF
758 	int32_t ref_poc[MAXREF];
759 #else
760 	int32_t ref_poc[4];
761 #endif
762 #ifdef AML
763 	int32_t index;
764 	int32_t mmu_alloc_flag;
765 	int32_t lcu_size_log2;
766 	/*uint32_t header_adr;*/
767 	uint32_t mc_y_adr;
768 	uint32_t mc_u_v_adr;
769 	uint32_t mc_canvas_y;
770 	uint32_t mc_canvas_u_v;
771 	uint32_t mpred_mv_wr_start_addr;
772 	uint8_t bg_flag;
773 	/**/
774 	unsigned long header_adr;
775 	int buf_size;
776 	int lcu_total;
777 	int comp_body_size;
778 	uint32_t dw_y_adr;
779 	uint32_t dw_u_v_adr;
780 	int y_canvas_index;
781 	int uv_canvas_index;
782 	struct canvas_config_s canvas_config[2];
783 	int double_write_mode;
784 	int bit_depth;
785 	unsigned long cma_alloc_addr;
786 	int BUF_index;
787 	int pic_w;
788 	int pic_h;
789 	int stream_offset;
790 	u32 pts;
791 	u64 pts64;
792 	/**/
793 	int vf_ref;
794 	int decode_idx;
795 	int slice_type;
796 	int32_t imgtr_fwRefDistance_bak;
797 	int32_t error_mark;
798 	int32_t decoded_lcu;
799 #endif
800 #ifndef MV_USE_FIXED_BUF
801 	int mv_buf_index;
802 #endif
803 
804 	/* picture qos infomation*/
805 	int max_qp;
806 	int avg_qp;
807 	int min_qp;
808 	int max_skip;
809 	int avg_skip;
810 	int min_skip;
811 	int max_mv;
812 	int min_mv;
813 	int avg_mv;
814 
815 	u32 hw_decode_time;
816 	u32 frame_size; // For frame base mode
817 };
818 
819 
820 struct ImageParameters_s {
821 	struct codingUnit    *mb_data;
822 	int32_t number;                                 /* <! frame number */
823 	int32_t numIPFrames;
824 
825 	int32_t type;
826 	int32_t typeb;
827 	int32_t typeb_before;
828 
829 	int32_t qp; /* <! quant for the current frame */
830 	int32_t current_mb_nr; /* bitstream order */
831 	int32_t current_slice_nr;
832 	int32_t tr;   /* <! temporal reference, 8 bit, */
833 
834 	int32_t width;                   /* !< Number of pels */
835 	int32_t width_cr;                /* !< Number of pels chroma */
836 	int32_t height;                  /* !< Number of lines */
837 	int32_t height_cr;               /* !< Number of lines  chroma */
838 	int32_t PicWidthInMbs;
839 	int32_t PicSizeInMbs;
840 	int32_t block8_x, block8_y;
841 	int32_t   subblock_x;
842 	int32_t   subblock_y;
843 
844 	int32_t num_of_references;
845     /* <! Bug Fix: correct picture size for outputted reconstructed pictures */
846 	int32_t auto_crop_right;
847 	int32_t auto_crop_bottom;
848 	int32_t buf_cycle;
849 	int32_t picture_structure;
850 	 /* <! pointer to current Slice data struct */
851 	struct slice       *currentSlice;
852 
853 	int32_t **predBlock;             /* !< current best prediction mode */
854 	int32_t **predBlockTmp;
855 	/* !< the diff pixel values between orginal image and prediction */
856 	int32_t **resiY;
857 	/* !< Array containing square values,used for snr computation */
858 	int32_t *quad;
859 
860 	/* //location of current MB////// */
861 	int32_t mb_y;                    /* !< current MB vertical */
862 	int32_t mb_x;                    /* !< current MB horizontal */
863 	int32_t pix_y;                   /* !< current pixel vertical */
864 	int32_t pix_x;                   /* !< current pixel horizontal */
865 	int32_t pix_c_y;                 /* !< current pixel chroma vertical */
866 	int32_t pix_c_x; /* !< current pixel chroma horizontal */
867 
868 	int32_t imgtr_next_P;
869 
870 	int32_t imgcoi_next_ref;
871 
872     /* !< GH ipredmode[90][74];prediction mode for inter frames */
873     /* fix from ver 4.1 */
874 	int32_t **ipredmode;
875 	int32_t **rec_ipredmode;
876 
877 
878 	/* //////////////decoder////////////////////////// */
879 	int32_t max_mb_nr;
880 	int32_t **intra_block;
881 
882 	int32_t block_y;
883 	int32_t block_x;
884     /* <! final 4x4 block. Extended to 16x16 for AVS */
885 	int32_t resiUV[2][MAX_CU_SIZE][MAX_CU_SIZE];
886 
887 	int32_t **fw_refFrArr;                          /* <! [72][88]; */
888 	int32_t **bw_refFrArr;                          /* <! [72][88]; */
889 
890 	int32_t random_access_decodable_flag;
891 
892 	int32_t seq_header_indicate;
893 	int32_t B_discard_flag;
894 
895 	/* B pictures */
896 	uint32_t pic_distance;
897 
898 	uint32_t coding_order;
899 
900 	uint32_t PrevPicDistanceLsb;
901 	int32_t CurrPicDistanceMsb;
902 
903 	int32_t PicHeightInMbs;
904 
905 	int32_t types;
906 
907 	int32_t new_sequence_flag;
908 	int32_t sequence_end_flag;            /* <! rm52k_r2 */
909 
910 	int32_t current_slice_set_index;          /* <! added by mz, 2008.04 */
911 	int32_t current_slice_header_flag;        /* <! added by mz, 2008.04 */
912 	int32_t slice_set_qp[64];             /* <! added by mz, 2008.04 */
913 
914 
915 	int32_t inter_amp_enable;
916 
917 	/* ////////////////////////encoder////////////////////////// */
918 
919 	/* int32_t nb_references;     //!< replaced by "num_of_references" */
920 
921 	int32_t framerate;
922 
923 	int32_t ***predBlockY;        /* !< all 9 prediction modes */
924      /* !< new chroma 8x8 intra prediction modes */
925 	int32_t ****predBlockUV;
926 
927 	int32_t **Coeff_all;/* qyu 0821 */
928 
929 	struct syntaxelement   *MB_SyntaxElements; /* !< by oliver 0612 */
930 
931 	/* B pictures */
932 
933 	int32_t b_frame_to_code;
934 	int32_t num_ref_pic_active_fwd_minus1;
935 	int32_t num_ref_pic_active_bwd_minus1;
936 	int32_t mv_range_flag;
937 
938 	uint32_t frame_num;   /* frame_num for this frame */
939 	int32_t slice_offset;
940 	/* the following are sent in the slice header */
941 	int32_t NoResidueDirect;
942 	int32_t coded_mb_nr;
943 	int32_t progressive_frame;
944 	int32_t tc_reserve_bit;
945 	 /* the last MB no in current slice.      Yulj 2004.07.15 */
946 	int32_t mb_no_currSliceLastMB;
947 	int32_t Seqheader_flag;     /* Added by cjw, 20070327 */
948 	int32_t EncodeEnd_flag;         /* Carmen, 2007/12/19 */
949 
950 	uint16_t bbv_delay;
951 
952 	int32_t tmp_fwBSkipMv[DIRECTION + 1][2];
953 	int32_t tmp_bwBSkipMv[DIRECTION + 1][2];
954 
955 	int32_t tmp_pref_fst[MH_PSKIP_NUM + NUM_OFFSET + 1];
956 	int32_t tmp_pref_snd[MH_PSKIP_NUM + NUM_OFFSET + 1];
957 	int32_t tmp_fstPSkipMv[MH_PSKIP_NUM + NUM_OFFSET + 1][3];
958 	int32_t tmp_sndPSkipMv[MH_PSKIP_NUM + NUM_OFFSET + 1][3];
959 #if BCBR
960 byte *org_ref_y;
961 byte *org_ref_u;
962 byte *org_ref_v;
963 int32_t  *BLCUidx;
964 int32_t  *DQPList;
965 int32_t  iNumCUsInFrame;
966 
967 byte *org_ref2_y;
968 byte *org_ref2_u;
969 byte *org_ref2_v;
970 int32_t  ref2Num;
971 #endif
972 /* //////////////SAO parameter////////////////// */
973 double        *cur_saorate;
974 #if 0
975 int32_t            slice_sao_on[NUM_SAO_COMPONENTS];
976 #endif
977 int32_t            pic_alf_on[NUM_ALF_COMPONENT];
978 struct alfdatapart   *dp_ALF;
979 
980 #if INTERLACE_CODING
981 int32_t is_field_sequence;
982 int32_t is_top_field;
983 #endif
984 
985 
986 };
987 
988 
989 
990 /* ! struct for context management */
991 struct BiContextType_s {
992 	uint8_t MPS;   /* 1 bit */
993 	uint32_t  LG_PMPS; /* 10 bits */
994 	uint8_t cycno;  /* 2 bits */
995 };
996 
997 /***********************************************************************
998  * D a t a    t y p e s   f o r  A E C
999  ************************************************************************/
1000 
1001 
1002 
1003 struct pix_pos {
1004 	int32_t available;   /* ABCD */
1005 	int32_t mb_addr;    /* MB position */
1006 	int32_t x;
1007 	int32_t y;
1008 	int32_t pos_x;     /* 4x4 x-pos */
1009 	int32_t pos_y;
1010 };
1011 
1012 
1013 
1014 struct STDOUT_DATA_s {
1015 	int32_t type;
1016 	int32_t typeb;
1017 
1018 	int32_t   framenum;
1019 	int32_t   tr;
1020 	int32_t   qp;
1021 	double snr_y;
1022 	double snr_u;
1023 	double snr_v;
1024 	int32_t   tmp_time;
1025 	int32_t   picture_structure;
1026 	int32_t   curr_frame_bits;
1027 	int32_t   emulate_bits;
1028 
1029 	uint32_t DecMD5Value[4];
1030 #if RD1501_FIX_BG
1031 int32_t background_picture_output_flag;/* Longfei.Wang@mediatek.com */
1032 #endif
1033 #if RD160_FIX_BG
1034 int32_t picture_reorder_delay;
1035 #endif
1036 int8_t str_reference_list[128];  /* reference list information */
1037 };
1038 
1039 /**********************************************************************
1040  * C O N T E X T S   F O R   T M L   S Y N T A X   E L E M E N T S
1041  **********************************************************************
1042  */
1043 #define NUM_CuType_CTX              (11 + 10)
1044 #define NUM_B8_TYPE_CTX              9
1045 #define NUM_MVD_CTX                 15
1046 #define NUM_PMV_IDX_CTX             10
1047 #define NUM_REF_NO_CTX               6
1048 #define NUM_DELTA_QP_CTX             4
1049 #define NUM_INTER_DIR_CTX           18
1050 #define NUM_INTER_DIR_DHP_CTX           3
1051 #define NUM_B8_TYPE_DHP_CTX             1
1052 #define NUM_AMP_CTX                  2
1053 #define NUM_C_INTRA_MODE_CTX         4
1054 #define NUM_CBP_CTX                  4
1055 #define NUM_BCBP_CTX                 4
1056 #define NUM_MAP_CTX                 17
1057 #define NUM_LAST_CTX                17
1058 
1059 #define NUM_INTRA_MODE_CTX           7
1060 
1061 #define NUM_ABS_CTX                  5
1062 #define NUM_TU_CTX                   3
1063 #define NUM_SPLIT_CTX                8  /* CU depth */
1064 #if BCBR
1065 #define NUM_BGBLCOK_CTX              1
1066 #endif
1067 
1068 #define NUM_BRP_CTX                  8
1069 
1070 
1071 #define NUM_LAST_CG_CTX_LUMA        12
1072 #define NUM_LAST_CG_CTX_CHROMA       6
1073 #define NUM_SIGCG_CTX_LUMA           2
1074 #define NUM_SIGCG_CTX_CHROMA         1
1075 #define NUM_LAST_POS_CTX_LUMA   56
1076 #define NUM_LAST_POS_CTX_CHROMA 16
1077 #define NUM_LAST_CG_CTX (NUM_LAST_CG_CTX_LUMA + NUM_LAST_CG_CTX_CHROMA)
1078 #define NUM_SIGCG_CTX (NUM_SIGCG_CTX_LUMA + NUM_SIGCG_CTX_CHROMA)
1079 #define NUM_LAST_POS_CTX (NUM_LAST_POS_CTX_LUMA + NUM_LAST_POS_CTX_CHROMA)
1080 #define NUM_SAO_MERGE_FLAG_CTX                   3
1081 #define NUM_SAO_MODE_CTX                         1
1082 #define NUM_SAO_OFFSET_CTX                       2
1083 #define NUM_INTER_DIR_MIN_CTX         2
1084 
1085 /*end #include "commonStructures.h"*/
1086 
1087 /*#include "commonVariables.h"*/
1088 
1089 /*
1090 extern struct CameraParamters_s *camera;
1091 extern struct SNRParameters_s *snr;
1092 extern struct ImageParameters_s *img;
1093  */
1094 
1095 /* avs2_frame_t *fref[REF_MAXBUFFER]; */
1096 
1097 
1098 #define ET_SIZE 300      /* !< size of error text buffer */
1099 
1100 
1101 /* ------------------------------------------------------
1102  * common data
1103  */
1104 struct Video_Com_data_s {
1105 	int32_t   Bframe_ctr;
1106 
1107 	/* FILE *p_log;                     //!< SNR file */
1108 	/* FILE *p_trace;                   //!< Trace file */
1109 
1110 	int32_t   tot_time;
1111 
1112 	/* Tsinghua for picture_distance  200701 */
1113 	int32_t   picture_distance;
1114 
1115 	/* M3178 PKU Reference Manage */
1116 	int32_t   coding_order;
1117 	/* !< current encoding/decoding frame pointer */
1118 	struct avs2_frame_s *f_rec;
1119 	int32_t   seq_header;
1120     /* !< Array for reference frames of each block */
1121 	int32_t    **refFrArr;
1122 	int32_t    **p_snd_refFrArr;
1123 
1124 	byte  ***currentFrame; /* [yuv][height][width] */
1125 #ifdef AML
1126 	struct avs2_frame_s *cur_pic; /*either f_rec or m_bg*/
1127 #endif
1128 	byte   **backgroundReferenceFrame[3];
1129 	byte  ***background_ref;
1130 
1131 
1132 	int32_t  total_frames;
1133 
1134 	/* mv_range, 20071009 */
1135 	int32_t  Min_V_MV;
1136 	int32_t  Max_V_MV;
1137 	int32_t  Min_H_MV;
1138 	int32_t  Max_H_MV;
1139 	/* !< buffer for error message for exit with error(void) */
1140 	int8_t errortext[ET_SIZE];
1141 	int8_t str_list_reference[128];
1142 
1143 
1144 };
1145 /* extern Video_Com_data *hc; */
1146 
1147 
1148 /*end #include "commonVariables.h"*/
1149 /* #define USE_PARAM_TXT */
1150 /*
1151 #if FIX_CHROMA_FIELD_MV_BK_DIST
1152 int8_t bk_img_is_top_field;
1153 #endif
1154 */
1155 /* void write_GB_frame(FILE *p_dec); */
1156 
1157 #if !FIX_MAX_REF
1158 #define MAXREF    4
1159 #define MAXGOP    32
1160 #endif
1161 
1162 struct StatBits {
1163 	int32_t   curr_frame_bits;
1164 	int32_t   prev_frame_bits;
1165 	int32_t   emulate_bits;
1166 	int32_t   prev_emulate_bits;
1167 	int32_t   last_unit_bits;
1168 	int32_t   bitrate;
1169 	int32_t   total_bitrate[1000];
1170 	int32_t   coded_pic_num;
1171 	int32_t   time_s;
1172 };
1173 
1174 struct reference_management {
1175 	int32_t poc;
1176 	int32_t qp_offset;
1177 	int32_t num_of_ref;
1178 	int32_t referd_by_others;
1179 	int32_t ref_pic[MAXREF];
1180 	int32_t predict;
1181 	int32_t deltaRPS;
1182 	int32_t num_to_remove;
1183 	int32_t remove_pic[MAXREF];
1184 };
1185 
1186 
1187 /* ------------------------------------------------------
1188  * dec data
1189  */
1190 struct Video_Dec_data_s {
1191 	byte **background_frame[3];
1192 	int32_t background_reference_enable;
1193 
1194 	int32_t background_picture_flag;
1195 	int32_t background_picture_output_flag;
1196 	int32_t background_picture_enable;
1197 
1198 	int32_t background_number;
1199 
1200 #if BCBR
1201 	int32_t bcbr_enable;
1202 #endif
1203 
1204 	int32_t demulate_enable;
1205 	int32_t currentbitoffset;
1206 
1207 	int32_t aspect_ratio_information;
1208 	int32_t frame_rate_code;
1209 	int32_t bit_rate_lower;
1210 	int32_t bit_rate_upper;
1211 	int32_t  marker_bit;
1212 
1213 	int32_t video_format;
1214 	int32_t color_description;
1215 	int32_t color_primaries;
1216 	int32_t transfer_characteristics;
1217 	int32_t matrix_coefficients;
1218 
1219 	int32_t progressive_sequence;
1220 #if INTERLACE_CODING
1221 int32_t is_field_sequence;
1222 #endif
1223 int32_t low_delay;
1224 int32_t horizontal_size;
1225 int32_t vertical_size;
1226 int32_t sample_precision;
1227 int32_t video_range;
1228 
1229 int32_t display_horizontal_size;
1230 int32_t display_vertical_size;
1231 int32_t TD_mode;
1232 int32_t view_packing_mode;
1233 int32_t view_reverse;
1234 
1235 int32_t b_pmvr_enabled;
1236 int32_t dhp_enabled;
1237 int32_t b_dmh_enabled;
1238 int32_t b_mhpskip_enabled;
1239 int32_t wsm_enabled;
1240 int32_t b_secT_enabled;
1241 
1242 int32_t tmp_time;
1243 int32_t FrameNum;
1244 int32_t eos;
1245 int32_t pre_img_type;
1246 int32_t pre_img_types;
1247 /* int32_t pre_str_vec; */
1248 int32_t pre_img_tr;
1249 int32_t pre_img_qp;
1250 int32_t pre_tmp_time;
1251 int32_t RefPicExist;   /* 20071224 */
1252 int32_t BgRefPicExist;
1253 int32_t dec_ref_num;                /* ref order */
1254 
1255 /* video edit code */ /* M1956 by Grandview 2006.12.12 */
1256 int32_t vec_flag;
1257 
1258 /* Copyright_extension(void) header */
1259 int32_t copyright_flag;
1260 int32_t copyright_identifier;
1261 int32_t original_or_copy;
1262 int64_t copyright_number_1;
1263 int64_t copyright_number_2;
1264 int64_t copyright_number_3;
1265 /* Camera_parameters_extension */
1266 int32_t camera_id;
1267 int32_t height_of_image_device;
1268 int32_t focal_length;
1269 int32_t f_number;
1270 int32_t vertical_angle_of_view;
1271 int32_t camera_position_x_upper;
1272 int32_t camera_position_x_lower;
1273 int32_t camera_position_y_upper;
1274 int32_t camera_position_y_lower;
1275 int32_t camera_position_z_upper;
1276 int32_t camera_position_z_lower;
1277 int32_t camera_direction_x;
1278 int32_t camera_direction_y;
1279 int32_t camera_direction_z;
1280 int32_t image_plane_vertical_x;
1281 int32_t image_plane_vertical_y;
1282 int32_t image_plane_vertical_z;
1283 
1284 #if AVS2_HDR_HLS
1285 /* mastering_display_and_content_metadata_extension(void) header */
1286 int32_t display_primaries_x0;
1287 int32_t display_primaries_y0;
1288 int32_t display_primaries_x1;
1289 int32_t display_primaries_y1;
1290 int32_t display_primaries_x2;
1291 int32_t display_primaries_y2;
1292 int32_t white_point_x;
1293 int32_t white_point_y;
1294 int32_t max_display_mastering_luminance;
1295 int32_t min_display_mastering_luminance;
1296 int32_t maximum_content_light_level;
1297 int32_t maximum_frame_average_light_level;
1298 #endif
1299 
1300 /* I_pictures_header(void) */
1301 int32_t top_field_first;
1302 int32_t repeat_first_field;
1303 int32_t progressive_frame;
1304 #if INTERLACE_CODING
1305 int32_t is_top_field;
1306 #endif
1307 /* int32_t fixed_picture_qp;   //qyu 0927 */
1308 int32_t picture_qp;
1309 int32_t fixed_picture_qp;
1310 int32_t time_code_flag;
1311 int32_t time_code;
1312 int32_t loop_filter_disable;
1313 int32_t loop_filter_parameter_flag;
1314 /* int32_t alpha_offset; */
1315 /* int32_t beta_offset; */
1316 
1317 /* Pb_picture_header(void) */
1318 int32_t picture_coding_type;
1319 
1320 /*picture_display_extension(void)*/
1321 int32_t frame_centre_horizontal_offset[4];
1322 int32_t frame_centre_vertical_offset[4];
1323 
1324 /* slice_header(void) */
1325 int32_t img_width;
1326 int32_t slice_vertical_position;
1327 int32_t slice_vertical_position_extension;
1328 int32_t fixed_slice_qp;
1329 int32_t slice_qp;
1330 int32_t slice_horizontal_positon;       /* added by mz, 2008.04 */
1331 int32_t slice_horizontal_positon_extension;
1332 
1333 int32_t StartCodePosition;
1334 int32_t background_pred_flag;
1335 
1336 
1337 /* Reference Manage */
1338 int32_t displaydelay;
1339 int32_t picture_reorder_delay;
1340 #if M3480_TEMPORAL_SCALABLE
1341 int32_t temporal_id_exist_flag;
1342 #endif
1343 
1344 int32_t gop_size;
1345 struct reference_management decod_RPS[MAXGOP];
1346 struct reference_management curr_RPS;
1347 int32_t last_output;
1348 int32_t trtmp;
1349 #if M3480_TEMPORAL_SCALABLE
1350 int32_t cur_layer;
1351 #endif
1352 
1353 /* Adaptive frequency weighting quantization */
1354 #if FREQUENCY_WEIGHTING_QUANTIZATION
1355 int32_t weight_quant_enable_flag;
1356 int32_t load_seq_weight_quant_data_flag;
1357 
1358 int32_t pic_weight_quant_enable_flag;
1359 int32_t pic_weight_quant_data_index;
1360 int32_t weighting_quant_param;
1361 int32_t weighting_quant_model;
1362 int16_t quant_param_undetail[6];      /* M2148 2007-09 */
1363 int16_t quant_param_detail[6];        /* M2148 2007-09 */
1364 int32_t WeightQuantEnable;              /* M2148 2007-09 */
1365 int32_t mb_adapt_wq_disable;            /* M2331 2008-04 */
1366 int32_t mb_wq_mode;                     /* M2331 2008-04 */
1367 #if CHROMA_DELTA_QP
1368 int32_t chroma_quant_param_disable;
1369 int32_t chroma_quant_param_delta_u;
1370 int32_t chroma_quant_param_delta_v;
1371 #endif
1372 
1373 int32_t b_pre_dec_intra_img;
1374 int32_t pre_dec_img_type;
1375 int32_t CurrentSceneModel;
1376 #endif
1377 
1378 int32_t curr_IDRcoi;
1379 int32_t curr_IDRtr;
1380 int32_t next_IDRtr;
1381 int32_t next_IDRcoi;
1382 int32_t end_SeqTr;
1383 
1384 #if MB_DQP
1385 int32_t lastQP;
1386 /* FILE * testQP; */
1387 #endif
1388 
1389 };
1390 /* extern Video_Dec_data *hd; */
1391 
1392 struct DecodingEnvironment_s {
1393 	uint32_t    Dbuffer;
1394 	int32_t             Dbits_to_go;
1395 	uint8_t            *Dcodestrm;
1396 	int32_t             *Dcodestrm_len;
1397 };
1398 
1399 /* added at rm52k version */
1400 
1401 struct inp_par;
1402 
1403 
1404 
1405 /* ! Slice */
1406 struct slice {
1407 	int32_t                 picture_id;
1408 	int32_t                 qp;
1409 	int32_t                 picture_type; /* !< picture type */
1410 	int32_t                 start_mb_nr;
1411 	 /* !< number of different partitions */
1412 	int32_t                 max_part_nr;
1413 
1414 	/* added by lzhang */
1415 	/* !< pointer to struct of context models for use in AEC */
1416 	struct SyntaxInfoContexts_s  *syn_ctx;
1417 };
1418 
1419 struct alfdatapart {
1420 	struct Bitstream_s           *bitstream;
1421 	struct DecodingEnvironment_s de_AEC;
1422 	struct SyntaxInfoContexts_s  *syn_ctx;
1423 };
1424 /* static int32_t alfParAllcoated = 0; */
1425 
1426 /* input parameters from configuration file */
1427 struct inp_par {
1428 	int32_t   buf_cycle;                 /* <! Frame buffer size */
1429 	int32_t   ref_pic_order;             /* <! ref order */
1430 	int32_t   output_dec_pic;            /* <! output_dec_pic */
1431 	int32_t   profile_id;
1432 	int32_t   level_id;
1433 	int32_t   chroma_format;
1434 	int32_t   g_uiMaxSizeInBit;
1435 	int32_t   alpha_c_offset;
1436 	int32_t   beta_offset;
1437 	int32_t   useNSQT;
1438 #if MB_DQP
1439 	int32_t   useDQP;
1440 #endif
1441 	int32_t   useSDIP;
1442 	int32_t sao_enable;
1443 #if M3480_TEMPORAL_SCALABLE
1444 	int32_t temporal_id_exist_flag;
1445 #endif
1446 	int32_t alf_enable;
1447 
1448 	int32_t crossSliceLoopFilter;
1449 
1450 	int32_t   sample_bit_depth;  /* sample bit depth */
1451   /* decoded file bit depth (assuming output_bit_depth is
1452   less or equal to sample_bit_depth) */
1453 	int32_t   output_bit_depth;
1454 
1455 
1456 	int32_t MD5Enable;
1457 
1458 #if OUTPUT_INTERLACE_MERGED_PIC
1459 	int32_t output_interlace_merged_picture;
1460 #endif
1461 
1462 };
1463 
1464 /* extern struct inp_par *input; */
1465 
1466 struct outdata_s {
1467 #if RD170_FIX_BG
1468 	struct STDOUT_DATA_s stdoutdata[REF_MAXBUFFER];
1469 #else
1470 	struct STDOUT_DATA_s stdoutdata[8];
1471 #endif
1472 	int32_t         buffer_num;
1473 };
1474 /* outdata outprint; */
1475 
1476 #define PAYLOAD_TYPE_IDERP 8
1477 
1478 struct Bitstream_s *AllocBitstream(void);
1479 void FreeBitstream(void);
1480 #if TRACE
1481 void tracebits2(const int8_t *trace_str, int32_t len, int32_t info);
1482 #endif
1483 
1484 /* int32_t   direct_mv[45][80][4][4][3]; // only to verify result */
1485 
1486 #define I_PICTURE_START_CODE    0xB3
1487 #define PB_PICTURE_START_CODE   0xB6
1488 #define SLICE_START_CODE_MIN    0x00
1489 #define SLICE_START_CODE_MAX    0x8F
1490 #define USER_DATA_START_CODE    0xB2
1491 #define SEQUENCE_HEADER_CODE    0xB0
1492 #define EXTENSION_START_CODE    0xB5
1493 #define SEQUENCE_END_CODE       0xB1
1494 #define VIDEO_EDIT_CODE         0xB7
1495 
1496 
1497 #define SEQUENCE_DISPLAY_EXTENSION_ID            2
1498 #define COPYRIGHT_EXTENSION_ID                   4
1499 #define CAMERAPARAMETERS_EXTENSION_ID            11
1500 #define PICTURE_DISPLAY_EXTENSION_ID             7
1501 #if M3480_TEMPORAL_SCALABLE
1502 #define TEMPORAL_SCALABLE_EXTENSION_ID           3
1503 #endif
1504 
1505 #if ROI_M3264
1506 #if RD1501_FIX_BG
1507 #define LOCATION_DATA_EXTENSION_ID               12
1508 #else
1509 #define LOCATION_DATA_EXTENSION_ID               15
1510 #endif
1511 #endif
1512 
1513 #if AVS2_HDR_HLS
1514 #define MASTERING_DISPLAY_AND_CONTENT_METADATA_EXTENSION     10
1515 #endif
1516 
1517 void malloc_slice(void);
1518 void free_slice(void);
1519 
1520 
1521 void read_ipred_modes(void);
1522 
1523 int32_t  AEC_startcode_follows(int32_t eos_bit);
1524 
1525 /* extern uint32_t max_value_s; */
1526 
1527 /*ComAdaptiveLoopFilter.h*/
1528 #define ALF_MAX_NUM_COEF       9
1529 #define NO_VAR_BINS            16
1530 
1531 
1532 #define RPM_BEGIN                                              0x100
1533 #define ALF_BEGIN                                              0x180
1534 #define RPM_END                                                0x280
1535 
1536 union param_u {
1537 	struct {
1538 		uint16_t data[RPM_END - RPM_BEGIN];
1539 	} l;
1540 	struct {
1541 		/*sequence*/
1542 		uint16_t profile_id;
1543 		uint16_t level_id;
1544 		uint16_t progressive_sequence;
1545 		uint16_t is_field_sequence;
1546 		uint16_t horizontal_size;
1547 		uint16_t vertical_size;
1548 		uint16_t chroma_format;
1549 		uint16_t sample_precision;
1550 		uint16_t encoding_precision;
1551 		uint16_t aspect_ratio_information;
1552 		uint16_t frame_rate_code;
1553 		uint16_t bit_rate_lower;
1554 		uint16_t bit_rate_upper;
1555 		uint16_t low_delay;
1556 		uint16_t temporal_id_exist_flag;
1557 		uint16_t g_uiMaxSizeInBit;
1558 
1559 #define BACKGROUND_PICTURE_DISABLE_BIT         11
1560 #define B_MHPSKIP_ENABLED_BIT                  10
1561 #define DHP_ENABLED_BIT                         9
1562 #define WSM_ENABLED_BIT                        8
1563 #define INTER_AMP_ENABLE_BIT                   7
1564 #define USENSQT_BIT                            6
1565 #define USESDIP_BIT                            5
1566 #define B_SECT_ENABLED_BIT                     4
1567 #define SAO_ENABLE_BIT                         3
1568 #define ALF_ENABLE_BIT                         2
1569 #define B_PMVR_ENABLED_BIT                     1
1570 #define CROSSSLICELOOPFILTER_BIT               0
1571 		uint16_t avs2_seq_flags;
1572 
1573 		uint16_t num_of_RPS;
1574 		uint16_t picture_reorder_delay;
1575 		/*PIC*/
1576 		uint16_t time_code_flag;
1577 		uint16_t time_code;
1578 		uint16_t background_picture_flag;
1579 		uint16_t background_picture_output_flag;
1580 		uint16_t coding_order;
1581 		uint16_t cur_layer;
1582 		uint16_t displaydelay; /*???*/
1583 		uint16_t predict;     /*???*/
1584 		uint16_t RPS_idx;      /*???*/
1585 		uint16_t referd_by_others_cur;
1586 		uint16_t num_of_ref_cur;
1587 		uint16_t ref_pic_cur[8];
1588 		uint16_t num_to_remove_cur;
1589 		uint16_t remove_pic_cur[8];
1590 		uint16_t progressive_frame;
1591 		uint16_t picture_structure;
1592 		uint16_t top_field_first;
1593 		uint16_t repeat_first_field;
1594 		uint16_t is_top_field;
1595 
1596 		uint16_t picture_coding_type;
1597 		uint16_t background_pred_flag;
1598 		uint16_t background_reference_enable;
1599 		uint16_t random_access_decodable_flag;
1600 		uint16_t lcu_size;
1601 		uint16_t alpha_c_offset;
1602 		uint16_t beta_offset;
1603 		uint16_t chroma_quant_param_delta_cb;
1604 		uint16_t chroma_quant_param_delta_cr;
1605 		uint16_t loop_filter_disable;
1606 
1607 		uint16_t video_signal_type;
1608 		uint16_t color_description;
1609 		uint16_t display_primaries_x[3];
1610 		uint16_t display_primaries_y[3];
1611 		uint16_t white_point_x;
1612 		uint16_t white_point_y;
1613 		uint16_t max_display_mastering_luminance;
1614 		uint16_t min_display_mastering_luminance;
1615 		uint16_t max_content_light_level;
1616 		uint16_t max_picture_average_light_level;
1617 	} p;
1618 	struct {
1619 		uint16_t padding[ALF_BEGIN - RPM_BEGIN];
1620 		uint16_t picture_alf_enable_Y;
1621 		uint16_t picture_alf_enable_Cb;
1622 		uint16_t picture_alf_enable_Cr;
1623 		uint16_t alf_filters_num_m_1;
1624 		uint16_t region_distance[16];
1625 		uint16_t alf_cb_coeffmulti[9];
1626 		uint16_t alf_cr_coeffmulti[9];
1627 		uint16_t alf_y_coeffmulti[16][9];
1628 	} alf;
1629 };
1630 
1631 
1632 struct avs2_decoder {
1633 	uint8_t init_hw_flag;
1634 	struct inp_par   input;
1635 	struct ImageParameters_s  img;
1636 	struct Video_Com_data_s  hc;
1637 	struct Video_Dec_data_s  hd;
1638 	union param_u param;
1639 	struct avs2_frame_s frm_pool[AVS2_MAX_BUFFER_NUM];
1640 	struct avs2_frame_s *fref[REF_MAXBUFFER];
1641 #ifdef AML
1642 	/*used for background
1643 	when background_picture_output_flag is 0*/
1644 	struct avs2_frame_s *m_bg;
1645 	/*current background picture, ether m_bg or fref[..]*/
1646 	struct avs2_frame_s *f_bg;
1647 #endif
1648 	struct outdata_s outprint;
1649 	uint32_t cm_header_start;
1650 	struct ALFParam_s m_alfPictureParam[NUM_ALF_COMPONENT];
1651 #ifdef FIX_CHROMA_FIELD_MV_BK_DIST
1652 	int8_t bk_img_is_top_field;
1653 #endif
1654 #ifdef AML
1655 	int32_t lcu_size;
1656 	int32_t lcu_size_log2;
1657 	int32_t lcu_x_num;
1658 	int32_t lcu_y_num;
1659 	int32_t lcu_total;
1660 	int32_t ref_maxbuffer;
1661 	int32_t to_prepare_disp_count;
1662 	int8_t bufmgr_error_flag;
1663 #endif
1664 };
1665 
1666 
1667 extern void write_frame(struct avs2_decoder *avs2_dec, int32_t pos);
1668 extern void init_frame_t(struct avs2_frame_s *currfref);
1669 extern void report_frame(struct avs2_decoder *avs2_dec,
1670 	struct outdata_s *data, int32_t pos);
1671 
1672 extern int avs2_post_process(struct avs2_decoder *avs2_dec);
1673 extern void avs2_prepare_header(struct avs2_decoder *avs2_dec,
1674 	int32_t start_code);
1675 extern int32_t avs2_process_header(struct avs2_decoder *avs2_dec);
1676 
1677 extern void init_avs2_decoder(struct avs2_decoder *avs2_dec);
1678 
1679 extern int32_t avs2_init_global_buffers(struct avs2_decoder *avs2_dec);
1680 
1681 extern bool is_avs2_print_param(void);
1682 extern bool is_avs2_print_bufmgr_detail(void);
1683 #endif
1684 
1685