/* The copyright in this software is being made available under the BSD
 * License, included below. This software may be subject to other third party
 * and contributor rights, including patent rights, and no such rights are
 * granted under this license.
 *
 * Copyright (c) 2002-2016, Audio Video coding Standard Workgroup of China
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *  * Neither the name of Audio Video coding Standard Workgroup of China
 *    nor the names of its contributors maybe
 *    used to endorse or promote products
 *    derived from this software without
 *    specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */




/*
 * File name: global.h
 * Function:  global definitions for for AVS decoder.
 *
 */

#ifndef _GLOBAL_H_
#define _GLOBAL_H_

/* #include <stdio.h>                              //!< for FILE */
/* #include <stdlib.h> */

#define AML
#define SANITY_CHECK
#undef NO_DISPLAY

/* #include "define.h" */
#define RD      "19.2"
#define VERSION "19.2"

#define RESERVED_PROFILE_ID      0x24
#define BASELINE_PICTURE_PROFILE 18
#define BASELINE_PROFILE         32  /* 0x20 */
#define BASELINE10_PROFILE       34  /* 0x22 */


#define SCENE_PROFILE            48  /* 0x21 */
#define SCENE10_PROFILE          50  /* 0x23 */

#define TRACE                    0 /* !< 0:Trace off 1:Trace on */


/* Type definitions and file operation for Windows/Linux
 * All file operations for windows are replaced with native (FILE *) operations
 * Falei LUO (falei.luo@vipl.ict.ac.cn)
 * */

#define _FILE_OFFSET_BITS 64       /* for 64 bit fseeko */
#define fseek fseeko

#define int16 int16_t
#define int64 int64_t

/* ////////////////// bug fix ///////////////////////////// */
#define ALFSliceFix                        1
#define WRITENBIT_FIX                      1
#define FIX_PROFILE_LEVEL_DPB_RPS_1        1
#define FIX_PROFILE_LEVEL_DPB_RPS_2        1
#define FIX_RPS_PICTURE_REMOVE             1   /* flluo@pku.edu.cn */
#define Mv_Clip                            1   /* yuquanhe@hisilicon.com */
#define REMOVE_UNUSED                      1   /* yuquanhe@hisilicon.com */
#define SAO_Height_Fix                     1   /* yuquanhe@hisilicon.com */
#define B_BACKGROUND_Fix                   1   /* yuquanhe@hisilicon.com */
#define Check_Bitstream                    1   /* yuquanhe@hisilicon.com */
#define Wq_param_Clip                      1   /* yuquanhe@hisilicon.com */
    /* luofalei flluo@pku.edu.cn , wlq15@mails.tsinghua.edu.cn ,
    Longfei.Wang@mediatek.com */
#define RD1501_FIX_BG                      1
    /* yuquanhe@hisilicon.com ; he-yuan.lin@mstarsemi.com */
#define Mv_Rang                            1
     /* Longfei.Wang@mediatek.com ;fred.chiu@mediatek.com
     jie1222.chen@samsung.com */
#define RD160_FIX_BG                       1
     /* Y_K_Tu@novatek.com.tw, he-yuan.lin@mstarsemi.com,
     victor.huang@montage-tech.com M4041 */
#define RD1601_FIX_BG                      1
#define SEQ_CHANGE_CHECKER                 1    /* he-yuan.lin@mstarsemi.com */
#define M4140_END_OF_SLICE_CHECKER         1    /* he-yuan.lin@mstarsemi.com */
     /* wlq15@mails.tsinghua.edu.cn */
#define Mv_check_bug                       1
#define SAO_ASSERTION_FIX                  1    /* fred.chiu@mediatek.com */
#define FIELD_HORI_MV_NO_SCALE_FIX         1    /* fred.chiu@mediatek.com */
#define RD170_FIX_BG                       1
#define FIX_CHROMA_FIELD_MV_BK_DIST        1
#define FIX_LUMA_FIELD_MV_BK_DIST          1
#define FIX_CHROMA_FIELD_MV_CLIP           1
#if 1
#define FIX_FLUSH_DPB_BY_LF                1    /* fred.chiu@mediatek.com */
#define FIX_SEQ_END_FLUSH_DPB_BY_LF        1   /* fred.chiu@mediatek.com */
#else
#define FIX_FLUSH_DPB_BY_LF                0    /* fred.chiu@mediatek.com */
#define FIX_SEQ_END_FLUSH_DPB_BY_LF        0   /* fred.chiu@mediatek.com */
#endif
#define RD191_FIX_BUG                      1  /* yuquanhe@hsilicon.com */
#define SYM_MV_SCALE_FIX                   1/* peisong.chen@broadcom.com */
#define BUG_10BIT_REFINEQP                 0 /* wangzhenyu */



#if RD191_FIX_BUG
#endif

/************************
 * AVS2 macros start
 **************************/

#define INTERLACE_CODING                   1
#if INTERLACE_CODING  /* M3531: MV scaling compensation */
/* Luma component */
#define HALF_PIXEL_COMPENSATION            1 /* common functions definition */
#define HALF_PIXEL_COMPENSATION_PMV        1 /* spacial MV prediction */
#define HALF_PIXEL_COMPENSATION_DIRECT     1 /* B direct mode */
  /* MV derivation method 1, weighted P_skip mode */
#define HALF_PIXEL_COMPENSATION_M1         1
  /* M1 related with mv-scaling function */
#define HALF_PIXEL_COMPENSATION_M1_FUCTION 1
#define HALF_PIXEL_COMPENSATION_MVD        1 /* MV scaling from FW->BW */
/* Chroma components */
  /* chroma MV is scaled with luma MV for 4:2:0 format */
#define HALF_PIXEL_CHROMA                  1
  /* half pixel compensation for p skip/direct */
#define HALF_PIXEL_PSKIP                   1
#define INTERLACE_CODING_FIX               1 /* HLS fix */
#define OUTPUT_INTERLACE_MERGED_PIC        1

#endif
/*
 *******************************
AVS2 10bit/12bit profile
 ********************************
 */

#define DBFIX_10bit              1

#define BUG_10bit              1

/*
 ***************************************
AVS2 HIGH LEVEL SYNTAX
 ***************************************
 */
#define AVS2_HDR_HLS             1
 /* AVS2 HDR technology //yuquanhe@hisilicon.com */
#define AVS2_HDR_Tec                       1
#if AVS2_HDR_Tec
#define HDR_CHROMA_DELTA_QP                1 /* M3905 */
#define HDR_ADPTIVE_UV_DELTA                  1
#endif
/*
 *************************************
AVS2 S2
 *************************************
 */
#define AVS2_S2_FASTMODEDECISION 1
#define RD1510_FIX_BG            1      /* 20160714, flluo@pku.edu.cn */


/* ////////////////// prediction techniques ///////////////////////////// */
#define LAM_2Level_TU            0.8


#define DIRECTION                4
#define DS_FORWARD               4
#define DS_BACKWARD              2
#define DS_SYM                   3
#define DS_BID                   1

#define MH_PSKIP_NUM             4
#define NUM_OFFSET               0
#define BID_P_FST                1
#define BID_P_SND                2
#define FW_P_FST                 3
#define FW_P_SND                 4
#define WPM_NUM                  3
      /* M3330 changes it to 2, the original value is 3 */
