Mercurial > hg > forks > libbpg
diff jctvc/TLibCommon/TypeDef.h @ 0:772086c29cc7
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 16 Nov 2016 11:16:33 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jctvc/TLibCommon/TypeDef.h Wed Nov 16 11:16:33 2016 +0200 @@ -0,0 +1,826 @@ +/* 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) 2010-2014, ITU/ISO/IEC + * 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 the ITU/ISO/IEC nor the names of its contributors may + * be 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 TypeDef.h + \brief Define basic types, new types and enumerations +*/ + +#ifndef __TYPEDEF__ +#define __TYPEDEF__ + +#include <vector> + +//! \ingroup TLibCommon +//! \{ + +// ==================================================================================================================== +// Debugging +// ==================================================================================================================== + +// #define DEBUG_STRING // enable to print out final decision debug info at encoder and decoder +// #define DEBUG_ENCODER_SEARCH_BINS // enable to print out each bin as it is coded during encoder search +// #define DEBUG_CABAC_BINS // enable to print out each bin as it is coded during final encode and decode +// #define DEBUG_INTRA_SEARCH_COSTS // enable to print out the cost for each mode during encoder search +// #define DEBUG_TRANSFORM_AND_QUANTISE // enable to print out each TU as it passes through the transform-quantise-dequantise-inverseTransform process + +#ifdef DEBUG_STRING + #define DEBUG_STRING_PASS_INTO(name) , name + #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) , (exp==0)?0:name + #define DEBUG_STRING_FN_DECLARE(name) , std::string &name + #define DEBUG_STRING_FN_DECLAREP(name) , std::string *name + #define DEBUG_STRING_NEW(name) std::string name; + #define DEBUG_STRING_OUTPUT(os, name) os << name; + #define DEBUG_STRING_APPEND(str1, str2) str1+=str2; + #define DEBUG_STRING_SWAP(str1, str2) str1.swap(str2); + #define DEBUG_STRING_CHANNEL_CONDITION(compID) (true) + #include <sstream> + #include <iomanip> +#else + #define DEBUG_STRING_PASS_INTO(name) + #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) + #define DEBUG_STRING_FN_DECLARE(name) + #define DEBUG_STRING_FN_DECLAREP(name) + #define DEBUG_STRING_NEW(name) + #define DEBUG_STRING_OUTPUT(os, name) + #define DEBUG_STRING_APPEND(str1, str2) + #define DEBUG_STRING_SWAP(srt1, str2) + #define DEBUG_STRING_CHANNEL_CONDITION(compID) +#endif + + +// ==================================================================================================================== +// Tool Switches +// ==================================================================================================================== + +#define HARMONIZE_GOP_FIRST_FIELD_COUPLE 1 +#define EFFICIENT_FIELD_IRAP 1 +#define ALLOW_RECOVERY_POINT_AS_RAP 1 +#define BUGFIX_INTRAPERIOD 1 + +#define SAO_ENCODE_ALLOW_USE_PREDEBLOCK 1 + +#define TILE_SIZE_CHECK 1 + +#define MAX_NUM_PICS_IN_SOP 1024 + +#define MAX_NESTING_NUM_OPS 1024 +#define MAX_NESTING_NUM_LAYER 64 + +#define MAX_VPS_NUM_HRD_PARAMETERS 1 +#define MAX_VPS_OP_SETS_PLUS1 1024 +#define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1 + +#define MAXIMUM_INTRA_FILTERED_WIDTH 16 +#define MAXIMUM_INTRA_FILTERED_HEIGHT 16 + +#define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1) +#define MAX_NUM_LAYER_IDS 64 + +#define COEF_REMAIN_BIN_REDUCTION 3 ///< indicates the level at which the VLC + ///< transitions from Golomb-Rice to TU+EG(k) + +#define CU_DQP_TU_CMAX 5 ///< max number bins for truncated unary +#define CU_DQP_EG_k 0 ///< expgolomb order + +#define SBH_THRESHOLD 4 ///< I0156: value of the fixed SBH controlling threshold + +#define DISABLING_CLIP_FOR_BIPREDME 1 ///< Ticket #175 + +#define C1FLAG_NUMBER 8 // maximum number of largerThan1 flag coded in one chunk : 16 in HM5 +#define C2FLAG_NUMBER 1 // maximum number of largerThan2 flag coded in one chunk: 16 in HM5 + +#define SAO_ENCODING_CHOICE 1 ///< I0184: picture early termination +#if SAO_ENCODING_CHOICE +#define SAO_ENCODING_RATE 0.75 +#define SAO_ENCODING_CHOICE_CHROMA 1 ///< J0044: picture early termination Luma and Chroma are handled separately +#if SAO_ENCODING_CHOICE_CHROMA +#define SAO_ENCODING_RATE_CHROMA 0.5 +#endif +#endif + +#define MAX_NUM_SAO_OFFSETS 4 + +#define MAX_NUM_VPS 16 +#define MAX_NUM_SPS 16 +#define MAX_NUM_PPS 64 + +#define RDOQ_CHROMA_LAMBDA 1 ///< F386: weighting of chroma for RDOQ + +#define MIN_SCAN_POS_CROSS 4 + +#define FAST_BIT_EST 1 ///< G763: Table-based bit estimation for CABAC + +#define MLS_GRP_NUM 64 ///< G644 : Max number of coefficient groups, max(16, 64) +#define MLS_CG_LOG2_WIDTH 2 +#define MLS_CG_LOG2_HEIGHT 2 +#define MLS_CG_SIZE (MLS_CG_LOG2_WIDTH + MLS_CG_LOG2_HEIGHT) ///< G644 : Coefficient group size of 4x4 + +#define ADAPTIVE_QP_SELECTION 1 ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection +#if ADAPTIVE_QP_SELECTION +#define ARL_C_PRECISION 7 ///< G382: 7-bit arithmetic precision +#define LEVEL_RANGE 30 ///< G382: max coefficient level in statistics collection +#endif + +#define HHI_RQT_INTRA_SPEEDUP 1 ///< tests one best mode with full rqt +#define HHI_RQT_INTRA_SPEEDUP_MOD 0 ///< tests two best modes with full rqt + +#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP +#error +#endif + +#define VERBOSE_RATE 0 ///< Print additional rate information in encoder + +#define AMVP_DECIMATION_FACTOR 4 + +#define SCAN_SET_SIZE 16 +#define LOG2_SCAN_SET_SIZE 4 + +#define FAST_UDI_MAX_RDMODE_NUM 35 ///< maximum number of RD comparison in fast-UDI estimation loop + +#define NUM_INTRA_MODE 36 + +#define WRITE_BACK 1 ///< Enable/disable the encoder to replace the deltaPOC and Used by current from the config file with the values derived by the refIdc parameter. +#define AUTO_INTER_RPS 1 ///< Enable/disable the automatic generation of refIdc from the deltaPOC and Used by current from the config file. +#define PRINT_RPS_INFO 0 ///< Enable/disable the printing of bits used to send the RPS. + // using one nearest frame as reference frame, and the other frames are high quality (POC%4==0) frames (1+X) + // this should be done with encoder only decision + // but because of the absence of reference frame management, the related code was hard coded currently + +#define RVM_VCEGAM10_M 4 + +#define PLANAR_IDX 0 +#define VER_IDX 26 // index for intra VERTICAL mode +#define HOR_IDX 10 // index for intra HORIZONTAL mode +#define DC_IDX 1 // index for intra DC mode +#define NUM_CHROMA_MODE 5 // total number of chroma modes +#define DM_CHROMA_IDX 36 // chroma mode index for derived from luma intra mode +#define INVALID_MODE_IDX (NUM_INTRA_MODE+1) // value used to indicate an invalid intra mode +#define STOPCHROMASEARCH_MODE_IDX (INVALID_MODE_IDX+1) // value used to signal the end of a chroma mode search + +#define MDCS_ANGLE_LIMIT 4 ///< (default 4) 0 = Horizontal/vertical only, 1 = Horizontal/vertical +/- 1, 2 = Horizontal/vertical +/- 2 etc... +#define MDCS_MAXIMUM_WIDTH 8 ///< (default 8) (measured in pixels) TUs with width greater than this can only use diagonal scan +#define MDCS_MAXIMUM_HEIGHT 8 ///< (default 8) (measured in pixels) TUs with height greater than this can only use diagonal scan + +#define FAST_UDI_USE_MPM 1 + +#define RDO_WITHOUT_DQP_BITS 0 ///< Disable counting dQP bits in RDO-based mode decision + +#define LOG2_MAX_NUM_COLUMNS_MINUS1 7 +#define LOG2_MAX_NUM_ROWS_MINUS1 7 +#define LOG2_MAX_COLUMN_WIDTH 13 +#define LOG2_MAX_ROW_HEIGHT 13 + +#define MATRIX_MULT 0 // Brute force matrix multiplication instead of partial butterfly + +#define AMP_SAD 1 ///< dedicated SAD functions for AMP +#define AMP_ENC_SPEEDUP 1 ///< encoder only speed-up by AMP mode skipping +#if AMP_ENC_SPEEDUP +#define AMP_MRG 1 ///< encoder only force merge for AMP partition (no motion search for AMP) +#endif + +#define CABAC_INIT_PRESENT_FLAG 1 + +#define LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS 4 +#define CHROMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS 8 + +#define MAX_NUM_LONG_TERM_REF_PICS 33 + +#define DECODER_CHECK_SUBSTREAM_AND_SLICE_TRAILING_BYTES 1 + +#define RD_TEST_SAO_DISABLE_AT_PICTURE_LEVEL 0 ///< 1 = tests whether SAO should be disabled at the picture level, 0 (default) = does not apply this additional test + +#define O0043_BEST_EFFORT_DECODING 0 ///< 0 (default) = disable code related to best effort decoding, 1 = enable code relating to best effort decoding [ decode-side only ]. + +// Cost mode support + +#define LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP 0 ///< QP to use for lossless coding. +#define LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME 4 ///< QP' to use for mixed_lossy_lossless coding. + +// Debug support + +#define ENVIRONMENT_VARIABLE_DEBUG_AND_TEST 0 ///< When enabled, allows control of debug modifications via environment variables + +#define PRINT_MACRO_VALUES 1 ///< When enabled, the encoder prints out a list of the non-environment-variable controlled macros and their values on startup + +// TODO: rename this macro to DECODER_DEBUG_BIT_STATISTICS (may currently cause merge issues with other branches) +// This can be enabled by the makefile +#ifndef RExt__DECODER_DEBUG_BIT_STATISTICS +#define RExt__DECODER_DEBUG_BIT_STATISTICS 0 ///< 0 (default) = decoder reports as normal, 1 = decoder produces bit usage statistics (will impact decoder run time by up to ~10%) +#endif + +// This can be enabled by the makefile +#ifndef RExt__HIGH_BIT_DEPTH_SUPPORT +#define RExt__HIGH_BIT_DEPTH_SUPPORT 0 ///< 0 (default) use data type definitions for 8-10 bit video, 1 = use larger data types to allow for up to 16-bit video (originally developed as part of N0188) +#endif + +#define RExt__GOLOMB_RICE_ADAPTATION_STATISTICS_SETS 4 +#define RExt__GOLOMB_RICE_INCREMENT_DIVISOR 4 + +#define RExt__PREDICTION_WEIGHTING_ANALYSIS_DC_PRECISION 0 ///< Additional fixed bit precision used during encoder-side weighting prediction analysis. Currently only used when high_precision_prediction_weighting_flag is set, for backwards compatibility reasons. + +#define MAX_TIMECODE_SEI_SETS 3 ///< Maximum number of time sets + + +//------------------------------------------------ +// Derived macros +//------------------------------------------------ + +#if RExt__HIGH_BIT_DEPTH_SUPPORT +#define FULL_NBIT 1 ///< When enabled, use distortion measure derived from all bits of source data, otherwise discard (bitDepth - 8) least-significant bits of distortion +#define RExt__HIGH_PRECISION_FORWARD_TRANSFORM 1 ///< 0 use original 6-bit transform matrices for both forward and inverse transform, 1 (default) = use original matrices for inverse transform and high precision matrices for forward transform +#else +#define FULL_NBIT 0 ///< When enabled, use distortion measure derived from all bits of source data, otherwise discard (bitDepth - 8) least-significant bits of distortion +#define RExt__HIGH_PRECISION_FORWARD_TRANSFORM 0 ///< 0 (default) use original 6-bit transform matrices for both forward and inverse transform, 1 = use original matrices for inverse transform and high precision matrices for forward transform +#endif + +#if FULL_NBIT +# define DISTORTION_PRECISION_ADJUSTMENT(x) 0 +#else +# define DISTORTION_PRECISION_ADJUSTMENT(x) (x) +#endif + + +//------------------------------------------------ +// Error checks +//------------------------------------------------ + +#if ((RExt__HIGH_PRECISION_FORWARD_TRANSFORM != 0) && (RExt__HIGH_BIT_DEPTH_SUPPORT == 0)) +#error ERROR: cannot enable RExt__HIGH_PRECISION_FORWARD_TRANSFORM without RExt__HIGH_BIT_DEPTH_SUPPORT +#endif + +// ==================================================================================================================== +// Basic type redefinition +// ==================================================================================================================== + +typedef void Void; +typedef bool Bool; + +#ifdef __arm__ +typedef signed char Char; +#else +typedef char Char; +#endif +typedef unsigned char UChar; +typedef short Short; +typedef unsigned short UShort; +typedef int Int; +typedef unsigned int UInt; +typedef double Double; +typedef float Float; + + +// ==================================================================================================================== +// 64-bit integer type +// ==================================================================================================================== + +#ifdef _MSC_VER +typedef __int64 Int64; + +#if _MSC_VER <= 1200 // MS VC6 +typedef __int64 UInt64; // MS VC6 does not support unsigned __int64 to double conversion +#else +typedef unsigned __int64 UInt64; +#endif + +#else + +typedef long long Int64; +typedef unsigned long long UInt64; + +#endif + + +// ==================================================================================================================== +// Enumeration +// ==================================================================================================================== + +enum RDPCMMode +{ + RDPCM_OFF = 0, + RDPCM_HOR = 1, + RDPCM_VER = 2, + NUMBER_OF_RDPCM_MODES = 3 +}; + +enum RDPCMSignallingMode +{ + RDPCM_SIGNAL_IMPLICIT = 0, + RDPCM_SIGNAL_EXPLICIT = 1, + NUMBER_OF_RDPCM_SIGNALLING_MODES = 2 +}; + +/// supported slice type +enum SliceType +{ + B_SLICE = 0, + P_SLICE = 1, + I_SLICE = 2, + NUMBER_OF_SLICE_TYPES = 3 +}; + +/// chroma formats (according to semantics of chroma_format_idc) +enum ChromaFormat +{ + CHROMA_400 = 0, + CHROMA_420 = 1, + CHROMA_422 = 2, + CHROMA_444 = 3, + NUM_CHROMA_FORMAT = 4 +}; + +enum ChannelType +{ + CHANNEL_TYPE_LUMA = 0, + CHANNEL_TYPE_CHROMA = 1, + MAX_NUM_CHANNEL_TYPE = 2 +}; + +enum ComponentID +{ + COMPONENT_Y = 0, + COMPONENT_Cb = 1, + COMPONENT_Cr = 2, + MAX_NUM_COMPONENT = 3 +}; + +enum InputColourSpaceConversion // defined in terms of conversion prior to input of encoder. +{ + IPCOLOURSPACE_UNCHANGED = 0, + IPCOLOURSPACE_YCbCrtoYCrCb = 1, // Mainly used for debug! + IPCOLOURSPACE_YCbCrtoYYY = 2, // Mainly used for debug! + IPCOLOURSPACE_RGBtoGBR = 3, + NUMBER_INPUT_COLOUR_SPACE_CONVERSIONS = 4 +}; + +enum DeblockEdgeDir +{ + EDGE_VER = 0, + EDGE_HOR = 1, + NUM_EDGE_DIR = 2 +}; + +/// supported partition shape +enum PartSize +{ + SIZE_2Nx2N = 0, ///< symmetric motion partition, 2Nx2N + SIZE_2NxN = 1, ///< symmetric motion partition, 2Nx N + SIZE_Nx2N = 2, ///< symmetric motion partition, Nx2N + SIZE_NxN = 3, ///< symmetric motion partition, Nx N + SIZE_2NxnU = 4, ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2) + SIZE_2NxnD = 5, ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2) + SIZE_nLx2N = 6, ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N + SIZE_nRx2N = 7, ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N + NUMBER_OF_PART_SIZES = 8 +}; + +/// supported prediction type +enum PredMode +{ + MODE_INTER = 0, ///< inter-prediction mode + MODE_INTRA = 1, ///< intra-prediction mode + NUMBER_OF_PREDICTION_MODES = 2, +}; + +/// reference list index +enum RefPicList +{ + REF_PIC_LIST_0 = 0, ///< reference list 0 + REF_PIC_LIST_1 = 1, ///< reference list 1 + NUM_REF_PIC_LIST_01 = 2, + REF_PIC_LIST_X = 100 ///< special mark +}; + +/// distortion function index +enum DFunc +{ + DF_DEFAULT = 0, + DF_SSE = 1, ///< general size SSE + DF_SSE4 = 2, ///< 4xM SSE + DF_SSE8 = 3, ///< 8xM SSE + DF_SSE16 = 4, ///< 16xM SSE + DF_SSE32 = 5, ///< 32xM SSE + DF_SSE64 = 6, ///< 64xM SSE + DF_SSE16N = 7, ///< 16NxM SSE + + DF_SAD = 8, ///< general size SAD + DF_SAD4 = 9, ///< 4xM SAD + DF_SAD8 = 10, ///< 8xM SAD + DF_SAD16 = 11, ///< 16xM SAD + DF_SAD32 = 12, ///< 32xM SAD + DF_SAD64 = 13, ///< 64xM SAD + DF_SAD16N = 14, ///< 16NxM SAD + + DF_SADS = 15, ///< general size SAD with step + DF_SADS4 = 16, ///< 4xM SAD with step + DF_SADS8 = 17, ///< 8xM SAD with step + DF_SADS16 = 18, ///< 16xM SAD with step + DF_SADS32 = 19, ///< 32xM SAD with step + DF_SADS64 = 20, ///< 64xM SAD with step + DF_SADS16N = 21, ///< 16NxM SAD with step + + DF_HADS = 22, ///< general size Hadamard with step + DF_HADS4 = 23, ///< 4xM HAD with step + DF_HADS8 = 24, ///< 8xM HAD with step + DF_HADS16 = 25, ///< 16xM HAD with step + DF_HADS32 = 26, ///< 32xM HAD with step + DF_HADS64 = 27, ///< 64xM HAD with step + DF_HADS16N = 28, ///< 16NxM HAD with step + +#if AMP_SAD + DF_SAD12 = 43, + DF_SAD24 = 44, + DF_SAD48 = 45, + + DF_SADS12 = 46, + DF_SADS24 = 47, + DF_SADS48 = 48, + + DF_SSE_FRAME = 50, ///< Frame-based SSE + DF_TOTAL_FUNCTIONS = 64 +#else + DF_SSE_FRAME = 32, ///< Frame-based SSE + DF_TOTAL_FUNCTIONS = 33 +#endif +}; + +/// index for SBAC based RD optimization +enum CI_IDX +{ + CI_CURR_BEST = 0, ///< best mode index + CI_NEXT_BEST, ///< next best index + CI_TEMP_BEST, ///< temporal index + CI_CHROMA_INTRA, ///< chroma intra index + CI_QT_TRAFO_TEST, + CI_QT_TRAFO_ROOT, + CI_NUM, ///< total number +}; + +/// motion vector predictor direction used in AMVP +enum MVP_DIR +{ + MD_LEFT = 0, ///< MVP of left block + MD_ABOVE, ///< MVP of above block + MD_ABOVE_RIGHT, ///< MVP of above right block + MD_BELOW_LEFT, ///< MVP of below left block + MD_ABOVE_LEFT ///< MVP of above left block +}; + +enum StoredResidualType +{ + RESIDUAL_RECONSTRUCTED = 0, + RESIDUAL_ENCODER_SIDE = 1, + NUMBER_OF_STORED_RESIDUAL_TYPES = 2 +}; + +enum TransformDirection +{ + TRANSFORM_FORWARD = 0, + TRANSFORM_INVERSE = 1, + TRANSFORM_NUMBER_OF_DIRECTIONS = 2 +}; + +/// supported ME search methods +enum MESearchMethod +{ + FULL_SEARCH = 0, ///< Full search + DIAMOND = 1, ///< Fast search + SELECTIVE = 2 ///< Selective search +}; + +/// coefficient scanning type used in ACS +enum COEFF_SCAN_TYPE +{ + SCAN_DIAG = 0, ///< up-right diagonal scan + SCAN_HOR = 1, ///< horizontal first scan + SCAN_VER = 2, ///< vertical first scan + SCAN_NUMBER_OF_TYPES = 3 +}; + +enum COEFF_SCAN_GROUP_TYPE +{ + SCAN_UNGROUPED = 0, + SCAN_GROUPED_4x4 = 1, + SCAN_NUMBER_OF_GROUP_TYPES = 2 +}; + +enum SignificanceMapContextType +{ + CONTEXT_TYPE_4x4 = 0, + CONTEXT_TYPE_8x8 = 1, + CONTEXT_TYPE_NxN = 2, + CONTEXT_TYPE_SINGLE = 3, + CONTEXT_NUMBER_OF_TYPES = 4 +}; + +enum ScalingListMode +{ + SCALING_LIST_OFF, + SCALING_LIST_DEFAULT, + SCALING_LIST_FILE_READ +}; + +enum ScalingListSize +{ + SCALING_LIST_4x4 = 0, + SCALING_LIST_8x8, + SCALING_LIST_16x16, + SCALING_LIST_32x32, + SCALING_LIST_SIZE_NUM +}; + +// Slice / Slice segment encoding modes +enum SliceConstraint +{ + NO_SLICES = 0, ///< don't use slices / slice segments + FIXED_NUMBER_OF_CTU = 1, ///< Limit maximum number of largest coding tree units in a slice / slice segments + FIXED_NUMBER_OF_BYTES = 2, ///< Limit maximum number of bytes in a slice / slice segment + FIXED_NUMBER_OF_TILES = 3, ///< slices / slice segments span an integer number of tiles +}; + +enum SAOMode //mode +{ + SAO_MODE_OFF = 0, + SAO_MODE_NEW, + SAO_MODE_MERGE, + NUM_SAO_MODES +}; + +enum SAOModeMergeTypes +{ + SAO_MERGE_LEFT =0, + SAO_MERGE_ABOVE, + NUM_SAO_MERGE_TYPES +}; + + +enum SAOModeNewTypes +{ + SAO_TYPE_START_EO =0, + SAO_TYPE_EO_0 = SAO_TYPE_START_EO, + SAO_TYPE_EO_90, + SAO_TYPE_EO_135, + SAO_TYPE_EO_45, + + SAO_TYPE_START_BO, + SAO_TYPE_BO = SAO_TYPE_START_BO, + + NUM_SAO_NEW_TYPES +}; +#define NUM_SAO_EO_TYPES_LOG2 2 + +enum SAOEOClasses +{ + 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, + NUM_SAO_EO_CLASSES, +}; + +#define NUM_SAO_BO_CLASSES_LOG2 5 +#define NUM_SAO_BO_CLASSES (1<<NUM_SAO_BO_CLASSES_LOG2) + +namespace Profile +{ + enum Name + { + NONE = 0, + MAIN = 1, + MAIN10 = 2, + MAINSTILLPICTURE = 3, + MAINREXT = 4, + HIGHTHROUGHPUTREXT = 5 + }; +} + +namespace Level +{ + enum Tier + { + MAIN = 0, + HIGH = 1, + }; + + enum Name + { + // code = (level * 30) + NONE = 0, + LEVEL1 = 30, + LEVEL2 = 60, + LEVEL2_1 = 63, + LEVEL3 = 90, + LEVEL3_1 = 93, + LEVEL4 = 120, + LEVEL4_1 = 123, + LEVEL5 = 150, + LEVEL5_1 = 153, + LEVEL5_2 = 156, + LEVEL6 = 180, + LEVEL6_1 = 183, + LEVEL6_2 = 186, + LEVEL8_5 = 255, + }; +} + +enum CostMode +{ + COST_STANDARD_LOSSY = 0, + COST_SEQUENCE_LEVEL_LOSSLESS = 1, + COST_LOSSLESS_CODING = 2, + COST_MIXED_LOSSLESS_LOSSY_CODING = 3 +}; + +enum SPSExtensionFlagIndex +{ + SPS_EXT__REXT = 0, +//SPS_EXT__MVHEVC = 1, //for use in future versions +//SPS_EXT__SHVC = 2, //for use in future versions + NUM_SPS_EXTENSION_FLAGS = 8 +}; + +enum PPSExtensionFlagIndex +{ + PPS_EXT__REXT = 0, +//PPS_EXT__MVHEVC = 1, //for use in future versions +//PPS_EXT__SHVC = 2, //for use in future versions + NUM_PPS_EXTENSION_FLAGS = 8 +}; + +// ==================================================================================================================== +// Type definition +// ==================================================================================================================== + +#if RExt__HIGH_BIT_DEPTH_SUPPORT +typedef Int Pel; ///< pixel type +typedef Int64 TCoeff; ///< transform coefficient +typedef Int TMatrixCoeff; ///< transform matrix coefficient +typedef Short TFilterCoeff; ///< filter coefficient +typedef Int64 Intermediate_Int; ///< used as intermediate value in calculations +typedef UInt64 Intermediate_UInt; ///< used as intermediate value in calculations +#else +typedef Short Pel; ///< pixel type +typedef Int TCoeff; ///< transform coefficient +typedef Short TMatrixCoeff; ///< transform matrix coefficient +typedef Short TFilterCoeff; ///< filter coefficient +typedef Int Intermediate_Int; ///< used as intermediate value in calculations +typedef UInt Intermediate_UInt; ///< used as intermediate value in calculations +#endif + +#if FULL_NBIT +typedef UInt64 Distortion; ///< distortion measurement +#else +typedef UInt Distortion; ///< distortion measurement +#endif + +/// parameters for adaptive loop filter +class TComPicSym; + +#define MAX_NUM_SAO_CLASSES 32 //(NUM_SAO_EO_GROUPS > NUM_SAO_BO_GROUPS)?NUM_SAO_EO_GROUPS:NUM_SAO_BO_GROUPS + +struct SAOOffset +{ + SAOMode modeIdc; // NEW, MERGE, OFF + Int typeIdc; // union of SAOModeMergeTypes and SAOModeNewTypes, depending on modeIdc. + Int typeAuxInfo; // BO: starting band index + Int offset[MAX_NUM_SAO_CLASSES]; + + SAOOffset(); + ~SAOOffset(); + Void reset(); + + const SAOOffset& operator= (const SAOOffset& src); +}; + +struct SAOBlkParam +{ + + SAOBlkParam(); + ~SAOBlkParam(); + Void reset(); + const SAOBlkParam& operator= (const SAOBlkParam& src); + SAOOffset& operator[](Int compIdx){ return offsetParam[compIdx];} +private: + SAOOffset offsetParam[MAX_NUM_COMPONENT]; + +}; + + +/// parameters for deblocking filter +typedef struct _LFCUParam +{ + Bool bInternalEdge; ///< indicates internal edge + Bool bLeftEdge; ///< indicates left edge + Bool bTopEdge; ///< indicates top edge +} LFCUParam; + + + +//TU settings for entropy encoding +struct TUEntropyCodingParameters +{ + const UInt *scan; + const UInt *scanCG; + COEFF_SCAN_TYPE scanType; + UInt widthInGroups; + UInt heightInGroups; + UInt firstSignificanceMapContext; +}; + + +struct TComDigest +{ + std::vector<UChar> hash; + + Bool operator==(const TComDigest &other) const + { + if (other.hash.size() != hash.size()) return false; + for(UInt i=0; i<UInt(hash.size()); i++) + if (other.hash[i] != hash[i]) return false; + return true; + } + + Bool operator!=(const TComDigest &other) const + { + return !(*this == other); + } +}; + +struct TComSEITimeSet +{ + TComSEITimeSet() : clockTimeStampFlag(false), + numUnitFieldBasedFlag(false), + countingType(0), + fullTimeStampFlag(false), + discontinuityFlag(false), + cntDroppedFlag(false), + numberOfFrames(0), + secondsValue(0), + minutesValue(0), + hoursValue(0), + secondsFlag(false), + minutesFlag(false), + hoursFlag(false), + timeOffsetLength(0), + timeOffsetValue(0) + { } + Bool clockTimeStampFlag; + Bool numUnitFieldBasedFlag; + Int countingType; + Bool fullTimeStampFlag; + Bool discontinuityFlag; + Bool cntDroppedFlag; + Int numberOfFrames; + Int secondsValue; + Int minutesValue; + Int hoursValue; + Bool secondsFlag; + Bool minutesFlag; + Bool hoursFlag; + Int timeOffsetLength; + Int timeOffsetValue; +}; + +struct TComSEIMasteringDisplay +{ + Bool colourVolumeSEIEnabled; + UInt maxLuminance; + UInt minLuminance; + UShort primaries[3][2]; + UShort whitePoint[2]; +}; +//! \} + +#endif + +