Changeset 1313 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TypeDef.h


Ignore:
Timestamp:
13 Aug 2015, 17:38:13 (9 years ago)
Author:
tech
Message:

Merged 14.1-update-dev1@1312.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r1196 r1313  
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
    4  * granted under this license. 
     4 * granted under this license.
    55 *
    6 * Copyright (c) 2010-2015, ITU/ISO/IEC
     6 * Copyright (c) 2010-2015, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    3131 * THE POSSIBILITY OF SUCH DAMAGE.
    3232 */
    33 
    3433/** \file     TypeDef.h
    3534    \brief    Define basic types, new types and enumerations
    3635*/
    37 
    38 #ifndef _TYPEDEF__
    39 #define _TYPEDEF__
    40 
     36#ifndef __TYPEDEF__
     37#define __TYPEDEF__
     38#ifndef __COMMONDEF__
     39#error Include CommonDef.h not TypeDef.h
     40#endif
     41#include <vector>
    4142//! \ingroup TLibCommon
    4243//! \{
     
    4445///////////////////////////////// EXTENSION SELECTION /////////////////////////////////// 
    4546/////////////////////////////////////////////////////////////////////////////////////////
    46 
    4747/* HEVC_EXT might be defined by compiler/makefile options.
    48    
    4948   Linux makefiles support the following settings:   
    5049   make             -> HEVC_EXT not defined   
    51    make HEVC_EXT=0  -> H_MV=0 H_3D=0   --> plain HM
    52    make HEVC_EXT=1  -> H_MV=1 H_3D=0   --> MV only
    53    make HEVC_EXT=2  -> H_MV=1 H_3D=1   --> full 3D
     50   make HEVC_EXT=0  -> NH_MV=0 H_3D=0   --> plain HM
     51   make HEVC_EXT=1  -> NH_MV=1 H_3D=0   --> MV only
     52   make HEVC_EXT=2  -> NH_MV=1 H_3D=1   --> full 3D
    5453*/
    55 
    5654#ifndef HEVC_EXT
    5755#define HEVC_EXT                    2
    5856#endif
    59 
    6057#if ( HEVC_EXT < 0 )||( HEVC_EXT > 2 )
    6158#error HEVC_EXT must be in the range of 0 to 2, inclusive.
    6259#endif
    63 
    64 #define H_MV          ( HEVC_EXT != 0)
    65 #define H_3D          ( HEVC_EXT == 2)
    66 
    67 
     60#define NH_MV          ( HEVC_EXT != 0)
     61#define NH_3D          ( HEVC_EXT == 2)
    6862/////////////////////////////////////////////////////////////////////////////////////////
    6963///////////////////////////////////   MAJOR DEFINES   /////////////////////////////////// 
    7064/////////////////////////////////////////////////////////////////////////////////////////
    71 
    72 #if H_MV
     65#if NH_MV
     66#define NH_MV_FIX_TICKET_105              1 // layer_set_idx_for_ols_minus1 length
     67#define NH_MV_FIX_TICKET_100              1 // Extra slice header bits
    7368#define H_MV_ENC_DEC_TRAC                 1  //< CU/PU level tracking
    74 #endif
    75 
     69#define H_MV_ENC_DEC_TRAC_FIX             1  // by SHARP
     70#if NH_3D
     71// FIXES
     72#define NH_3D_FIX_TICKET_98               1 // Writing of depth intra skip flag
     73#define NH_3D_FIX_TICKET_101              ( 1 && NH_3D_VER141_DEC_COMP_FLAG )  // Camera parameters for depth
     74#define NH_3D_DIS_FIX                     1
     75#define NH_3D_ENC_DEPTH_FIX               1 // Fix Intra TU coding.
     76#define NH_3D_INTRA_SDC_RD_FIX            1 // Fix in RD- decision of intra SDC.
     77#define NH_3D_DLT_FIX                     1 // Fixes numbers of parsed DLTs
     78#define NH_3D_VER141_DEC_COMP_FLAG        0 // Makes decoding of this version compatible to HTM-14.1 by re-introducing HTM-14.1 bugs.
     79#define NH_3D_ALIGN_SPIVMP_DBBP           1 // Further alignment of DBBP and SBP motion
     80#define NH_3D_ALIGN_SPIVMP_RP             1 // Alignment of DBBP and RP
     81#define NH_3D_FIX_VSP                     1
     82#define NH_3D_VSO                         1
     83#define NH_3D_NBDV                        1
     84#define NH_3D_TMVP                        1   // QC_TMVP_C0047
     85                                              // Sony_M23639
     86                                              // H_3D_TMVP_SCALING_FIX_K0053       1   // QC/CY for K0053
     87#define NH_3D_IC                          1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
     88                                              // Unifying rounding offset, for IC part, JCT3V-D0135
     89                                              // SHARP_ILLUCOMP_REFINE_E0046
     90                                              // MTK_CLIPPING_ALIGN_IC_E0168       // To support simplify bi-prediction PU with identical motion checking, JCT3V-E0168
     91                                              // LGE_IC_CTX_F0160 //JCT3V-F0160
     92                                              // SEC_ONLY_TEXTURE_IC_F0151
     93                                              // MTK_IC_FLAG_CABAC_SIMP_G0061
     94                                              // SEC_IC_ARP_SIG_G0072, Disabling IC when ARP is enabled, option 1 in JCT3V-G0072, part 2 in JCT3V-G0121
     95                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086  Low-latency IC encoding in JCT3V-H0086
     96                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX  1  // Remove the global variables used in JCT3V-H0086
     97                                              // SEC_IC_NEIGHBOR_CLIP_I0080    // Clipping of neighboring sample position, JCT3V-I0080
     98                                              // LGE_CHROMA_IC_J0050_J0034
     99#define NH_3D_IC_FIX                      1   // Fix uninitialized value in cDtParam.bUseIC (it happened on intra block)
     100#define NH_3D_FULL_PEL_DEPTH_MAP_MV_ACC   1   // Full Pel Interpolation for Depth, HHI_FULL_PEL_DEPTH_MAP_MV_ACC
     101#define NH_3D_QTLPC                       1   // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068
     102                                              // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units
     103                                              // MTK_TEX_DEP_PAR_G0055 Texture-partition-dependent depth partition. JCT3V-G0055
     104#define NH_3D_NBDV_REF                    1
     105#define NH_3D_MLC                         1
     106#define NH_3D_FIX_PRUNING                 1
     107#define NH_3D_VSP                         1
     108#define NH_3D_IV_MERGE                    1
     109#define NH_3D_SPIVMP                      1
     110#define NH_3D_INTEGER_MV_DEPTH            1
     111#define NH_3D_TEXT_MERGE                  1
     112#define NH_3D_DBBP                         1
     113#define BUF_FIX 1
     114#define NH_3D_ARP                         1  // Advanced residual prediction (ARP), JCT3V-D0177
     115                                              // QC_MTK_INTERVIEW_ARP_F0123_F0108 JCT3V-F0123; JCT3V-F0108
     116                                              // SHARP_ARP_REF_CHECK_F0105        ARP reference picture selection and DPB check
     117                                              // LGE_ARP_CTX_F0161                JCT3V-F0161
     118                                              // MTK_ARP_FLAG_CABAC_SIMP_G0061 Use 2 context for ARP flag referring to only left neighbor block in JCT3V-G0061
     119                                              // MTK_ARP_REF_SELECTION_G0053 ARP Reference picture selection in JCT3V-G0053
     120                                              // MTK_ALIGN_SW_WD_BI_PRED_ARP_H0085  Align the SW and WD for the bi-prediction ARP PUs by disallowing non-normative fast bi-prediction for ARP PUs, JCT3V-H0085
     121                                              // QC_I0051_ARP_SIMP         
     122                                              // SHARP_ARP_CHROMA_I0104     
     123                                              // MTK_I0072_IVARP_SCALING_FIX
     124                                              // SEC_ARP_VIEW_REF_CHECK_J0037    Signaling iv_res_pred_weight_idx when the current slice has both view and temporal reference picture(s), JCT3V-J0037 item1
     125                                              // SEC_ARP_REM_ENC_RESTRICT_K0035    Removal of encoder restriction of ARP, JCT3V-K0035
     126#define NH_3D_DMM                         1   // Depth modeling modes
     127#define NH_3D_DLT                         1   // Depth Lookup Table
     128#define NH_3D_SDC_INTRA                   1   // Segment-wise DC Coding method for INTRA
     129#define NH_3D_SDC_INTER                   1   // Segment-wise DC Coding method for INTER 
     130#define NH_3D_ENC_DEPTH                   1   // Encoder optimizations for depth, incl.
     131                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
     132                                              // LG_ZEROINTRADEPTHRESI_A0087
     133                                              // HHI_DMM4_ENC_I0066
     134                                              // H_3D_FAST_DEPTH_INTRA
     135#define NH_3D_DIS                         1
     136#define NH_3D_FAST_TEXTURE_ENCODING       1   // Fast merge mode decision and early CU determination for texture component of dependent view, JCT3V-E0173
     137#endif
    76138#if H_3D
    77139#define H_3D_QTLPC                        1   // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068
    78140                                              // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units
    79141                                              // MTK_TEX_DEP_PAR_G0055 Texture-partition-dependent depth partition. JCT3V-G0055
    80 
    81142#define H_3D_VSO                          1   // VSO, View synthesis optimization, includes:
    82143                                              // HHI_VSO
     
    101162                                              // MTK_TEXTURE_MRGCAND_BUGFIX_E0182  Bug fix for TEXTURE MERGING CANDIDATE     , JCT3V-E0182
    102163                                              // LGE_SIMP_DISP_AVAIL_J0041    // Use 2 status for disparity availability - DISP_AVAILABLE and DISP_NONE
    103 
    104 #define H_3D_ARP                          1   // Advanced residual prediction (ARP), JCT3V-D0177
    105                                               // QC_MTK_INTERVIEW_ARP_F0123_F0108 JCT3V-F0123; JCT3V-F0108
    106                                               // SHARP_ARP_REF_CHECK_F0105        ARP reference picture selection and DPB check
    107                                               // LGE_ARP_CTX_F0161                JCT3V-F0161
    108                                               // MTK_ARP_FLAG_CABAC_SIMP_G0061 Use 2 context for ARP flag referring to only left neighbor block in JCT3V-G0061
    109                                               // MTK_ARP_REF_SELECTION_G0053 ARP Reference picture selection in JCT3V-G0053
    110                                               // MTK_ALIGN_SW_WD_BI_PRED_ARP_H0085  Align the SW and WD for the bi-prediction ARP PUs by disallowing non-normative fast bi-prediction for ARP PUs, JCT3V-H0085
    111                                               // QC_I0051_ARP_SIMP         
    112                                               // SHARP_ARP_CHROMA_I0104     
    113                                               // MTK_I0072_IVARP_SCALING_FIX
    114                                               // SEC_ARP_VIEW_REF_CHECK_J0037    Signaling iv_res_pred_weight_idx when the current slice has both view and temporal reference picture(s), JCT3V-J0037 item1
    115                                               // SEC_ARP_REM_ENC_RESTRICT_K0035    Removal of encoder restriction of ARP, JCT3V-K0035
    116 
    117164#define H_3D_IC                           1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
    118165                                              // Unifying rounding offset, for IC part, JCT3V-D0135
     
    128175                                              // SEC_IC_NEIGHBOR_CLIP_I0080    // Clipping of neighboring sample position, JCT3V-I0080
    129176                                              // LGE_CHROMA_IC_J0050_J0034
    130 
    131 #if H_3D_NBDV
     177#if NH_3D_NBDV
    132178#define H_3D_NBDV_REF                     1   // Depth oriented neighboring block disparity derivation
    133179                                              // MTK_D0156
     
    138184                                              // SEC_VER_DONBDV_H0103          Vertical DV Restriction for DoNBDV
    139185#endif
    140 
    141186#define H_3D_VSP                          1   // View synthesis prediction
    142187                                              // MERL_C0152: Basic VSP
     
    157202                                              // MTK_MRG_LIST_SIZE_CLEANUP_J0059   1   // Include VSP for deriving merge candidate list size, JCT3V-J0059
    158203                                              // SEC_A1_BASED_VSP_J0039            1   // Removal of redundant VSP in Merge list
    159 
    160 
    161 
    162204#define H_3D_IV_MERGE                     1   // Inter-view motion merge candidate
    163205                                              // HHI_INTER_VIEW_MOTION_PRED
     
    183225                                              // SEC_SIMP_SHIFTED_DV_I0086     Simplification of Shifted DV candidate, JCT3V-I0086
    184226                                              // SEC_SHIFTED_IVMC_POS_K0036    Position Derivation for Shifted-IVMC, JCT3V-K0036
    185 
    186 
    187227#define H_3D_TMVP                         1   // QC_TMVP_C0047
    188228                                              // Sony_M23639
    189229                                              // H_3D_TMVP_SCALING_FIX_K0053       1   // QC/CY for K0053
    190 
    191 
    192230#define H_3D_DIM                          1   // DIM, Depth intra modes, includes:
    193231                                              // HHI_DMM_WEDGE_INTRA
     
    238276                                              // SHARP_DLT_SIMP_J0029 DLT(DepthValue2Idx[]) table derivation cleanup
    239277                                              // SHARP_DMM_CLEAN_K0042             1   // Generate DMM pattern with rotation
    240 
    241 
    242278#define H_3D_INTER_SDC                    1   // INTER SDC, Inter simplified depth coding
    243279                                              // LGE_INTER_SDC_E0156 Enable inter SDC for depth coding
    244280                                              // SEC_INTER_SDC_G0101 Improved inter SDC with multiple DC candidates
    245 
     281#define H_3D_INTER_SDC_FIX                1
    246282#define H_3D_SPIVMP                       1   // H_3D_SPIVMP JCT3V-F0110: Sub-PU level inter-view motion prediction
    247283                                              // SEC_SPIVMP_MCP_SIZE_G0077, Apply SPIVMP only to 2Nx2N partition, JCT3V-G0077
     
    249285                                              // Simplification on Sub-PU level temporal interview motion prediction
    250286                                              // MPI_SUBPU_DEFAULT_MV_H0077_H0099_H0111_H0133
    251 
    252287#define H_3D_DBBP                         1   // DBBP: Depth-based Block Partitioning and Merging
    253288                                              // MTK_DBBP_AMP_REM_H0072   
     
    263298                                              // RWTH_DBBP_NO_SATD_K0028
    264299                                              // HS_DBBP_CLEAN_K0048
    265 
    266300#define H_3D_DDD                          1   // Disparity derived depth coding
    267301                                              // LGE_DDD_REMOVAL_J0042_J0030 DDD removal
    268 
    269302#define H_3D_DIS                          1   // Depth intra skip
    270303                                              // SEC_DEPTH_INTRA_SKIP_MODE_K0033  Depth intra skip mode
    271 
    272304#define H_3D_FCO                          0   // Flexible coding order for 3D
    273 
    274305#define H_3D_FAST_INTRA_SDC               1   // I0123
    275 
    276306// OTHERS
    277307                                              // MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 // Progressive MV Compression, JCT3V-E0170
    278 
    279308#define H_3D_FAST_TEXTURE_ENCODING        1   // Fast merge mode decision and early CU determination for texture component of dependent view, JCT3V-E0173
    280309                                              // MTK_FAST_TEXTURE_ENCODING_E0173
     
    283312                                              // SCU_HS_FAST_DEPTH_INTRA_E0238_HHIFIX
    284313#endif
    285 
    286314//HLS
    287315                                             // HHI_DEPENDENCY_SIGNALLING_I1_J0107
     
    292320                                             // HHI_CAM_PARA_K0052       
    293321                                             // H_3D_DIRECT_DEP_TYPE     
    294 
    295322// Rate Control
    296323#define KWU_FIX_URQ                       1
     
    298325#define KWU_RC_MADPRED_E0227              0  ///< JCT3V-E0227, inter-view MAD prediction
    299326#endif // H_3D
    300 
    301327/////////////////////////////////////////////////////////////////////////////////////////
    302328///////////////////////////////////   DERIVED DEFINES /////////////////////////////////// 
    303329/////////////////////////////////////////////////////////////////////////////////////////
    304 
    305 #if H_3D
    306 #define H_3D_DISABLE_CHROMA                    1
     330#if NH_3D
    307331#define H_3D_OUTPUT_ACTIVE_TOOLS               0
    308332#define H_3D_REN_MAX_DEV_OUT                   0
    309333#endif
    310 
    311334///// ***** VIEW SYNTHESIS OPTIMIZAION *********
    312 #if H_3D_VSO                                 
     335#if NH_3D_VSO                                 
    313336#define H_3D_VSO_DIST_INT                 1   // Allow negative synthesized view distortion change
    314337#define H_3D_VSO_COLOR_PLANES             1   // Compute VSO distortion on color planes
     
    317340#define H_3D_VSO_SYNTH_DIST_OUT           0   // Output of synthesized view distortion instead of depth distortion in encoder output
    318341#endif
    319 
    320342////   ****** NEIGHBOURING BLOCK-BASED DISPARITY VECTOR  *********
    321 #if H_3D_NBDV
     343#if NH_3D_NBDV
    322344#define DVFROM_LEFT                       0
    323345#define DVFROM_ABOVE                      1
    324346#define IDV_CANDS                         2
    325347#endif
    326 
    327348///// ***** ADVANCED INTERVIEW RESIDUAL PREDICTION *********
    328 #if H_3D_ARP
     349#if NH_3D_ARP
    329350#define H_3D_ARP_WFNR                     3
    330351#endif
    331 
    332352///// ***** DEPTH INTRA MODES *********
    333353#if H_3D_DIM
     
    336356#define H_3D_DIM_SDC                      1   // Simplified Depth Coding method
    337357#define H_3D_DIM_DLT                      1   // Depth Lookup Table
    338 
    339358#define H_3D_DIM_ENC                      1   // Depth Intra encoder optimizations, includes:
    340359                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
    341360                                              // LG_ZEROINTRADEPTHRESI_A0087
    342 
    343 #endif
    344 ///// ***** VIEW SYNTHESIS PREDICTION *********
    345 #if H_3D_VSP
    346 #define H_3D_VSP_BLOCKSIZE                4   // Supported values: 1, 2, and 4
    347 #if H_3D_VSP_BLOCKSIZE == 1
    348 #define H_3D_VSP_CONSTRAINED              1   // Constrained VSP @ 1x1
    349 #else
    350 #define H_3D_VSP_CONSTRAINED              0
    351 #endif
    352 #endif
    353 
    354 
     361#endif
     362/////////////////////////////////////////////////////////////////////////////////////
     363/// GT: Move values which are not flags to CommonDef.h and convert to static int !!
     364///////////////////////////////////////////////////////////////////////////////////
    355365///// ***** ILLUMATION COMPENSATION *********
    356 #if H_3D_IC
     366#if NH_3D_IC
    357367#define IC_REG_COST_SHIFT                 7
    358368#define IC_CONST_SHIFT                    5
     
    360370#define IC_LOW_LATENCY_ENCODING_THRESHOLD 0.1 // Threshold for low-latency IC encoding in JCT3V-H0086
    361371#endif
    362 
    363 
    364372///// ***** DEPTH BASED BLOCK PARTITIONING *********
    365 #if H_3D_DBBP
     373#if NH_3D_DBBP
    366374#define DBBP_INVALID_SHORT                (-4)
    367375#define DBBP_PACK_MODE               SIZE_2NxN
    368376#endif
    369 
    370 
    371377///// ***** FCO *********
    372378#if H_3D_FCO
     
    375381#define H_3D_FCO_VSP_DONBDV_E0163               0   // Adaptive depth reference for flexible coding order
    376382#endif
    377 
    378383#if H_3D
    379384#define PPS_FIX_DEPTH                           1
    380385#endif
    381 
    382 
    383386/////////////////////////////////////////////////////////////////////////////////
    384387///////////////////////////////////   MV_HEVC HLS  //////////////////////////////
    385388/////////////////////////////////////////////////////////////////////////////////
    386389// TBD: Check if integration is necessary.
    387 
    388 
    389390#define H_MV_HLS_PTL_LIMITS                  0
    390391#define H_MV_HLS7_GEN                        0  // General changes (not tested)
    391 
    392392// POC
    393393// #define H_MV_HLS_7_POC_P0041_3            0 // (POC/P0041/POC reset) #3 It was remarked that we should require each non-IRAP picture that has discardable_flag equal to 1 to have NUT value indicating that it is a sub-layer non-reference picture. This was agreed. Decision: Adopt (with constraint for discardable_flag as described above)
    394394// #define H_MV_HLS_7_POC_P0041_FIXES        0 // (POC/P0041/Fixes) For each non-IRAP picture that has discardable_flag equal to 1 to have NUT value indicating that it is a sub-layer non-reference picture.
    395395// #define H_MV_HLS_7_POC_P0056_4            0 // (POC/P0056/layer tree poc) #4 Proposal 1: If the POC reset approach is adopted as the basis for multi-layer POC derivation, it is proposed to derive the POC anchor picture from the previous TID0 picture (that is not a RASL picture, a RADL picture or a sub-layer non-reference picture and not with discardable_flag equal to 1) of  the current layer or any of its reference layer. This is asserted to improve loss resilience and reduce bit rate overhead. Decision: Adopt Proposal 1 (with the suggested modifications Ewith text provided as P0297).
    396 
    397396// SEI related
    398397//#define H_MV_HLS_8_SEI_NODOC_53  0 // #53 (SEI    /NODOC/Added Multiview view position SEI message) Plain copy from AVC.
     
    409408//#define H_MV_HLS_7_SEI_P0133_28  0 // (SEI/P0133/Recovery point SEI) #28 Decision: Adopt change to recover point semantics only (-v3)
    410409//#define H_MV_HLS_7_SEI_P0123_25  0 // (SEI/P0123/Alpha channel info) #25 Add alpha channel information SEI message Decision: Adopt. Constrain the bit depth indicated to be equal to the coded bit depth of the aux picture.
    411 
    412410// DPB
    413411//#define H_MV_HLS_8_HRD_Q0102_09  0 // #9  (HRD    /Q0102/NoOutputOfPriorPicsFlag) It was suggested that also the separate_colour_plane_flag should affect inference of NoOutputOfPriorPicsFlag. Decision (Ed.): Agreed (affects RExt text).
     
    415413//#define H_MV_HLS_8_HRD_Q0154_10  0 // #10 (HRD    /Q0154/DPB Flushing and parameters) On picture flushing and DPB parameters Decision: Adopted (some details to be discussed further in BoG).
    416414//#define H_MV_HLS_7_OTHER_P0187_1 0 // (OTHER/P0187/NoOutputOfPriorPicsFlag) #1 Inference of NoOutputOfPriorPicsFlag and proposes to take into account colour format and bit depth for the inference in addition to spatial resolution
    417 
    418415// OTHERS
    419416//#define H_MV_HLS_8_HSB_Q0041_03  0 // #3  (HS     /Q0041/hybrid scalability) The proposed text was endorsed, with non-editorial open issues considered as follows ?// #define H_MV_HLS_7_OTHER_P0187_1          0 // (OTHER/P0187/NoOutputOfPriorPicsFlag) #1 Inference of NoOutputOfPriorPicsFlag and proposes to take into account colour format and bit depth for the inference in addition to spatial resolution
    420417//#define H_MV_HLS_8_MIS_Q0078_24  0 // #24 (MISC   /Q0078/scan and pic type) , Items 3 b,c and 4, clarifying which pictures in an output layer sets are applied the values of general_progressive_source_flag, general_interlaced_source_flag, general_non_packed_constraint_flag and general_frame_only_constraint_flag.
    421418//#define H_MV_HLS_7_HRD_P0138_6   0 //     (HRD/P0138/HRD parameters for bitstreams excluding) #6 Decision: Adopt (as revised in updated contribution, with the specification of a flag in the BP SEI (HRD/P0192/sub-DPB) #12 Establish sub-DPBs based on the representation format indicated at the VPS level. It was suggested that the expressed shared capacity limit would need to be less than or equal to the sum of the individual capacity limits. Decision: Adopt as modified. Further study is encouraged on profile/level constraint selections.
    422 
    423419/////////////////////////////////////////////////////////////////////////////////////////
    424420///////////////////////////////////   HM RELATED DEFINES ////////////////////////////////
    425421/////////////////////////////////////////////////////////////////////////////////////////
    426 #define HARMONIZE_GOP_FIRST_FIELD_COUPLE  1
    427 #define FIX_FIELD_DEPTH                 1
    428 #if H_MV
    429 #define EFFICIENT_FIELD_IRAP            0
    430 #else
    431 #define EFFICIENT_FIELD_IRAP            1
    432 #endif
    433 #define ALLOW_RECOVERY_POINT_AS_RAP     1
    434 #define BUGFIX_INTRAPERIOD              1
    435 #define SAO_ENCODE_ALLOW_USE_PREDEBLOCK 1
    436 
    437 #define SAO_SGN_FUNC 1
    438 
    439 #define TILE_SIZE_CHECK 1
    440 
    441 #define FIX1172 1 ///< fix ticket #1172
    442 
    443 #define SETTING_PIC_OUTPUT_MARK     1
    444 #define SETTING_NO_OUT_PIC_PRIOR    1
    445 #define FIX_EMPTY_PAYLOAD_NAL       1
    446 #define FIX_WRITING_OUTPUT          1
    447 #define FIX_OUTPUT_EOS              1
    448 
    449 #define FIX_POC_CRA_NORASL_OUTPUT   1
    450 
    451 #define MAX_NUM_PICS_IN_SOP           1024
    452 
    453 #define MAX_NESTING_NUM_OPS         1024
    454 #define MAX_NESTING_NUM_LAYER       64
    455 
    456 #if H_MV
    457 #define MAX_VPS_NUM_HRD_PARAMETERS                1024
    458 #else
    459 #define MAX_VPS_NUM_HRD_PARAMETERS                1
    460 #endif
    461 #if H_MV
    462 #define MAX_NUM_SUB_LAYERS                        7
    463 #define MAX_NUM_SIGNALLED_PARTITIONING_SCHEMES    16
    464 #endif
    465 #define MAX_VPS_OP_SETS_PLUS1                     1024
    466 #if H_MV
    467 #define MAX_VPS_NUM_ADD_LAYER_SETS                1024
    468 #define MAX_VPS_NUH_LAYER_ID_PLUS1  63
    469 #define MAX_NUM_SCALABILITY_TYPES   16
    470 #define ENC_CFG_CONSOUT_SPACE       29           
    471 #else
    472 #define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1  1
    473 #endif
    474 
    475 
    476 #define MAX_CPB_CNT                     32  ///< Upper bound of (cpb_cnt_minus1 + 1)
    477 #if H_MV
    478 #define MAX_NUM_LAYER_IDS               63
    479 #define MAX_NUM_LAYERS                  63
    480 #define MAX_VPS_PROFILE_TIER_LEVEL      64
    481 #define MAX_VPS_ADD_OUTPUT_LAYER_SETS   1024
    482 #define MAX_VPS_OUTPUTLAYER_SETS        ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 + MAX_VPS_OP_SETS_PLUS1 )
    483 #define  MAX_NUM_VIDEO_SIGNAL_INFO      16
    484 #define MAX_NUM_SCALED_REF_LAYERS       MAX_NUM_LAYERS-1
    485 #else
    486 #define MAX_NUM_LAYER_IDS                64
    487 #endif
    488 
    489 #define COEF_REMAIN_BIN_REDUCTION        3 ///< indicates the level at which the VLC
    490                                            ///< transitions from Golomb-Rice to TU+EG(k)
    491 
    492 #define CU_DQP_TU_CMAX 5                   ///< max number bins for truncated unary
    493 #define CU_DQP_EG_k 0                      ///< expgolomb order
    494 
    495 #define SBH_THRESHOLD                    4  ///< I0156: value of the fixed SBH controlling threshold
    496  
    497 #define SEQUENCE_LEVEL_LOSSLESS           0  ///< H0530: used only for sequence or frame-level lossless coding
    498 
    499 #define DISABLING_CLIP_FOR_BIPREDME         1  ///< Ticket #175
    500  
    501 #define C1FLAG_NUMBER               8 // maximum number of largerThan1 flag coded in one chunk :  16 in HM5
    502 #define C2FLAG_NUMBER               1 // maximum number of largerThan2 flag coded in one chunk:  16 in HM5
    503 #define SAO_ENCODING_CHOICE              1  ///< I0184: picture early termination
    504 #if SAO_ENCODING_CHOICE
    505 #define SAO_ENCODING_RATE                0.75
    506 #define SAO_ENCODING_CHOICE_CHROMA       1 ///< J0044: picture early termination Luma and Chroma are handled separately
    507 #if SAO_ENCODING_CHOICE_CHROMA
    508 #define SAO_ENCODING_RATE_CHROMA         0.5
    509 #endif
    510 #endif
    511 
    512 #define MAX_NUM_VPS                16
    513 #define MAX_NUM_SPS                16
    514 #define MAX_NUM_PPS                64
    515 
    516 #define RDOQ_CHROMA_LAMBDA          1   ///< F386: weighting of chroma for RDOQ
    517 
    518 #define MIN_SCAN_POS_CROSS          4
    519 
    520 #define FAST_BIT_EST                1   ///< G763: Table-based bit estimation for CABAC
    521 
    522 #define MLS_GRP_NUM                         64     ///< G644 : Max number of coefficient groups, max(16, 64)
    523 #define MLS_CG_SIZE                         4      ///< G644 : Coefficient group size of 4x4
    524 
    525 #define ADAPTIVE_QP_SELECTION               1      ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection
    526 #if ADAPTIVE_QP_SELECTION
    527 #define ARL_C_PRECISION                     7      ///< G382: 7-bit arithmetic precision
    528 #define LEVEL_RANGE                         30     ///< G382: max coefficient level in statistics collection
    529 #endif
    530 
    531 #define HHI_RQT_INTRA_SPEEDUP             1           ///< tests one best mode with full rqt
    532 #define HHI_RQT_INTRA_SPEEDUP_MOD         0           ///< tests two best modes with full rqt
    533 
     422#endif
     423// ====================================================================================================================
     424// Debugging
     425// ====================================================================================================================
     426#define DEBUG_STRING                                      0 ///< When enabled, prints out final decision debug info at encoder and decoder
     427#define DEBUG_ENCODER_SEARCH_BINS                         0 ///< When enabled, prints out each bin as it is coded during encoder search
     428#define DEBUG_CABAC_BINS                                  0 ///< When enabled, prints out each bin as it is coded during final encode and decode
     429#define DEBUG_INTRA_SEARCH_COSTS                          0 ///< When enabled, prints out the cost for each mode during encoder search
     430#define DEBUG_TRANSFORM_AND_QUANTISE                      0 ///< When enabled, prints out each TU as it passes through the transform-quantise-dequantise-inverseTransform process
     431#define ENVIRONMENT_VARIABLE_DEBUG_AND_TEST               0 ///< When enabled, allows control of debug modifications via environment variables
     432#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
     433// TODO: rename this macro to DECODER_DEBUG_BIT_STATISTICS (may currently cause merge issues with other branches)
     434// This can be enabled by the makefile
     435#ifndef RExt__DECODER_DEBUG_BIT_STATISTICS
     436#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%)
     437#endif
     438// This can be enabled by the makefile
     439#if !NH_MV
     440#ifndef ENC_DEC_TRACE
     441#define ENC_DEC_TRACE                                     0
     442#endif
     443#endif
     444#define DEC_NUH_TRACE                                     0 ///< When trace enabled, enable tracing of NAL unit headers at the decoder (currently not possible at the encoder)
     445#define PRINT_RPS_INFO                                    0 ///< Enable/disable the printing of bits used to send the RPS.
     446// ====================================================================================================================
     447// Tool Switches - transitory (these macros are likely to be removed in future revisions)
     448// ====================================================================================================================
     449#define DECODER_CHECK_SUBSTREAM_AND_SLICE_TRAILING_BYTES  1 ///< TODO: integrate this macro into a broader conformance checking system.
     450#define T0196_SELECTIVE_RDOQ                              1 ///< selective RDOQ
     451// ====================================================================================================================
     452// Tool Switches
     453// ====================================================================================================================
     454#define ADAPTIVE_QP_SELECTION                             1 ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection
     455#define AMP_ENC_SPEEDUP                                   1 ///< encoder only speed-up by AMP mode skipping
     456#if AMP_ENC_SPEEDUP
     457#define AMP_MRG                                           1 ///< encoder only force merge for AMP partition (no motion search for AMP)
     458#endif
     459#define FAST_BIT_EST                                      1   ///< G763: Table-based bit estimation for CABAC
     460#define HHI_RQT_INTRA_SPEEDUP                             1           ///< tests one best mode with full rqt
     461#define HHI_RQT_INTRA_SPEEDUP_MOD                         0           ///< tests two best modes with full rqt
    534462#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP
    535463#error
    536464#endif
    537 
    538 #define VERBOSE_RATE 0 ///< Print additional rate information in encoder
    539 
    540 #define AMVP_DECIMATION_FACTOR            4
    541 
    542 #define SCAN_SET_SIZE                     16
    543 #define LOG2_SCAN_SET_SIZE                4
    544 
    545 #define FAST_UDI_MAX_RDMODE_NUM               35          ///< maximum number of RD comparison in fast-UDI estimation loop
    546 
    547 #define ZERO_MVD_EST                          0           ///< Zero Mvd Estimation in normal mode
    548 
    549 #define NUM_INTRA_MODE 36
    550 #if !REMOVE_LM_CHROMA
    551 #define LM_CHROMA_IDX  35
    552 #endif
    553 
    554 #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.
    555 #define AUTO_INTER_RPS                  1           ///< Enable/disable the automatic generation of refIdc from the deltaPOC and Used by current from the config file.
    556 #define PRINT_RPS_INFO                  0           ///< Enable/disable the printing of bits used to send the RPS.
    557                                                     // using one nearest frame as reference frame, and the other frames are high quality (POC%4==0) frames (1+X)
    558                                                     // this should be done with encoder only decision
    559                                                     // but because of the absence of reference frame management, the related code was hard coded currently
    560 
    561 #define RVM_VCEGAM10_M 4
    562 
    563 #define PLANAR_IDX             0
    564 #define VER_IDX                26                    // index for intra VERTICAL   mode
    565 #define HOR_IDX                10                    // index for intra HORIZONTAL mode
    566 #define DC_IDX                 1                     // index for intra DC mode
    567 #define NUM_CHROMA_MODE        5                     // total number of chroma modes
    568 #define DM_CHROMA_IDX          36                    // chroma mode index for derived from luma intra mode
    569 
    570 
    571 #define FAST_UDI_USE_MPM 1
    572 
    573 #define RDO_WITHOUT_DQP_BITS              0           ///< Disable counting dQP bits in RDO-based mode decision
    574 
    575 #define FULL_NBIT 0 ///< When enabled, compute costs using full sample bitdepth.  When disabled, compute costs as if it is 8-bit source video.
     465#define MATRIX_MULT                                       0 ///< Brute force matrix multiplication instead of partial butterfly
     466#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 ].
     467#define RDOQ_CHROMA_LAMBDA                                1 ///< F386: weighting of chroma for RDOQ
     468// This can be enabled by the makefile
     469#ifndef RExt__HIGH_BIT_DEPTH_SUPPORT
     470#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)
     471#endif
     472// ====================================================================================================================
     473// Derived macros
     474// ====================================================================================================================
     475#if RExt__HIGH_BIT_DEPTH_SUPPORT
     476#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
     477#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
     478#else
     479#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
     480#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
     481#endif
    576482#if FULL_NBIT
    577 # define DISTORTION_PRECISION_ADJUSTMENT(x) 0
     483# define DISTORTION_PRECISION_ADJUSTMENT(x)  0
    578484#else
    579485# define DISTORTION_PRECISION_ADJUSTMENT(x) (x)
    580486#endif
    581 
    582 #define LOG2_MAX_NUM_COLUMNS_MINUS1        7
    583 #define LOG2_MAX_NUM_ROWS_MINUS1           7
    584 #define LOG2_MAX_COLUMN_WIDTH              13
    585 #define LOG2_MAX_ROW_HEIGHT                13
    586 
    587 #define MATRIX_MULT                             0   // Brute force matrix multiplication instead of partial butterfly
    588 
    589 #define REG_DCT 65535
    590 
    591 #define AMP_SAD                               1           ///< dedicated SAD functions for AMP
    592 #define AMP_ENC_SPEEDUP                       1           ///< encoder only speed-up by AMP mode skipping
    593 #if AMP_ENC_SPEEDUP
    594 #define AMP_MRG                               1           ///< encoder only force merge for AMP partition (no motion search for AMP)
    595 #endif
    596 
    597 #define CABAC_INIT_PRESENT_FLAG     1
    598 
     487#if DEBUG_STRING
     488  #define DEBUG_STRING_PASS_INTO(name) , name
     489  #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) , (exp==0)?0:name
     490  #define DEBUG_STRING_FN_DECLARE(name) , std::string &name
     491  #define DEBUG_STRING_FN_DECLAREP(name) , std::string *name
     492  #define DEBUG_STRING_NEW(name) std::string name;
     493  #define DEBUG_STRING_OUTPUT(os, name) os << name;
     494  #define DEBUG_STRING_APPEND(str1, str2) str1+=str2;
     495  #define DEBUG_STRING_SWAP(str1, str2) str1.swap(str2);
     496  #define DEBUG_STRING_CHANNEL_CONDITION(compID) (true)
     497  #include <sstream>
     498  #include <iomanip>
     499#else
     500  #define DEBUG_STRING_PASS_INTO(name)
     501  #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp)
     502  #define DEBUG_STRING_FN_DECLARE(name)
     503  #define DEBUG_STRING_FN_DECLAREP(name)
     504  #define DEBUG_STRING_NEW(name)
     505  #define DEBUG_STRING_OUTPUT(os, name)
     506  #define DEBUG_STRING_APPEND(str1, str2)
     507  #define DEBUG_STRING_SWAP(srt1, str2)
     508  #define DEBUG_STRING_CHANNEL_CONDITION(compID)
     509#endif
     510// ====================================================================================================================
     511// Error checks
     512// ====================================================================================================================
     513#if ((RExt__HIGH_PRECISION_FORWARD_TRANSFORM != 0) && (RExt__HIGH_BIT_DEPTH_SUPPORT == 0))
     514#error ERROR: cannot enable RExt__HIGH_PRECISION_FORWARD_TRANSFORM without RExt__HIGH_BIT_DEPTH_SUPPORT
     515#endif
    599516// ====================================================================================================================
    600517// Basic type redefinition
    601518// ====================================================================================================================
    602 
    603519typedef       void                Void;
    604520typedef       bool                Bool;
    605 
    606521#ifdef __arm__
    607522typedef       signed char         Char;
     
    616531typedef       double              Double;
    617532typedef       float               Float;
    618 
    619533// ====================================================================================================================
    620534// 64-bit integer type
    621535// ====================================================================================================================
    622 
    623536#ifdef _MSC_VER
    624537typedef       __int64             Int64;
    625 
    626538#if _MSC_VER <= 1200 // MS VC6
    627539typedef       __int64             UInt64;   // MS VC6 does not support unsigned __int64 to double conversion
     
    629541typedef       unsigned __int64    UInt64;
    630542#endif
    631 
    632543#else
    633 
    634544typedef       long long           Int64;
    635545typedef       unsigned long long  UInt64;
    636 
    637 #endif
    638 
    639 // ====================================================================================================================
    640 // Type definition
    641 // ====================================================================================================================
    642 
    643 typedef       UChar           Pxl;        ///< 8-bit pixel type
    644 typedef       Short           Pel;        ///< 16-bit pixel type
    645 typedef       Int             TCoeff;     ///< transform coefficient
    646 
    647 #if H_3D_VSO
     546#endif
     547// ====================================================================================================================
     548// Named numerical types
     549// ====================================================================================================================
     550#if RExt__HIGH_BIT_DEPTH_SUPPORT
     551typedef       Int             Pel;               ///< pixel type
     552typedef       Int64           TCoeff;            ///< transform coefficient
     553typedef       Int             TMatrixCoeff;      ///< transform matrix coefficient
     554typedef       Short           TFilterCoeff;      ///< filter coefficient
     555typedef       Int64           Intermediate_Int;  ///< used as intermediate value in calculations
     556typedef       UInt64          Intermediate_UInt; ///< used as intermediate value in calculations
     557#else
     558typedef       Short           Pel;               ///< pixel type
     559typedef       Int             TCoeff;            ///< transform coefficient
     560typedef       Short           TMatrixCoeff;      ///< transform matrix coefficient
     561typedef       Short           TFilterCoeff;      ///< filter coefficient
     562typedef       Int             Intermediate_Int;  ///< used as intermediate value in calculations
     563typedef       UInt            Intermediate_UInt; ///< used as intermediate value in calculations
     564#endif
     565#if FULL_NBIT
     566typedef       UInt64          Distortion;        ///< distortion measurement
     567#else
     568typedef       UInt            Distortion;        ///< distortion measurement
     569#endif
     570#if NH_MV                         
     571typedef std::vector< Int >        IntAry1d;
     572typedef std::vector< IntAry1d >   IntAry2d;
     573typedef std::vector< IntAry2d >   IntAry3d;
     574typedef std::vector< IntAry3d >   IntAry4d;
     575typedef std::vector< IntAry4d >   IntAry5d;
     576typedef std::vector< Bool >        BoolAry1d;
     577typedef std::vector< BoolAry1d >   BoolAry2d;
     578typedef std::vector< BoolAry2d >   BoolAry3d;
     579typedef std::vector< BoolAry3d >   BoolAry4d;
     580typedef std::vector< BoolAry4d >   BoolAry5d;
     581#endif
     582#if NH_3D_VSO
    648583// ====================================================================================================================
    649584// Define Distortion Types
    650585// ====================================================================================================================
    651586typedef       Int64           RMDist;     ///< renderer model distortion
    652 
    653587#if H_3D_VSO_DIST_INT
    654588typedef       Int64            Dist;       ///< RDO distortion
     
    663597#endif
    664598#endif
    665 /// parameters for adaptive loop filter
    666 class TComPicSym;
    667 
    668 // Slice / Slice segment encoding modes
    669 enum SliceConstraint
    670 {
    671   NO_SLICES              = 0,          ///< don't use slices / slice segments
    672   FIXED_NUMBER_OF_LCU    = 1,          ///< Limit maximum number of largest coding tree blocks in a slice / slice segments
    673   FIXED_NUMBER_OF_BYTES  = 2,          ///< Limit maximum number of bytes in a slice / slice segment
    674   FIXED_NUMBER_OF_TILES  = 3,          ///< slices / slice segments span an integer number of tiles
    675 };
    676 
    677 enum SAOComponentIdx
    678 {
    679   SAO_Y =0,
    680   SAO_Cb,
    681   SAO_Cr,
    682   NUM_SAO_COMPONENTS
    683 };
    684 
    685 enum SAOMode //mode
    686 {
    687   SAO_MODE_OFF = 0,
    688   SAO_MODE_NEW,
    689   SAO_MODE_MERGE,
    690   NUM_SAO_MODES
    691 };
    692 
    693 enum SAOModeMergeTypes
    694 {
    695   SAO_MERGE_LEFT =0,
    696   SAO_MERGE_ABOVE,
    697   NUM_SAO_MERGE_TYPES
    698 };
    699 
    700 
    701 enum SAOModeNewTypes
    702 {
    703   SAO_TYPE_START_EO =0,
    704   SAO_TYPE_EO_0 = SAO_TYPE_START_EO,
    705   SAO_TYPE_EO_90,
    706   SAO_TYPE_EO_135,
    707   SAO_TYPE_EO_45,
    708 
    709   SAO_TYPE_START_BO,
    710   SAO_TYPE_BO = SAO_TYPE_START_BO,
    711 
    712   NUM_SAO_NEW_TYPES
    713 };
    714 #define NUM_SAO_EO_TYPES_LOG2 2
    715 
    716 enum SAOEOClasses
    717 {
    718   SAO_CLASS_EO_FULL_VALLEY = 0,
    719   SAO_CLASS_EO_HALF_VALLEY = 1,
    720   SAO_CLASS_EO_PLAIN       = 2,
    721   SAO_CLASS_EO_HALF_PEAK   = 3,
    722   SAO_CLASS_EO_FULL_PEAK   = 4,
    723   NUM_SAO_EO_CLASSES,
    724 };
    725 
    726 
    727 #define NUM_SAO_BO_CLASSES_LOG2  5
    728 enum SAOBOClasses
    729 {
    730   //SAO_CLASS_BO_BAND0 = 0,
    731   //SAO_CLASS_BO_BAND1,
    732   //SAO_CLASS_BO_BAND2,
    733   //...
    734   //SAO_CLASS_BO_BAND31,
    735 
    736   NUM_SAO_BO_CLASSES = (1<<NUM_SAO_BO_CLASSES_LOG2),
    737 };
    738 #define MAX_NUM_SAO_CLASSES  32  //(NUM_SAO_EO_GROUPS > NUM_SAO_BO_GROUPS)?NUM_SAO_EO_GROUPS:NUM_SAO_BO_GROUPS
    739 
    740 struct SAOOffset
    741 {
    742   Int modeIdc; //NEW, MERGE, OFF
    743   Int typeIdc; //NEW: EO_0, EO_90, EO_135, EO_45, BO. MERGE: left, above
    744   Int typeAuxInfo; //BO: starting band index
    745   Int offset[MAX_NUM_SAO_CLASSES];
    746 
    747   SAOOffset();
    748   ~SAOOffset();
    749   Void reset();
    750 
    751   const SAOOffset& operator= (const SAOOffset& src);
    752 };
    753 
    754 struct SAOBlkParam
    755 {
    756 
    757   SAOBlkParam();
    758   ~SAOBlkParam();
    759   Void reset();
    760   const SAOBlkParam& operator= (const SAOBlkParam& src);
    761   SAOOffset& operator[](Int compIdx){ return offsetParam[compIdx];}
    762 private:
    763   SAOOffset offsetParam[NUM_SAO_COMPONENTS];
    764 
    765 };
    766 
    767 /// parameters for deblocking filter
    768 typedef struct _LFCUParam
    769 {
    770   Bool bInternalEdge;                     ///< indicates internal edge
    771   Bool bLeftEdge;                         ///< indicates left edge
    772   Bool bTopEdge;                          ///< indicates top edge
    773 } LFCUParam;
    774 
    775599// ====================================================================================================================
    776600// Enumeration
    777601// ====================================================================================================================
    778 
     602enum RDPCMMode
     603{
     604  RDPCM_OFF             = 0,
     605  RDPCM_HOR             = 1,
     606  RDPCM_VER             = 2,
     607  NUMBER_OF_RDPCM_MODES = 3
     608};
     609enum RDPCMSignallingMode
     610{
     611  RDPCM_SIGNAL_IMPLICIT            = 0,
     612  RDPCM_SIGNAL_EXPLICIT            = 1,
     613  NUMBER_OF_RDPCM_SIGNALLING_MODES = 2
     614};
    779615/// supported slice type
    780616enum SliceType
    781617{
    782   B_SLICE,
    783   P_SLICE,
    784   I_SLICE
    785 };
    786 
     618  B_SLICE               = 0,
     619  P_SLICE               = 1,
     620  I_SLICE               = 2,
     621  NUMBER_OF_SLICE_TYPES = 3
     622};
    787623/// chroma formats (according to semantics of chroma_format_idc)
    788624enum ChromaFormat
    789625{
    790   CHROMA_400  = 0,
    791   CHROMA_420  = 1,
    792   CHROMA_422  = 2,
    793   CHROMA_444  = 3
    794 };
    795 
     626  CHROMA_400        = 0,
     627  CHROMA_420        = 1,
     628  CHROMA_422        = 2,
     629  CHROMA_444        = 3,
     630  NUM_CHROMA_FORMAT = 4
     631};
     632enum ChannelType
     633{
     634  CHANNEL_TYPE_LUMA    = 0,
     635  CHANNEL_TYPE_CHROMA  = 1,
     636  MAX_NUM_CHANNEL_TYPE = 2
     637};
     638enum ComponentID
     639{
     640  COMPONENT_Y       = 0,
     641  COMPONENT_Cb      = 1,
     642  COMPONENT_Cr      = 2,
     643  MAX_NUM_COMPONENT = 3
     644};
     645enum InputColourSpaceConversion // defined in terms of conversion prior to input of encoder.
     646{
     647  IPCOLOURSPACE_UNCHANGED               = 0,
     648  IPCOLOURSPACE_YCbCrtoYCrCb            = 1, // Mainly used for debug!
     649  IPCOLOURSPACE_YCbCrtoYYY              = 2, // Mainly used for debug!
     650  IPCOLOURSPACE_RGBtoGBR                = 3,
     651  NUMBER_INPUT_COLOUR_SPACE_CONVERSIONS = 4
     652};
     653enum DeblockEdgeDir
     654{
     655  EDGE_VER     = 0,
     656  EDGE_HOR     = 1,
     657  NUM_EDGE_DIR = 2
     658};
    796659/// supported partition shape
    797660enum PartSize
    798661{
    799   SIZE_2Nx2N,           ///< symmetric motion partition,  2Nx2N
    800   SIZE_2NxN,            ///< symmetric motion partition,  2Nx N
    801   SIZE_Nx2N,            ///< symmetric motion partition,   Nx2N
    802   SIZE_NxN,             ///< symmetric motion partition,   Nx N
    803   SIZE_2NxnU,           ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)
    804   SIZE_2NxnD,           ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2)
    805   SIZE_nLx2N,           ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N
    806   SIZE_nRx2N,           ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N
    807   SIZE_NONE = 15
    808 };
    809 
     662  SIZE_2Nx2N           = 0,           ///< symmetric motion partition,  2Nx2N
     663  SIZE_2NxN            = 1,           ///< symmetric motion partition,  2Nx N
     664  SIZE_Nx2N            = 2,           ///< symmetric motion partition,   Nx2N
     665  SIZE_NxN             = 3,           ///< symmetric motion partition,   Nx N
     666  SIZE_2NxnU           = 4,           ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)
     667  SIZE_2NxnD           = 5,           ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2)
     668  SIZE_nLx2N           = 6,           ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N
     669  SIZE_nRx2N           = 7,           ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N
     670  NUMBER_OF_PART_SIZES = 8
     671};
    810672/// supported prediction type
    811673enum PredMode
    812674{
    813   MODE_INTER,           ///< inter-prediction mode
    814   MODE_INTRA,           ///< intra-prediction mode
    815   MODE_NONE = 15
    816 };
    817 
    818 /// texture component type
    819 enum TextType
    820 {
    821   TEXT_LUMA,            ///< luma
    822   TEXT_CHROMA,          ///< chroma (U+V)
    823   TEXT_CHROMA_U,        ///< chroma U
    824   TEXT_CHROMA_V,        ///< chroma V
    825   TEXT_ALL,             ///< Y+U+V
    826   TEXT_NONE = 15
    827 };
    828 
     675  MODE_INTER                 = 0,     ///< inter-prediction mode
     676  MODE_INTRA                 = 1,     ///< intra-prediction mode
     677  NUMBER_OF_PREDICTION_MODES = 2,
     678};
    829679/// reference list index
    830680enum RefPicList
    831681{
    832   REF_PIC_LIST_0 = 0,   ///< reference list 0
    833   REF_PIC_LIST_1 = 1,   ///< reference list 1
    834   REF_PIC_LIST_X = 100  ///< special mark
    835 };
    836 
     682  REF_PIC_LIST_0               = 0,   ///< reference list 0
     683  REF_PIC_LIST_1               = 1,   ///< reference list 1
     684  NUM_REF_PIC_LIST_01          = 2,
     685  REF_PIC_LIST_X               = 100  ///< special mark
     686};
    837687/// distortion function index
    838688enum DFunc
    839689{
    840   DF_DEFAULT  = 0,
    841   DF_SSE      = 1,      ///< general size SSE
    842   DF_SSE4     = 2,      ///<   4xM SSE
    843   DF_SSE8     = 3,      ///<   8xM SSE
    844   DF_SSE16    = 4,      ///<  16xM SSE
    845   DF_SSE32    = 5,      ///<  32xM SSE
    846   DF_SSE64    = 6,      ///<  64xM SSE
    847   DF_SSE16N   = 7,      ///< 16NxM SSE
    848  
    849   DF_SAD      = 8,      ///< general size SAD
    850   DF_SAD4     = 9,      ///<   4xM SAD
    851   DF_SAD8     = 10,     ///<   8xM SAD
    852   DF_SAD16    = 11,     ///<  16xM SAD
    853   DF_SAD32    = 12,     ///<  32xM SAD
    854   DF_SAD64    = 13,     ///<  64xM SAD
    855   DF_SAD16N   = 14,     ///< 16NxM SAD
    856  
    857   DF_SADS     = 15,     ///< general size SAD with step
    858   DF_SADS4    = 16,     ///<   4xM SAD with step
    859   DF_SADS8    = 17,     ///<   8xM SAD with step
    860   DF_SADS16   = 18,     ///<  16xM SAD with step
    861   DF_SADS32   = 19,     ///<  32xM SAD with step
    862   DF_SADS64   = 20,     ///<  64xM SAD with step
    863   DF_SADS16N  = 21,     ///< 16NxM SAD with step
    864  
    865   DF_HADS     = 22,     ///< general size Hadamard with step
    866   DF_HADS4    = 23,     ///<   4xM HAD with step
    867   DF_HADS8    = 24,     ///<   8xM HAD with step
    868   DF_HADS16   = 25,     ///<  16xM HAD with step
    869   DF_HADS32   = 26,     ///<  32xM HAD with step
    870   DF_HADS64   = 27,     ///<  64xM HAD with step
    871   DF_HADS16N  = 28,     ///< 16NxM HAD with step
    872 #if H_3D_VSO
     690  DF_DEFAULT         = 0,
     691  DF_SSE             = 1,      ///< general size SSE
     692  DF_SSE4            = 2,      ///<   4xM SSE
     693  DF_SSE8            = 3,      ///<   8xM SSE
     694  DF_SSE16           = 4,      ///<  16xM SSE
     695  DF_SSE32           = 5,      ///<  32xM SSE
     696  DF_SSE64           = 6,      ///<  64xM SSE
     697  DF_SSE16N          = 7,      ///< 16NxM SSE
     698  DF_SAD             = 8,      ///< general size SAD
     699  DF_SAD4            = 9,      ///<   4xM SAD
     700  DF_SAD8            = 10,     ///<   8xM SAD
     701  DF_SAD16           = 11,     ///<  16xM SAD
     702  DF_SAD32           = 12,     ///<  32xM SAD
     703  DF_SAD64           = 13,     ///<  64xM SAD
     704  DF_SAD16N          = 14,     ///< 16NxM SAD
     705  DF_SADS            = 15,     ///< general size SAD with step
     706  DF_SADS4           = 16,     ///<   4xM SAD with step
     707  DF_SADS8           = 17,     ///<   8xM SAD with step
     708  DF_SADS16          = 18,     ///<  16xM SAD with step
     709  DF_SADS32          = 19,     ///<  32xM SAD with step
     710  DF_SADS64          = 20,     ///<  64xM SAD with step
     711  DF_SADS16N         = 21,     ///< 16NxM SAD with step
     712  DF_HADS            = 22,     ///< general size Hadamard with step
     713  DF_HADS4           = 23,     ///<   4xM HAD with step
     714  DF_HADS8           = 24,     ///<   8xM HAD with step
     715  DF_HADS16          = 25,     ///<  16xM HAD with step
     716  DF_HADS32          = 26,     ///<  32xM HAD with step
     717  DF_HADS64          = 27,     ///<  64xM HAD with step
     718  DF_HADS16N         = 28,     ///< 16NxM HAD with step
     719#if NH_3D_VSO
    873720  DF_VSD      = 29,      ///< general size VSD
    874721  DF_VSD4     = 30,      ///<   4xM VSD
     
    879726  DF_VSD16N   = 35,      ///< 16NxM VSD
    880727#endif
    881 
    882 #if AMP_SAD
    883   DF_SAD12    = 43,
    884   DF_SAD24    = 44,
    885   DF_SAD48    = 45,
    886 
    887   DF_SADS12   = 46,
    888   DF_SADS24   = 47,
    889   DF_SADS48   = 48,
    890 
    891   DF_SSE_FRAME = 50     ///< Frame-based SSE
    892 #else
    893   DF_SSE_FRAME = 33     ///< Frame-based SSE
    894 #endif
    895 };
    896 
     728  DF_SAD12           = 43,
     729  DF_SAD24           = 44,
     730  DF_SAD48           = 45,
     731  DF_SADS12          = 46,
     732  DF_SADS24          = 47,
     733  DF_SADS48          = 48,
     734  DF_SSE_FRAME       = 50,     ///< Frame-based SSE
     735  DF_TOTAL_FUNCTIONS = 64
     736};
    897737/// index for SBAC based RD optimization
    898738enum CI_IDX
     
    906746  CI_NUM,               ///< total number
    907747};
    908 
    909748/// motion vector predictor direction used in AMVP
    910749enum MVP_DIR
     
    916755  MD_ABOVE_LEFT         ///< MVP of above left block
    917756};
    918 
    919 /// merging candidates
    920 #if H_3D
     757#if NH_3D_MLC
    921758enum DefaultMergCandOrder
    922759{
     
    931768  MRG_A0,               ///< Left bottom
    932769  MRG_B2,               ///< Above left
    933   MRG_IVSHIFT,          ///< Shifted IVMC of Shifted IVDC. (These are mutually exclusive)
     770  MRG_IVSHIFT,          ///< Shifted IVMC or Shifted IVDC. (These are mutually exclusive)
    934771  MRG_COL               ///< Temporal co-located
    935772};
    936773#endif
    937 
     774enum StoredResidualType
     775{
     776  RESIDUAL_RECONSTRUCTED          = 0,
     777  RESIDUAL_ENCODER_SIDE           = 1,
     778  NUMBER_OF_STORED_RESIDUAL_TYPES = 2
     779};
     780enum TransformDirection
     781{
     782  TRANSFORM_FORWARD              = 0,
     783  TRANSFORM_INVERSE              = 1,
     784  TRANSFORM_NUMBER_OF_DIRECTIONS = 2
     785};
     786/// supported ME search methods
     787enum MESearchMethod
     788{
     789  FULL_SEARCH                = 0,     ///< Full search
     790  DIAMOND                    = 1,     ///< Fast search
     791  SELECTIVE                  = 2      ///< Selective search
     792};
    938793/// coefficient scanning type used in ACS
    939794enum COEFF_SCAN_TYPE
    940795{
    941   SCAN_DIAG = 0,         ///< up-right diagonal scan
    942   SCAN_HOR,              ///< horizontal first scan
    943   SCAN_VER               ///< vertical first scan
    944 };
    945 
     796  SCAN_DIAG = 0,        ///< up-right diagonal scan
     797  SCAN_HOR  = 1,        ///< horizontal first scan
     798  SCAN_VER  = 2,        ///< vertical first scan
     799  SCAN_NUMBER_OF_TYPES = 3
     800};
     801enum COEFF_SCAN_GROUP_TYPE
     802{
     803  SCAN_UNGROUPED   = 0,
     804  SCAN_GROUPED_4x4 = 1,
     805  SCAN_NUMBER_OF_GROUP_TYPES = 2
     806};
     807enum SignificanceMapContextType
     808{
     809  CONTEXT_TYPE_4x4    = 0,
     810  CONTEXT_TYPE_8x8    = 1,
     811  CONTEXT_TYPE_NxN    = 2,
     812  CONTEXT_TYPE_SINGLE = 3,
     813  CONTEXT_NUMBER_OF_TYPES = 4
     814};
     815enum ScalingListMode
     816{
     817  SCALING_LIST_OFF,
     818  SCALING_LIST_DEFAULT,
     819  SCALING_LIST_FILE_READ
     820};
     821enum ScalingListSize
     822{
     823  SCALING_LIST_4x4 = 0,
     824  SCALING_LIST_8x8,
     825  SCALING_LIST_16x16,
     826  SCALING_LIST_32x32,
     827  SCALING_LIST_SIZE_NUM
     828};
     829// Slice / Slice segment encoding modes
     830enum SliceConstraint
     831{
     832  NO_SLICES              = 0,          ///< don't use slices / slice segments
     833  FIXED_NUMBER_OF_CTU    = 1,          ///< Limit maximum number of largest coding tree units in a slice / slice segments
     834  FIXED_NUMBER_OF_BYTES  = 2,          ///< Limit maximum number of bytes in a slice / slice segment
     835  FIXED_NUMBER_OF_TILES  = 3,          ///< slices / slice segments span an integer number of tiles
     836};
     837enum SAOMode //mode
     838{
     839  SAO_MODE_OFF = 0,
     840  SAO_MODE_NEW,
     841  SAO_MODE_MERGE,
     842  NUM_SAO_MODES
     843};
     844enum SAOModeMergeTypes
     845{
     846  SAO_MERGE_LEFT =0,
     847  SAO_MERGE_ABOVE,
     848  NUM_SAO_MERGE_TYPES
     849};
     850enum SAOModeNewTypes
     851{
     852  SAO_TYPE_START_EO =0,
     853  SAO_TYPE_EO_0 = SAO_TYPE_START_EO,
     854  SAO_TYPE_EO_90,
     855  SAO_TYPE_EO_135,
     856  SAO_TYPE_EO_45,
     857  SAO_TYPE_START_BO,
     858  SAO_TYPE_BO = SAO_TYPE_START_BO,
     859  NUM_SAO_NEW_TYPES
     860};
     861#define NUM_SAO_EO_TYPES_LOG2 2
     862enum SAOEOClasses
     863{
     864  SAO_CLASS_EO_FULL_VALLEY = 0,
     865  SAO_CLASS_EO_HALF_VALLEY = 1,
     866  SAO_CLASS_EO_PLAIN       = 2,
     867  SAO_CLASS_EO_HALF_PEAK   = 3,
     868  SAO_CLASS_EO_FULL_PEAK   = 4,
     869  NUM_SAO_EO_CLASSES,
     870};
     871#define NUM_SAO_BO_CLASSES_LOG2  5
     872#define NUM_SAO_BO_CLASSES       (1<<NUM_SAO_BO_CLASSES_LOG2)
    946873namespace Profile
    947874{
     
    952879    MAIN10 = 2,
    953880    MAINSTILLPICTURE = 3,
    954 #if H_MV
    955     MULTIVIEWMAIN = 6,
    956 #if H_3D
     881    MAINREXT = 4,
     882    HIGHTHROUGHPUTREXT = 5
     883#if NH_MV
     884    ,MULTIVIEWMAIN = 6,
     885#if NH_3D
    957886    MAIN3D = 8,
    958887#endif
     
    960889  };
    961890}
    962 
    963891namespace Level
    964892{
     
    968896    HIGH = 1,
    969897  };
    970 
    971898  enum Name
    972899  {
     900    // code = (level * 30)
    973901    NONE     = 0,
    974902    LEVEL1   = 30,
     
    985913    LEVEL6_1 = 183,
    986914    LEVEL6_2 = 186,
     915    LEVEL8_5 = 255,
    987916  };
    988917}
     918enum CostMode
     919{
     920  COST_STANDARD_LOSSY              = 0,
     921  COST_SEQUENCE_LEVEL_LOSSLESS     = 1,
     922  COST_LOSSLESS_CODING             = 2,
     923  COST_MIXED_LOSSLESS_LOSSY_CODING = 3
     924};
     925enum SPSExtensionFlagIndex
     926{
     927  SPS_EXT__REXT           = 0,
     928//SPS_EXT__MVHEVC         = 1, //for use in future versions
     929//SPS_EXT__SHVC           = 2, //for use in future versions
     930  NUM_SPS_EXTENSION_FLAGS = 8
     931};
     932enum PPSExtensionFlagIndex
     933{
     934  PPS_EXT__REXT           = 0,
     935//PPS_EXT__MVHEVC         = 1, //for use in future versions
     936//PPS_EXT__SHVC           = 2, //for use in future versions
     937  NUM_PPS_EXTENSION_FLAGS = 8
     938};
     939// TODO: Existing names used for the different NAL unit types can be altered to better reflect the names in the spec.
     940//       However, the names in the spec are not yet stable at this point. Once the names are stable, a cleanup
     941//       effort can be done without use of macros to alter the names used to indicate the different NAL unit types.
     942enum NalUnitType
     943{
     944  NAL_UNIT_CODED_SLICE_TRAIL_N = 0, // 0
     945  NAL_UNIT_CODED_SLICE_TRAIL_R,     // 1
     946  NAL_UNIT_CODED_SLICE_TSA_N,       // 2
     947  NAL_UNIT_CODED_SLICE_TSA_R,       // 3
     948  NAL_UNIT_CODED_SLICE_STSA_N,      // 4
     949  NAL_UNIT_CODED_SLICE_STSA_R,      // 5
     950  NAL_UNIT_CODED_SLICE_RADL_N,      // 6
     951  NAL_UNIT_CODED_SLICE_RADL_R,      // 7
     952  NAL_UNIT_CODED_SLICE_RASL_N,      // 8
     953  NAL_UNIT_CODED_SLICE_RASL_R,      // 9
     954  NAL_UNIT_RESERVED_VCL_N10,
     955  NAL_UNIT_RESERVED_VCL_R11,
     956  NAL_UNIT_RESERVED_VCL_N12,
     957  NAL_UNIT_RESERVED_VCL_R13,
     958  NAL_UNIT_RESERVED_VCL_N14,
     959  NAL_UNIT_RESERVED_VCL_R15,
     960  NAL_UNIT_CODED_SLICE_BLA_W_LP,    // 16
     961  NAL_UNIT_CODED_SLICE_BLA_W_RADL,  // 17
     962  NAL_UNIT_CODED_SLICE_BLA_N_LP,    // 18
     963  NAL_UNIT_CODED_SLICE_IDR_W_RADL,  // 19
     964  NAL_UNIT_CODED_SLICE_IDR_N_LP,    // 20
     965  NAL_UNIT_CODED_SLICE_CRA,         // 21
     966  NAL_UNIT_RESERVED_IRAP_VCL22,
     967  NAL_UNIT_RESERVED_IRAP_VCL23,
     968  NAL_UNIT_RESERVED_VCL24,
     969  NAL_UNIT_RESERVED_VCL25,
     970  NAL_UNIT_RESERVED_VCL26,
     971  NAL_UNIT_RESERVED_VCL27,
     972  NAL_UNIT_RESERVED_VCL28,
     973  NAL_UNIT_RESERVED_VCL29,
     974  NAL_UNIT_RESERVED_VCL30,
     975  NAL_UNIT_RESERVED_VCL31,
     976  NAL_UNIT_VPS,                     // 32
     977  NAL_UNIT_SPS,                     // 33
     978  NAL_UNIT_PPS,                     // 34
     979  NAL_UNIT_ACCESS_UNIT_DELIMITER,   // 35
     980  NAL_UNIT_EOS,                     // 36
     981  NAL_UNIT_EOB,                     // 37
     982  NAL_UNIT_FILLER_DATA,             // 38
     983  NAL_UNIT_PREFIX_SEI,              // 39
     984  NAL_UNIT_SUFFIX_SEI,              // 40
     985  NAL_UNIT_RESERVED_NVCL41,
     986  NAL_UNIT_RESERVED_NVCL42,
     987  NAL_UNIT_RESERVED_NVCL43,
     988  NAL_UNIT_RESERVED_NVCL44,
     989  NAL_UNIT_RESERVED_NVCL45,
     990  NAL_UNIT_RESERVED_NVCL46,
     991  NAL_UNIT_RESERVED_NVCL47,
     992  NAL_UNIT_UNSPECIFIED_48,
     993  NAL_UNIT_UNSPECIFIED_49,
     994  NAL_UNIT_UNSPECIFIED_50,
     995  NAL_UNIT_UNSPECIFIED_51,
     996  NAL_UNIT_UNSPECIFIED_52,
     997  NAL_UNIT_UNSPECIFIED_53,
     998  NAL_UNIT_UNSPECIFIED_54,
     999  NAL_UNIT_UNSPECIFIED_55,
     1000  NAL_UNIT_UNSPECIFIED_56,
     1001  NAL_UNIT_UNSPECIFIED_57,
     1002  NAL_UNIT_UNSPECIFIED_58,
     1003  NAL_UNIT_UNSPECIFIED_59,
     1004  NAL_UNIT_UNSPECIFIED_60,
     1005  NAL_UNIT_UNSPECIFIED_61,
     1006  NAL_UNIT_UNSPECIFIED_62,
     1007  NAL_UNIT_UNSPECIFIED_63,
     1008  NAL_UNIT_INVALID,
     1009};
     1010#if NH_MV
     1011/// scalability types
     1012enum ScalabilityType
     1013{
     1014  DEPTH_ID = 0,   
     1015  VIEW_ORDER_INDEX  = 1,
     1016  DEPENDENCY_ID = 2,
     1017  AUX_ID = 3,
     1018};
     1019#endif
     1020#if NH_3D
     1021// Renderer
     1022enum BlenMod
     1023{
     1024  BLEND_NONE  = -1,
     1025  BLEND_AVRG  = 0,
     1026  BLEND_LEFT  = 1,
     1027  BLEND_RIGHT = 2,
     1028  BLEND_GEN   =  3
     1029};
     1030enum
     1031{
     1032  VIEWPOS_INVALID = -1,
     1033  VIEWPOS_LEFT    = 0,
     1034  VIEWPOS_RIGHT   = 1,
     1035  VIEWPOS_MERGED  = 2
     1036};
     1037#endif
     1038// ====================================================================================================================
     1039// Type definition
     1040// ====================================================================================================================
     1041/// parameters for adaptive loop filter
     1042class TComPicSym;
     1043#define MAX_NUM_SAO_CLASSES  32  //(NUM_SAO_EO_GROUPS > NUM_SAO_BO_GROUPS)?NUM_SAO_EO_GROUPS:NUM_SAO_BO_GROUPS
     1044struct SAOOffset
     1045{
     1046  SAOMode modeIdc; // NEW, MERGE, OFF
     1047  Int typeIdc;     // union of SAOModeMergeTypes and SAOModeNewTypes, depending on modeIdc.
     1048  Int typeAuxInfo; // BO: starting band index
     1049  Int offset[MAX_NUM_SAO_CLASSES];
     1050  SAOOffset();
     1051  ~SAOOffset();
     1052  Void reset();
     1053  const SAOOffset& operator= (const SAOOffset& src);
     1054};
     1055struct SAOBlkParam
     1056{
     1057  SAOBlkParam();
     1058  ~SAOBlkParam();
     1059  Void reset();
     1060  const SAOBlkParam& operator= (const SAOBlkParam& src);
     1061  SAOOffset& operator[](Int compIdx){ return offsetParam[compIdx];}
     1062private:
     1063  SAOOffset offsetParam[MAX_NUM_COMPONENT];
     1064};
     1065struct BitDepths
     1066{
     1067#if O0043_BEST_EFFORT_DECODING
     1068  Int recon[MAX_NUM_CHANNEL_TYPE]; ///< the bit depth used for reconstructing the video
     1069  Int stream[MAX_NUM_CHANNEL_TYPE];///< the bit depth used indicated in the SPS
     1070#else
     1071  Int recon[MAX_NUM_CHANNEL_TYPE]; ///< the bit depth as indicated in the SPS
     1072#endif
     1073};
     1074/// parameters for deblocking filter
     1075typedef struct _LFCUParam
     1076{
     1077  Bool bInternalEdge;                     ///< indicates internal edge
     1078  Bool bLeftEdge;                         ///< indicates left edge
     1079  Bool bTopEdge;                          ///< indicates top edge
     1080} LFCUParam;
     1081//TU settings for entropy encoding
     1082struct TUEntropyCodingParameters
     1083{
     1084  const UInt            *scan;
     1085  const UInt            *scanCG;
     1086        COEFF_SCAN_TYPE  scanType;
     1087        UInt             widthInGroups;
     1088        UInt             heightInGroups;
     1089        UInt             firstSignificanceMapContext;
     1090};
     1091struct TComPictureHash
     1092{
     1093  std::vector<UChar> hash;
     1094  Bool operator==(const TComPictureHash &other) const
     1095  {
     1096    if (other.hash.size() != hash.size())
     1097    {
     1098      return false;
     1099    }
     1100    for(UInt i=0; i<UInt(hash.size()); i++)
     1101    {
     1102      if (other.hash[i] != hash[i])
     1103      {
     1104        return false;
     1105      }
     1106    }
     1107    return true;
     1108  }
     1109  Bool operator!=(const TComPictureHash &other) const
     1110  {
     1111    return !(*this == other);
     1112  }
     1113};
     1114struct TComSEITimeSet
     1115{
     1116  TComSEITimeSet() : clockTimeStampFlag(false),
     1117                     numUnitFieldBasedFlag(false),
     1118                     countingType(0),
     1119                     fullTimeStampFlag(false),
     1120                     discontinuityFlag(false),
     1121                     cntDroppedFlag(false),
     1122                     numberOfFrames(0),
     1123                     secondsValue(0),
     1124                     minutesValue(0),
     1125                     hoursValue(0),
     1126                     secondsFlag(false),
     1127                     minutesFlag(false),
     1128                     hoursFlag(false),
     1129                     timeOffsetLength(0),
     1130                     timeOffsetValue(0)
     1131  { }
     1132  Bool clockTimeStampFlag;
     1133  Bool numUnitFieldBasedFlag;
     1134  Int  countingType;
     1135  Bool fullTimeStampFlag;
     1136  Bool discontinuityFlag;
     1137  Bool cntDroppedFlag;
     1138  Int  numberOfFrames;
     1139  Int  secondsValue;
     1140  Int  minutesValue;
     1141  Int  hoursValue;
     1142  Bool secondsFlag;
     1143  Bool minutesFlag;
     1144  Bool hoursFlag;
     1145  Int  timeOffsetLength;
     1146  Int  timeOffsetValue;
     1147};
     1148struct TComSEIMasteringDisplay
     1149{
     1150  Bool      colourVolumeSEIEnabled;
     1151  UInt      maxLuminance;
     1152  UInt      minLuminance;
     1153  UShort    primaries[3][2];
     1154  UShort    whitePoint[2];
     1155};
    9891156//! \}
    990 
    991 #if H_MV
    992 
    993 /// scalability types
    994   enum ScalabilityType
    995   {
    996 #if H_3D
    997     DEPTH_ID = 0,   
    998 #endif   
    999     VIEW_ORDER_INDEX  = 1,
    1000     DEPENDENCY_ID = 2,
    1001     AUX_ID = 3,
    1002   };
    1003 #endif
    1004 #if H_3D
    1005   // Renderer
    1006   enum BlenMod
    1007   {
    1008     BLEND_NONE  = -1,
    1009     BLEND_AVRG  = 0,
    1010     BLEND_LEFT  = 1,
    1011     BLEND_RIGHT = 2,
    1012     BLEND_GEN   =  3
    1013   };
    1014 
    1015  
    1016   enum
    1017   {
    1018     VIEWPOS_INVALID = -1,
    1019     VIEWPOS_LEFT    = 0,
    1020     VIEWPOS_RIGHT   = 1,
    1021     VIEWPOS_MERGED  = 2
    1022   };
    1023 
    1024 #define Log2( n ) ( log((double)n) / log(2.0) ) // Ed.(GT): This is very very bad and should be fixed to used integer arithmetics ( see gCeilLog2 ) moreover it should not be defined in the tool macro section!
    1025 #endif
    1026 #endif
     1157#endif
Note: See TracChangeset for help on using the changeset viewer.