#define MAX_MVP_CAND_NUM         2

#define DMH_MODE_NUM             5     /* Number of DMH mode */
#define TH_ME                    0     /* Threshold of ME */

#define MV_SCALE                 1

/* ///// reference picture management // */
#define FIX_MAX_REF              1     /* Falei LUO, flluo@pku.edu.cn */
#if FIX_MAX_REF
      /* maximum number of reference frame for each frame */
#define MAXREF                   7
#define MAXGOP                   32
#endif

/* #define REF_MAXBUFFER            7 */
/* more bufferes for displaying and background */
/* #define REF_MAXBUFFER            15 */
#if 1
#define REF_MAXBUFFER            23
#define REF_BUFFER  16
#else
#if RD170_FIX_BG
#define REF_MAXBUFFER            16
#else
#define REF_MAXBUFFER            7
#endif
#endif

#ifdef TO_PORTING
    /* block-composed background reference, fangdong@mail.ustc.edu.cn */
#define BCBR                     1
#else
#define BCBR    0
#endif
/* one more buffer for background when background_picture_output_flag is 0*/
#define AVS2_MAX_BUFFER_NUM               (REF_MAXBUFFER + 1)

/* /////////////////Adaptive Loop Filter////////////////////////// */
#define NUM_ALF_COEFF_CTX        1
#define NUM_ALF_LCU_CTX          4

#define LAMBDA_SCALE_LUMA       (1.0)
#define LAMBDA_SCALE_CHROMA     (1.0)



/* ////////////////// entropy coding ///////////////////////////// */
   /* M3090: Make sure rs1 will not overflow for 8-bit unsign char */
#define NUN_VALUE_BOUND          254
#define Encoder_BYPASS_Final     1    /* M3484 */
#define Decoder_Bypass_Annex     0    /* M3484 */
#define Decoder_Final_Annex      0    /* M3540 */


/* ////////////////// coefficient coding ///// */
     /* M3035 size of an coefficient group, 4x4 */
#define CG_SIZE                  16

#define SWAP(x, y) {\
	(y) = (y) ^ (x);\
	(x) = (y) ^ (x);\
	(y) = (x) ^ (y);\
}

/* ////////////////// encoder optimization /////// */
#define TH                                 2

#define M3624MDLOG                             /* reserved */

#define TDRDO                               1  /* M3528 */
/* #define FIX_TDRDO_BG  1  // flluo@pku.edu.cn, 20160318// */
#define RATECONTROL                         1  /* M3580 M3627 M3689 */
#define AQPO                                1  /* M3623 */
#define AQPOM3694                           0
#define AQPOM4063                           1
#define AQPOM3762                           1
#define BGQPO                               1  /* M4061 */
#if BGQPO
#define LONGREFERENCE                       32
#endif

/* #define REPORT */
/* ////////////////// Quantization   /////////////////////////////////////// */
 /* Adaptive frequency weighting quantization */
#define FREQUENCY_WEIGHTING_QUANTIZATION    1
#if FREQUENCY_WEIGHTING_QUANTIZATION
#define CHROMA_DELTA_QP                     1
#define AWQ_WEIGHTING                       1
#define AWQ_LARGE_BLOCK_ENABLE              1
#define COUNT_BIT_OVERHEAD                  0
#define AWQ_LARGE_BLOCK_EXT_MAPPING         1
#endif

#define QuantClip                           1
#define QuantMatrixClipFix                  1  /* 20160418, fllu@pku.edu.cn */

#define WQ_MATRIX_FCD                       1
#if !WQ_MATRIX_FCD
#define WQ_FLATBASE_INBIT  7
#else
#define WQ_FLATBASE_INBIT  6
#endif


#define REFINED_QP                          1


/* ////////////////// delta QP ///// */
      /* M3122: the minimum dQP unit is Macro block */
#define MB_DQP                    1
      /* M3122: 1 represents left prediction
      and 0 represents previous prediction */
#define LEFT_PREDICTION           1


/* //////////////////////SAO///////// */
#define NUM_BO_OFFSET             32
#define MAX_NUM_SAO_CLASSES       32
#define NUM_SAO_BO_CLASSES_LOG2   5
#define NUM_SAO_BO_CLASSES_IN_BIT 5
#define MAX_DOUBLE                (1.7e + 308)
#define NUM_SAO_EO_TYPES_LOG2     2
#define NUM_SAO_BO_CLASSES        (1<<NUM_SAO_BO_CLASSES_LOG2)
#define SAO_RATE_THR              0.75
#define SAO_RATE_CHROMA_THR       1
#define SAO_SHIFT_PIX_NUM         4

#define SAO_PARA_CROSS_SLICE      1
#define SAO_MULSLICE_FTR_FIX      1

/* /////////////////// Transform ///////////////////// */
#define SEC_TR_SIZE               4
   /* apply secT to greater than or equal to 8x8 block, */
#define SEC_TR_MIN_BITSIZE        3

#define BUGFIXED_COMBINED_ST_BD   1

/* /////////////////// Scalable ///////////////////// */
#define M3480_TEMPORAL_SCALABLE   1
#define TEMPORAL_MAXLEVEL         8
#define TEMPORAL_MAXLEVEL_BIT     3




/*
 *************************************
 * AVS2 macros end
 *
 *************************************
 */

#define CHROMA                    1
#define LUMA_8x8                  2
#define NUM_BLOCK_TYPES           8

#if (!defined clamp)
     /* !< clamp a to the range of [b;c] */
#define clamp(a, b, c) ((a) < (b) ? (b) : ((a) > (c) ? (c) : (a)))
#endif

	/* POC200301 moved from defines.h */
#define LOG2_MAX_FRAME_NUM_MINUS4    4
	/* !< bytes for one frame */
#define MAX_CODED_FRAME_SIZE         15000000

/* ----------------------- */
/* FLAGS and DEFINES for new chroma intra prediction, Dzung Hoang */
/* Threshold values to zero out quantized transform coefficients. */
/* Recommend that _CHROMA_COEFF_COST_ be low to improve chroma quality */
#define _LUMA_COEFF_COST_         4 /* !< threshold for luma coeffs */
  /* !< Number of pixels padded around the reference frame (>=4) */
#define IMG_PAD_SIZE              64

#define OUTSTRING_SIZE            255

	/* !< abs macro, faster than procedure */
#define absm(A) ((A) < (0) ? (-(A)) : (A))
    /* !< used for start value for some variables */
#define MAX_VALUE                999999

#define Clip1(a)     ((a) > 255 ? 255:((a) < 0 ? 0 : (a)))
#define Clip3(min, max, val) (((val) < (min)) ?\
		(min) : (((val) > (max)) ? (max) : (val)))

/* --------------------------------------------- */

