blob: d9f85bdd88130ea79c17248a1edd5011a3fba50d [file] [log] [blame]
/* 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;
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