/* block size of block transformed by AVS */
#define PSKIPDIRECT               0
#define P2NX2N                    1
#define P2NXN                     2
#define PNX2N                     3
#define PHOR_UP                   4
#define PHOR_DOWN                 5
#define PVER_LEFT                 6
#define PVER_RIGHT                7
#define PNXN                      8
#define I8MB                      9
#define I16MB                     10
#define IBLOCK                    11
#define InNxNMB                   12
#define INxnNMB                   13
#define MAXMODE                   14   /* add yuqh 20130824 */
#define  LAMBDA_ACCURACY_BITS     16
#define  LAMBDA_FACTOR(lambda) ((int)((double)(1 << LAMBDA_ACCURACY_BITS)\
		* lambda + 0.5))
#define  WEIGHTED_COST(factor, bits) (((factor) * (bits))\
		>> LAMBDA_ACCURACY_BITS)
#define  MV_COST(f, s, cx, cy, px, py) (WEIGHTED_COST(f, mvbits[((cx) << (s))\
		- px] +	mvbits[((cy) << (s)) - py]))
#define  REF_COST(f, ref)              (WEIGHTED_COST(f, refbits[(ref)]))

#define  BWD_IDX(ref)                 (((ref) < 2) ? 1 - (ref) : (ref))
#define  REF_COST_FWD(f, ref) (WEIGHTED_COST(f,\
		((img->num_ref_pic_active_fwd_minus1 == 0) ?\
			0 : refbits[(ref)])))
#define  REF_COST_BWD(f, ef) (WEIGHTED_COST(f,\
		((img->num_ref_pic_active_bwd_minus1 == 0) ?\
			0 : BWD_IDX(refbits[ref]))))

#define IS_INTRA(MB) ((MB)->cuType == I8MB ||\
	(MB)->cuType == I16MB ||\
	(MB)->cuType == InNxNMB || (MB)->cuType == INxnNMB)
#define IS_INTER(MB) ((MB)->cuType != I8MB &&\
	(MB)->cuType != I16MB && (MB)->cuType != InNxNMB\
	&& (MB)->cuType != INxnNMB)
#define IS_INTERMV(MB) ((MB)->cuType != I8MB &&\
	(MB)->cuType != I16MB && (MB)->cuType != InNxNMB &&\
	(MB)->cuType != INxnNMB && (MB)->cuType != 0)


#define IS_DIRECT(MB) ((MB)->cuType == PSKIPDIRECT && (img->type == B_IMG))
#define IS_P_SKIP(MB) ((MB)->cuType == PSKIPDIRECT &&\
	(((img->type == F_IMG)) || ((img->type == P_IMG))))
#define IS_P8x8(MB)  ((MB)->cuType == PNXN)

/* Quantization parameter range */
#define MIN_QP                       0
#define MAX_QP                       63
#define SHIFT_QP                     11

/* Picture types */
#define INTRA_IMG                    0   /* !< I frame */
#define INTER_IMG                    1   /* !< P frame */
#define B_IMG                        2   /* !< B frame */
#define I_IMG                        0   /* !< I frame */
#define P_IMG                        1   /* !< P frame */
#define F_IMG                        4  /* !< F frame */

#define BACKGROUND_IMG               3

#define BP_IMG                       5


/* Direct Mode types */
#define MIN_CU_SIZE                  8
#define MIN_BLOCK_SIZE               4
#define MIN_CU_SIZE_IN_BIT           3
#define MIN_BLOCK_SIZE_IN_BIT        2
#define BLOCK_MULTIPLE              (MIN_CU_SIZE/(MIN_BLOCK_SIZE))
#define MAX_CU_SIZE                  64
#define MAX_CU_SIZE_IN_BIT           6
#define B4X4_IN_BIT                  2
#define B8X8_IN_BIT                  3
#define B16X16_IN_BIT                4
#define B32X32_IN_BIT                5
#define B64X64_IN_BIT                6
    /* !< # luma intra prediction modes */
#define NUM_INTRA_PMODE              33
    /* number of luma modes for full RD search */
#define NUM_MODE_FULL_RD             9
    /* !< #chroma intra prediction modes */
#define NUM_INTRA_PMODE_CHROMA       5

/* luma intra prediction modes */

#define DC_PRED                      0
#define PLANE_PRED                   1
#define BI_PRED                      2
#define VERT_PRED                    12
#define HOR_PRED                     24


/* chroma intra prediction modes */
#define DM_PRED_C                    0
#define DC_PRED_C                    1
#define HOR_PRED_C                   2
#define VERT_PRED_C                  3
#define BI_PRED_C                    4

#define EOS                          1         /* !< End Of Sequence */
	/* !< Start Of Picture */
#define SOP                          2

#define DECODING_OK                  0
#define SEARCH_SYNC                  1
#define DECODE_MB                    1

#ifndef max
  /* !< Macro returning max value */
#define max(a, b)                   ((a) > (b) ? (a) : (b))
  /* !< Macro returning min value */
#define min(a, b)                   ((a) < (b) ? (a) : (b))
#endif


#define XY_MIN_PMV                   1
#if XY_MIN_PMV
#define MVPRED_xy_MIN                0
#else
#define MVPRED_MEDIAN                0
#endif
#define MVPRED_L                     1
#define MVPRED_U                     2
#define MVPRED_UR                    3

#define DUAL                         4
#define FORWARD                      0
#define BACKWARD                     1
#define SYM                          2
#define BID                          3
#define INTRA                        -1

#define BUF_CYCLE                    5

#define ROI_M3264                    1      /* ROI Information Encoding */

#define PicExtensionData             1


#define REF_OUTPUT                   1  /* M3337 */


/* MV scaling 14 bit */
#define MULTI                        16384
#define HALF_MULTI                   8192
#define OFFSET                       14
/* end of MV scaling */
 /* store the middle pixel's mv in a motion information unit */
#define MV_DECIMATION_FACTOR         4

/* BUGFIX_AVAILABILITY_INTRA */
#define NEIGHBOR_INTRA_LEFT                 0
#define NEIGHBOR_INTRA_UP                   1
#define NEIGHBOR_INTRA_UP_RIGHT             2
#define NEIGHBOR_INTRA_UP_LEFT              3
#define NEIGHBOR_INTRA_LEFT_DOWN            4
/* end of BUGFIX_AVAILABILITY_INTRA */

/* end #include "define.h" */

/*#include "commonStructures.h"*/

/*typedef uint16_t byte;*/    /* !< byte type definition */
#define byte uint16_t
#define pel_t byte

enum BitCountType_e {
	BITS_HEADER,
	BITS_TOTAL_MB,
	BITS_MB_MODE,
	BITS_INTER_MB,
	BITS_CBP_MB,
	BITS_CBP01_MB,
	BITS_COEFF_Y_MB,
	BITS_COEFF_UV_MB,
	BITS_DELTA_QUANT_MB,
	BITS_SAO_MB,
	MAX_BITCOUNTER_MB
};


enum SAOEOClasses {
/* EO Groups, the assignments depended on
how you implement the edgeType calculation */
	SAO_CLASS_EO_FULL_VALLEY = 0,
	SAO_CLASS_EO_HALF_VALLEY = 1,
	SAO_CLASS_EO_PLAIN       = 2,
	SAO_CLASS_EO_HALF_PEAK   = 3,
	SAO_CLASS_EO_FULL_PEAK   = 4,
	SAO_CLASS_BO             = 5,
	NUM_SAO_EO_CLASSES = SAO_CLASS_BO,
	NUM_SAO_OFFSET
};

struct SAOstatdata {
	int32_t diff[MAX_NUM_SAO_CLASSES];
	int32_t  count[MAX_NUM_SAO_CLASSES];
};

struct CopyRight_s {
	int32_t extension_id;
	int32_t copyright_flag;
	int32_t copyright_id;
	int32_t original_or_copy;
	int32_t reserved;
	int32_t copyright_number;
};

struct CameraParamters_s {
	int32_t reserved;
	int32_t camera_id;
	int32_t height_of_image_device;
	int32_t focal_length;
	int32_t f_number;
	int32_t vertical_angle_of_view;
	int32_t camera_position_x;
	int32_t camera_position_y;
	int32_t camera_position_z;
	int32_t camera_direction_x;
	int32_t camera_direction_y;
	int32_t camera_direction_z;
	int32_t image_plane_vertical_x;
	int32_t image_plane_vertical_y;
	int32_t image_plane_vertical_z;
};

/* ! SNRParameters */
struct SNRParameters_s {
	double snr_y;               /* !< current Y SNR */
	double snr_u;               /* !< current U SNR */
	double snr_v;               /* !< current V SNR */
	double snr_y1;              /* !< SNR Y(dB) first frame */
	double snr_u1;              /* !< SNR U(dB) first frame */
	double snr_v1;              /* !< SNR V(dB) first frame */
	double snr_ya;              /* !< Average SNR Y(dB) remaining frames */
	double snr_ua;              /* !< Average SNR U(dB) remaining frames */
	double snr_va;              /* !< Average SNR V(dB) remaining frames */
#if INTERLACE_CODING
	double i_snr_ya;               /* !< current Y SNR */
	double i_snr_ua;               /* !< current U SNR */
	double i_snr_va;               /* !< current V SNR */
#endif
};

/* signal to noise ratio parameters */

/* ! codingUnit */
struct codingUnit {
	uint32_t        ui_MbBitSize;
	int32_t                 uiBitSize;            /* size of MB */
	/* !< number of current syntax element */
	int32_t                 currSEnr;
	int32_t                 slice_nr;
	int32_t                 delta_quant;          /* !< for rate control */
	int32_t                 delta_qp;
	int32_t                 qp;
	int32_t                 bitcounter[MAX_BITCOUNTER_MB];
	struct codingUnit
	*mb_available[3][3]; /*!< pointer to neighboring MBs
		in a 3x3 window of current MB, which is located at [1][1] \n
		NULL pointer identifies neighboring MBs which are unavailable */
	/* some storage of codingUnit syntax elements for global access */
	int32_t                 cuType;
	int32_t                 weighted_skipmode;

	int32_t                 md_directskip_mode;

	int32_t                 trans_size;
	int
	/* !< indices correspond to [forw,backw][block_y][block_x][x,y, dmh] */
	mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][3];

	int32_t  intra_pred_modes[BLOCK_MULTIPLE * BLOCK_MULTIPLE];
	int32_t  real_intra_pred_modes[BLOCK_MULTIPLE * BLOCK_MULTIPLE];
	int32_t  l_ipred_mode;
	int32_t  cbp, cbp_blk;
	uint32_t cbp_bits;

	int32_t                 b8mode[4];
	int32_t                 b8pdir[4];
      /* !< chroma intra prediction mode */
	int32_t                 c_ipred_mode;

   /* !< pointer to neighboring MB (AEC) */
	struct codingUnit   *mb_available_up;
	 /* !< pointer to neighboring MB (AEC) */
	struct codingUnit   *mb_available_left;
	int32_t                 mbAddrA, mbAddrB, mbAddrC, mbAddrD;
       /* !<added by mz, 2008.04 */
	int32_t                 slice_set_index;
     /* added by mz, 2008.04 */
	int32_t                 slice_header_flag;
	int32_t                 sliceqp;         /* added by mz, 2008.04 */
#if MB_DQP
	int32_t                 previouse_qp;
	int32_t                 left_cu_qp;
#endif
	int32_t                 block_available_up;
	int32_t                 block_available_left;

};


/* image parameters */
struct syntaxelement;
struct slice;
struct alfdatapart;
struct SAOBlkParam_s {
	int32_t modeIdc; /* NEW, MERGE, OFF */
	/* NEW: EO_0, EO_90, EO_135, EO_45, BO. MERGE: left, above */
	int32_t typeIdc;
	int32_t startBand; /* BO: starting band index */
	int32_t startBand2;
	int32_t deltaband;
	int32_t offset[MAX_NUM_SAO_CLASSES];
};
struct ALFParam_s {
	int32_t alf_flag;
	int32_t num_coeff;
	int32_t filters_per_group;
	int32_t componentID;
	int32_t filterPattern[16]; /* *filterPattern; */
	int32_t coeffmulti[16][9]; /* **coeffmulti; */
};

enum ALFComponentID {
	ALF_Y = 0,
	ALF_Cb,
	ALF_Cr,
	NUM_ALF_COMPONENT
};
struct ALF_APS_s {
	int32_t usedflag;
	int32_t cur_number;
	int32_t max_number;
	struct ALFParam_s alf_par[NUM_ALF_COMPONENT];
};


/* ------------------------------------------------------
 * frame data
 */
struct avs2_frame_s {
	int32_t imgcoi_ref;
	byte * *referenceFrame[3];
	int32_t **refbuf;
	int32_t ***mvbuf;
#if 0
	double saorate[NUM_SAO_COMPONENTS];
#endif
	byte ***ref;

	int32_t imgtr_fwRefDistance;
	int32_t refered_by_others;
	int32_t is_output;
	int32_t to_prepare_disp;
#if M3480_TEMPORAL_SCALABLE
	/* temporal level setted in configure file */
	int32_t temporal_id;
#endif
	byte **oneForthRefY;
#if FIX_MAX_REF
	int32_t ref_poc[MAXREF];
#else
	int32_t ref_poc[4];
#endif
#ifdef AML
	int32_t index;
	int32_t mmu_alloc_flag;
	int32_t lcu_size_log2;
	/*uint32_t header_adr;*/
	uint32_t mc_y_adr;
	uint32_t mc_u_v_adr;
	uint32_t mc_canvas_y;
	uint32_t mc_canvas_u_v;
	uint32_t mpred_mv_wr_start_addr;
	uint8_t bg_flag;
	/**/
	unsigned long header_adr;
	/*AVS2_10B_MMU_DW*/
	unsigned long dw_header_adr;

	int buf_size;
	int lcu_total;
	int comp_body_size;
	uint32_t dw_y_adr;
	uint32_t dw_u_v_adr;
	int y_canvas_index;
	int uv_canvas_index;
	struct canvas_config_s canvas_config[2];
	int double_write_mode;
	int bit_depth;
	unsigned long cma_alloc_addr;
	int BUF_index;
	int pic_w;
	int pic_h;
	int stream_offset;
	u32 pts;
	u64 pts64;
	/**/
	int vf_ref;
	int decode_idx;
	int slice_type;
	int32_t imgtr_fwRefDistance_bak;
	int32_t error_mark;
	int32_t decoded_lcu;
#endif
#ifndef MV_USE_FIXED_BUF
	int mv_buf_index;
#endif

	/* picture qos infomation*/
	int max_qp;
	int avg_qp;
	int min_qp;
	int max_skip;
	int avg_skip;
	int min_skip;
	int max_mv;
	int min_mv;
	int avg_mv;

	u32 hw_decode_time;
	u32 frame_size; // For frame base mode

	char *cuva_data_buf;
	int  cuva_data_size;
};


struct ImageParameters_s {
	struct codingUnit    *mb_data;
	int32_t number;                                 /* <! frame number */
	int32_t numIPFrames;

	int32_t type;
	int32_t typeb;
	int32_t typeb_before;

	int32_t qp; /* <! quant for the current frame */
	int32_t current_mb_nr; /* bitstream order */
	int32_t current_slice_nr;
	int32_t tr;   /* <! temporal reference, 8 bit, */

	int32_t width;                   /* !< Number of pels */
	int32_t width_cr;                /* !< Number of pels chroma */
	int32_t height;                  /* !< Number of lines */
	int32_t height_cr;               /* !< Number of lines  chroma */
	int32_t PicWidthInMbs;
	int32_t PicSizeInMbs;
	int32_t block8_x, block8_y;
	int32_t   subblock_x;
	int32_t   subblock_y;

	int32_t num_of_references;
    /* <! Bug Fix: correct picture size for outputted reconstructed pictures */
	int32_t auto_crop_right;
	int32_t auto_crop_bottom;
	int32_t buf_cycle;
	int32_t picture_structure;
	 /* <! pointer to current Slice data struct */
	struct slice       *currentSlice;

	int32_t **predBlock;             /* !< current best prediction mode */
	int32_t **predBlockTmp;
	/* !< the diff pixel values between orginal image and prediction */
	int32_t **resiY;
	/* !< Array containing square values,used for snr computation */
	int32_t *quad;

	/* //location of current MB////// */
	int32_t mb_y;                    /* !< current MB vertical */
	int32_t mb_x;                    /* !< current MB horizontal */
	int32_t pix_y;                   /* !< current pixel vertical */
	int32_t pix_x;                   /* !< current pixel horizontal */
	int32_t pix_c_y;                 /* !< current pixel chroma vertical */
	int32_t pix_c_x; /* !< current pixel chroma horizontal */

	int32_t imgtr_next_P;

	int32_t imgcoi_next_ref;

    /* !< GH ipredmode[90][74];prediction mode for inter frames */
    /* fix from ver 4.1 */
	int32_t **ipredmode;
	int32_t **rec_ipredmode;


	/* //////////////decoder////////////////////////// */
	int32_t max_mb_nr;
	int32_t **intra_block;

	int32_t block_y;
	int32_t block_x;
    /* <! final 4x4 block. Extended to 16x16 for AVS */
	int32_t resiUV[2][MAX_CU_SIZE][MAX_CU_SIZE];

	int32_t **fw_refFrArr;                          /* <! [72][88]; */
	int32_t **bw_refFrArr;                          /* <! [72][88]; */

	int32_t random_access_decodable_flag;

	int32_t seq_header_indicate;
	int32_t B_discard_flag;

	/* B pictures */
	uint32_t pic_distance;

	uint32_t coding_order;

	uint32_t PrevPicDistanceLsb;
	int32_t CurrPicDistanceMsb;

	int32_t PicHeightInMbs;

	int32_t types;

	int32_t new_sequence_flag;
	int32_t sequence_end_flag;            /* <! rm52k_r2 */

	int32_t current_slice_set_index;          /* <! added by mz, 2008.04 */
	int32_t current_slice_header_flag;        /* <! added by mz, 2008.04 */
	int32_t slice_set_qp[64];             /* <! added by mz, 2008.04 */


	int32_t inter_amp_enable;

	/* ////////////////////////encoder////////////////////////// */

	/* int32_t nb_references;     //!< replaced by "num_of_references" */

	int32_t framerate;

	int32_t ***predBlockY;        /* !< all 9 prediction modes */
     /* !< new chroma 8x8 intra prediction modes */
	int32_t ****predBlockUV;

	int32_t **Coeff_all;/* qyu 0821 */

	struct syntaxelement   *MB_SyntaxElements; /* !< by oliver 0612 */

	/* B pictures */

	int32_t b_frame_to_code;
	int32_t num_ref_pic_active_fwd_minus1;
	int32_t num_ref_pic_active_bwd_minus1;
	int32_t mv_range_flag;

	uint32_t frame_num;   /* frame_num for this frame */
	int32_t slice_offset;
	/* the following are sent in the slice header */
	int32_t NoResidueDirect;
	int32_t coded_mb_nr;
	int32_t progressive_frame;
	int32_t tc_reserve_bit;
	 /* the last MB no in current slice.      Yulj 2004.07.15 */
	int32_t mb_no_currSliceLastMB;
	int32_t Seqheader_flag;     /* Added by cjw, 20070327 */
	int32_t EncodeEnd_flag;         /* Carmen, 2007/12/19 */

	uint16_t bbv_delay;

	int32_t tmp_fwBSkipMv[DIRECTION + 1][2];
	int32_t tmp_bwBSkipMv[DIRECTION + 1][2];

	int32_t tmp_pref_fst[MH_PSKIP_NUM + NUM_OFFSET + 1];
	int32_t tmp_pref_snd[MH_PSKIP_NUM + NUM_OFFSET + 1];
	int32_t tmp_fstPSkipMv[MH_PSKIP_NUM + NUM_OFFSET + 1][3];
	int32_t tmp_sndPSkipMv[MH_PSKIP_NUM + NUM_OFFSET + 1][3];
#if BCBR
byte *org_ref_y;
byte *org_ref_u;
byte *org_ref_v;
int32_t  *BLCUidx;
int32_t  *DQPList;
int32_t  iNumCUsInFrame;

byte *org_ref2_y;
byte *org_ref2_u;
byte *org_ref2_v;
int32_t  ref2Num;
#endif
/* //////////////SAO parameter////////////////// */
double        *cur_saorate;
#if 0
int32_t            slice_sao_on[NUM_SAO_COMPONENTS];
#endif
int32_t            pic_alf_on[NUM_ALF_COMPONENT];
struct alfdatapart   *dp_ALF;

#if INTERLACE_CODING
int32_t is_field_sequence;
int32_t is_top_field;
#endif


};



/* ! struct for context management */
struct BiContextType_s {
	uint8_t MPS;   /* 1 bit */
	uint32_t  LG_PMPS; /* 10 bits */
	uint8_t cycno;  /* 2 bits */
};

/***********************************************************************
 * D a t a    t y p e s   f o r  A E C
 ************************************************************************/



struct pix_pos {
	int32_t available;   /* ABCD */
	int32_t mb_addr;    /* MB position */
	int32_t x;
	int32_t y;
	int32_t pos_x;     /* 4x4 x-pos */
	int32_t pos_y;
};



struct STDOUT_DATA_s {
	int32_t type;
	int32_t typeb;

	int32_t   framenum;
	int32_t   tr;
	int32_t   qp;
	double snr_y;
	double snr_u;
	double snr_v;
	int32_t   tmp_time;
	int32_t   picture_structure;
	int32_t   curr_frame_bits;
	int32_t   emulate_bits;

	uint32_t DecMD5Value[4];
#if RD1501_FIX_BG
int32_t background_picture_output_flag;/* Longfei.Wang@mediatek.com */
#endif
#if RD160_FIX_BG
int32_t picture_reorder_delay;
#endif
int8_t str_reference_list[128];  /* reference list information */
};

/**********************************************************************
 * 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
 **********************************************************************
 */
#define NUM_CuType_CTX              (11 + 10)
#define NUM_B8_TYPE_CTX              9
#define NUM_MVD_CTX                 15
#define NUM_PMV_IDX_CTX             10
#define NUM_REF_NO_CTX               6
#define NUM_DELTA_QP_CTX             4
#define NUM_INTER_DIR_CTX           18
#define NUM_INTER_DIR_DHP_CTX           3
#define NUM_B8_TYPE_DHP_CTX             1
#define NUM_AMP_CTX                  2
#define NUM_C_INTRA_MODE_CTX         4
#define NUM_CBP_CTX                  4
#define NUM_BCBP_CTX                 4
#define NUM_MAP_CTX                 17
#define NUM_LAST_CTX                17

#define NUM_INTRA_MODE_CTX           7

#define NUM_ABS_CTX                  5
#define NUM_TU_CTX                   3
#define NUM_SPLIT_CTX                8  /* CU depth */
#if BCBR
#define NUM_BGBLCOK_CTX              1
#endif

#define NUM_BRP_CTX                  8


#define NUM_LAST_CG_CTX_LUMA        12
#define NUM_LAST_CG_CTX_CHROMA       6
#define NUM_SIGCG_CTX_LUMA           2
#define NUM_SIGCG_CTX_CHROMA         1
#define NUM_LAST_POS_CTX_LUMA   56
#define NUM_LAST_POS_CTX_CHROMA 16
#define NUM_LAST_CG_CTX (NUM_LAST_CG_CTX_LUMA + NUM_LAST_CG_CTX_CHROMA)
#define NUM_SIGCG_CTX (NUM_SIGCG_CTX_LUMA + NUM_SIGCG_CTX_CHROMA)
#define NUM_LAST_POS_CTX (NUM_LAST_POS_CTX_LUMA + NUM_LAST_POS_CTX_CHROMA)
#define NUM_SAO_MERGE_FLAG_CTX                   3
#define NUM_SAO_MODE_CTX                         1
#define NUM_SAO_OFFSET_CTX                       2
#define NUM_INTER_DIR_MIN_CTX         2

/*end #include "commonStructures.h"*/

/*#include "commonVariables.h"*/

/*
extern struct CameraParamters_s *camera;
extern struct SNRParameters_s *snr;
extern struct ImageParameters_s *img;
 */

/* avs2_frame_t *fref[REF_MAXBUFFER]; */


#define ET_SIZE 300      /* !< size of error text buffer */


/* ------------------------------------------------------
 * common data
 */
struct Video_Com_data_s {
	int32_t   Bframe_ctr;

	/* FILE *p_log;                     //!< SNR file */
	/* FILE *p_trace;                   //!< Trace file */

	int32_t   tot_time;

	/* Tsinghua for picture_distance  200701 */
	int32_t   picture_distance;

	/* M3178 PKU Reference Manage */
	int32_t   coding_order;
	/* !< current encoding/decoding frame pointer */
	struct avs2_frame_s *f_rec;
	int32_t   seq_header;
    /* !< Array for reference frames of each block */
	int32_t    **refFrArr;
	int32_t    **p_snd_refFrArr;

	byte  ***currentFrame; /* [yuv][height][width] */
#ifdef AML
	struct avs2_frame_s *cur_pic; /*either f_rec or m_bg*/
#endif
	byte   **backgroundReferenceFrame[3];
	byte  ***background_ref;


	int32_t  total_frames;

	/* mv_range, 20071009 */
	int32_t  Min_V_MV;
	int32_t  Max_V_MV;
	int32_t  Min_H_MV;
	int32_t  Max_H_MV;
	/* !< buffer for error message for exit with error(void) */
	int8_t errortext[ET_SIZE];
	int8_t str_list_reference[128];


};
/* extern Video_Com_data *hc; */


/*end #include "commonVariables.h"*/
/* #define USE_PARAM_TXT */
/*
#if FIX_CHROMA_FIELD_MV_BK_DIST
int8_t bk_img_is_top_field;
#endif
*/
/* void write_GB_frame(FILE *p_dec); */

#if !FIX_MAX_REF
#define MAXREF    4
#define MAXGOP    32
#endif

struct StatBits {
	int32_t   curr_frame_bits;
	int32_t   prev_frame_bits;
	int32_t   emulate_bits;
	int32_t   prev_emulate_bits;
	int32_t   last_unit_bits;
	int32_t   bitrate;
	int32_t   total_bitrate[1000];
	int32_t   coded_pic_num;
	int32_t   time_s;
};

struct reference_management {
	int32_t poc;
	int32_t qp_offset;
	int32_t num_of_ref;
	int32_t referd_by_others;
	int32_t ref_pic[MAXREF];
	int32_t predict;
	int32_t deltaRPS;
	int32_t num_to_remove;
	int32_t remove_pic[MAXREF];
};


/* ------------------------------------------------------
 * dec data
 */
struct Video_Dec_data_s {
	byte **background_frame[3];
	int32_t background_reference_enable;

	int32_t background_picture_flag;
	int32_t background_picture_output_flag;
	int32_t background_picture_enable;

	int32_t background_number;

#if BCBR
	int32_t bcbr_enable;
#endif

	int32_t demulate_enable;
	int32_t currentbitoffset;

	int32_t aspect_ratio_information;
	int32_t frame_rate_code;
	int32_t bit_rate_lower;
	int32_t bit_rate_upper;
	int32_t  marker_bit;

	int32_t video_format;
	int32_t color_description;
	int32_t color_primaries;
	int32_t transfer_characteristics;
	int32_t matrix_coefficients;

	int32_t progressive_sequence;
#if INTERLACE_CODING
int32_t is_field_sequence;
#endif
int32_t low_delay;
int32_t horizontal_size;
int32_t vertical_size;
int32_t sample_precision;
int32_t video_range;

int32_t display_horizontal_size;
int32_t display_vertical_size;
int32_t TD_mode;
int32_t view_packing_mode;
int32_t view_reverse;

int32_t b_pmvr_enabled;
int32_t dhp_enabled;
int32_t b_dmh_enabled;
int32_t b_mhpskip_enabled;
int32_t wsm_enabled;
int32_t b_secT_enabled;

int32_t tmp_time;
int32_t FrameNum;
int32_t eos;
int32_t pre_img_type;
int32_t pre_img_types;
/* int32_t pre_str_vec; */
int32_t pre_img_tr;
int32_t pre_img_qp;
int32_t pre_tmp_time;
int32_t RefPicExist;   /* 20071224 */
int32_t BgRefPicExist;
int32_t dec_ref_num;                /* ref order */

/* video edit code */ /* M1956 by Grandview 2006.12.12 */
int32_t vec_flag;

/* Copyright_extension(void) header */
int32_t copyright_flag;
int32_t copyright_identifier;
int32_t original_or_copy;
int64_t copyright_number_1;
int64_t copyright_number_2;
int64_t copyright_number_3;
/* Camera_parameters_extension */
int32_t camera_id;
int32_t height_of_image_device;
int32_t focal_length;
int32_t f_number;
int32_t vertical_angle_of_view;
int32_t camera_position_x_upper;
int32_t camera_position_x_lower;
int32_t camera_position_y_upper;
int32_t camera_position_y_lower;
int32_t camera_position_z_upper;
int32_t camera_position_z_lower;
int32_t camera_direction_x;
int32_t camera_direction_y;
int32_t camera_direction_z;
int32_t image_plane_vertical_x;
int32_t image_plane_vertical_y;
int32_t image_plane_vertical_z;

#if AVS2_HDR_HLS
/* mastering_display_and_content_metadata_extension(void) header */
int32_t display_primaries_x0;
int32_t display_primaries_y0;
int32_t display_primaries_x1;
int32_t display_primaries_y1;
int32_t display_primaries_x2;
int32_t display_primaries_y2;
int32_t white_point_x;
int32_t white_point_y;
int32_t max_display_mastering_luminance;
int32_t min_display_mastering_luminance;
int32_t maximum_content_light_level;
int32_t maximum_frame_average_light_level;
#endif

/* I_pictures_header(void) */
int32_t top_field_first;
int32_t repeat_first_field;
int32_t progressive_frame;
#if INTERLACE_CODING
int32_t is_top_field;
#endif
/* int32_t fixed_picture_qp;   //qyu 0927 */
int32_t picture_qp;
int32_t fixed_picture_qp;
int32_t time_code_flag;
int32_t time_code;
int32_t loop_filter_disable;
int32_t loop_filter_parameter_flag;
/* int32_t alpha_offset; */
/* int32_t beta_offset; */

/* Pb_picture_header(void) */
int32_t picture_coding_type;

/*picture_display_extension(void)*/
int32_t frame_centre_horizontal_offset[4];
int32_t frame_centre_vertical_offset[4];

/* slice_header(void) */
int32_t img_width;
int32_t slice_vertical_position;
int32_t slice_vertical_position_extension;
int32_t fixed_slice_qp;
int32_t slice_qp;
int32_t slice_horizontal_positon;       /* added by mz, 2008.04 */
int32_t slice_horizontal_positon_extension;

int32_t StartCodePosition;
int32_t background_pred_flag;


/* Reference Manage */
int32_t displaydelay;
int32_t picture_reorder_delay;
#if M3480_TEMPORAL_SCALABLE
int32_t temporal_id_exist_flag;
#endif

int32_t gop_size;
struct reference_management decod_RPS[MAXGOP];
struct reference_management curr_RPS;
int32_t last_output;
int32_t trtmp;
#if M3480_TEMPORAL_SCALABLE
int32_t cur_layer;
#endif

/* Adaptive frequency weighting quantization */
#if FREQUENCY_WEIGHTING_QUANTIZATION
int32_t weight_quant_enable_flag;
int32_t load_seq_weight_quant_data_flag;

int32_t pic_weight_quant_enable_flag;
int32_t pic_weight_quant_data_index;
int32_t weighting_quant_param;
int32_t weighting_quant_model;
int16_t quant_param_undetail[6];      /* M2148 2007-09 */
int16_t quant_param_detail[6];        /* M2148 2007-09 */
int32_t WeightQuantEnable;              /* M2148 2007-09 */
int32_t mb_adapt_wq_disable;            /* M2331 2008-04 */
int32_t mb_wq_mode;                     /* M2331 2008-04 */
#if CHROMA_DELTA_QP
int32_t chroma_quant_param_disable;
int32_t chroma_quant_param_delta_u;
int32_t chroma_quant_param_delta_v;
#endif

int32_t b_pre_dec_intra_img;
int32_t pre_dec_img_type;
int32_t CurrentSceneModel;
#endif

int32_t curr_IDRcoi;
int32_t curr_IDRtr;
int32_t next_IDRtr;
int32_t next_IDRcoi;
int32_t end_SeqTr;

#if MB_DQP
int32_t lastQP;
/* FILE * testQP; */
#endif

};
/* extern Video_Dec_data *hd; */

struct DecodingEnvironment_s {
	uint32_t    Dbuffer;
	int32_t             Dbits_to_go;
	uint8_t            *Dcodestrm;
	int32_t             *Dcodestrm_len;
};

/* added at rm52k version */

struct inp_par;



/* ! Slice */
struct slice {
	int32_t                 picture_id;
	int32_t                 qp;
	int32_t                 picture_type; /* !< picture type */
	int32_t                 start_mb_nr;
	 /* !< number of different partitions */
	int32_t                 max_part_nr;

	/* added by lzhang */
	/* !< pointer to struct of context models for use in AEC */
	struct SyntaxInfoContexts_s  *syn_ctx;
};

struct alfdatapart {
	struct Bitstream_s           *bitstream;
	struct DecodingEnvironment_s de_AEC;
	struct SyntaxInfoContexts_s  *syn_ctx;
};
/* static int32_t alfParAllcoated = 0; */

/* input parameters from configuration file */
struct inp_par {
	int32_t   buf_cycle;                 /* <! Frame buffer size */
	int32_t   ref_pic_order;             /* <! ref order */
	int32_t   output_dec_pic;            /* <! output_dec_pic */
	int32_t   profile_id;
	int32_t   level_id;
	int32_t   chroma_format;
	int32_t   g_uiMaxSizeInBit;
	int32_t   alpha_c_offset;
	int32_t   beta_offset;
	int32_t   useNSQT;
#if MB_DQP
	int32_t   useDQP;
#endif
	int32_t   useSDIP;
	int32_t sao_enable;
#if M3480_TEMPORAL_SCALABLE
	int32_t temporal_id_exist_flag;
#endif
	int32_t alf_enable;

	int32_t crossSliceLoopFilter;

	int32_t   sample_bit_depth;  /* sample bit depth */
  /* decoded file bit depth (assuming output_bit_depth is
  less or equal to sample_bit_depth) */
	int32_t   output_bit_depth;


	int32_t MD5Enable;

#if OUTPUT_INTERLACE_MERGED_PIC
	int32_t output_interlace_merged_picture;
#endif

};

/* extern struct inp_par *input; */

struct outdata_s {
#if RD170_FIX_BG
	struct STDOUT_DATA_s stdoutdata[REF_MAXBUFFER];
#else
	struct STDOUT_DATA_s stdoutdata[8];
#endif
	int32_t         buffer_num;
};
/* outdata outprint; */

#define PAYLOAD_TYPE_IDERP 8

struct Bitstream_s *AllocBitstream(void);
void FreeBitstream(void);
#if TRACE
void tracebits2(const int8_t *trace_str, int32_t len, int32_t info);
#endif

/* int32_t   direct_mv[45][80][4][4][3]; // only to verify result */

#define I_PICTURE_START_CODE    0xB3
#define PB_PICTURE_START_CODE   0xB6
#define SLICE_START_CODE_MIN    0x00
#define SLICE_START_CODE_MAX    0x8F
#define USER_DATA_START_CODE    0xB2
#define SEQUENCE_HEADER_CODE    0xB0
#define EXTENSION_START_CODE    0xB5
#define SEQUENCE_END_CODE       0xB1
#define VIDEO_EDIT_CODE         0xB7


#define SEQUENCE_DISPLAY_EXTENSION_ID            2
#define COPYRIGHT_EXTENSION_ID                   4
#define CAMERAPARAMETERS_EXTENSION_ID            11
#define PICTURE_DISPLAY_EXTENSION_ID             7
#if M3480_TEMPORAL_SCALABLE
#define TEMPORAL_SCALABLE_EXTENSION_ID           3
#endif

#if ROI_M3264
#if RD1501_FIX_BG
#define LOCATION_DATA_EXTENSION_ID               12
#else
#define LOCATION_DATA_EXTENSION_ID               15
#endif
#endif

#if AVS2_HDR_HLS
#define MASTERING_DISPLAY_AND_CONTENT_METADATA_EXTENSION     10
#endif

void malloc_slice(void);
void free_slice(void);


void read_ipred_modes(void);

int32_t  AEC_startcode_follows(int32_t eos_bit);

/* extern uint32_t max_value_s; */

/*ComAdaptiveLoopFilter.h*/
#define ALF_MAX_NUM_COEF       9
#define NO_VAR_BINS            16


#define RPM_BEGIN                                              0x100
#define ALF_BEGIN                                              0x180
#define RPM_END                                                0x280

union param_u {
	struct {
		uint16_t data[RPM_END - RPM_BEGIN];
	} l;
	struct {
		/*sequence*/
		uint16_t profile_id;
		uint16_t level_id;
		uint16_t progressive_sequence;
		uint16_t is_field_sequence;
		uint16_t horizontal_size;
		uint16_t vertical_size;
		uint16_t chroma_format;
		uint16_t sample_precision;
		uint16_t encoding_precision;
		uint16_t aspect_ratio_information;
		uint16_t frame_rate_code;
		uint16_t bit_rate_lower;
		uint16_t bit_rate_upper;
		uint16_t low_delay;
		uint16_t temporal_id_exist_flag;
		uint16_t g_uiMaxSizeInBit;

#define BACKGROUND_PICTURE_DISABLE_BIT         11
#define B_MHPSKIP_ENABLED_BIT                  10
#define DHP_ENABLED_BIT                         9
#define WSM_ENABLED_BIT                        8
#define INTER_AMP_ENABLE_BIT                   7
#define USENSQT_BIT                            6
#define USESDIP_BIT                            5
#define B_SECT_ENABLED_BIT                     4
#define SAO_ENABLE_BIT                         3
#define ALF_ENABLE_BIT                         2
#define B_PMVR_ENABLED_BIT                     1
#define CROSSSLICELOOPFILTER_BIT               0
		uint16_t avs2_seq_flags;

		uint16_t num_of_RPS;
		uint16_t picture_reorder_delay;
		/*PIC*/
		uint16_t time_code_flag;
		uint16_t time_code;
		uint16_t background_picture_flag;
		uint16_t background_picture_output_flag;
		uint16_t coding_order;
		uint16_t cur_layer;
		uint16_t displaydelay; /*???*/
		uint16_t predict;     /*???*/
		uint16_t RPS_idx;      /*???*/
		uint16_t referd_by_others_cur;
		uint16_t num_of_ref_cur;
		uint16_t ref_pic_cur[8];
		uint16_t num_to_remove_cur;
		uint16_t remove_pic_cur[8];
		uint16_t progressive_frame;
		uint16_t picture_structure;
		uint16_t top_field_first;
		uint16_t repeat_first_field;
		uint16_t is_top_field;

		uint16_t picture_coding_type;
		uint16_t background_pred_flag;
		uint16_t background_reference_enable;
		uint16_t random_access_decodable_flag;
		uint16_t lcu_size;
		uint16_t alpha_c_offset;
		uint16_t beta_offset;
		uint16_t chroma_quant_param_delta_cb;
		uint16_t chroma_quant_param_delta_cr;
		uint16_t loop_filter_disable;

		uint16_t video_signal_type;
		uint16_t color_description;
		uint16_t display_primaries_x[3];
		uint16_t display_primaries_y[3];
		uint16_t white_point_x;
		uint16_t white_point_y;
		uint16_t max_display_mastering_luminance;
		uint16_t min_display_mastering_luminance;
		uint16_t max_content_light_level;
		uint16_t max_picture_average_light_level;
	} p;
	struct {
		uint16_t padding[ALF_BEGIN - RPM_BEGIN];
		uint16_t picture_alf_enable_Y;
		uint16_t picture_alf_enable_Cb;
		uint16_t picture_alf_enable_Cr;
		uint16_t alf_filters_num_m_1;
		uint16_t region_distance[16];
		uint16_t alf_cb_coeffmulti[9];
		uint16_t alf_cr_coeffmulti[9];
		uint16_t alf_y_coeffmulti[16][9];
	} alf;
};


struct avs2_decoder {
	uint8_t init_hw_flag;
	struct inp_par   input;
	struct ImageParameters_s  img;
	struct Video_Com_data_s  hc;
	struct Video_Dec_data_s  hd;
	union param_u param;
	struct avs2_frame_s frm_pool[AVS2_MAX_BUFFER_NUM];
	struct avs2_frame_s *fref[REF_MAXBUFFER];
#ifdef AML
	/*used for background
	when background_picture_output_flag is 0*/
	struct avs2_frame_s *m_bg;
	/*current background picture, ether m_bg or fref[..]*/
	struct avs2_frame_s *f_bg;
#endif
	struct outdata_s outprint;
	uint32_t cm_header_start;
	struct ALFParam_s m_alfPictureParam[NUM_ALF_COMPONENT];
#ifdef FIX_CHROMA_FIELD_MV_BK_DIST
	int8_t bk_img_is_top_field;
#endif
#ifdef AML
	int32_t lcu_size;
	int32_t lcu_size_log2;
	int32_t lcu_x_num;
	int32_t lcu_y_num;
	int32_t lcu_total;
	int32_t ref_maxbuffer;
	int32_t to_prepare_disp_count;
	int8_t bufmgr_error_flag;
#endif
};


extern void write_frame(struct avs2_decoder *avs2_dec, int32_t pos);
extern void init_frame_t(struct avs2_frame_s *currfref);
extern void report_frame(struct avs2_decoder *avs2_dec,
	struct outdata_s *data, int32_t pos);

extern int avs2_post_process(struct avs2_decoder *avs2_dec);
extern void avs2_prepare_header(struct avs2_decoder *avs2_dec,
	int32_t start_code);
extern int32_t avs2_process_header(struct avs2_decoder *avs2_dec);

extern void init_avs2_decoder(struct avs2_decoder *avs2_dec);

extern int32_t avs2_init_global_buffers(struct avs2_decoder *avs2_dec);

extern bool is_avs2_print_param(void);
extern bool is_avs2_print_bufmgr_detail(void);
#endif

