source: 3DVCSoftware/branches/HTM-14.1-update-dev2-Sharp/source/Lib/TLibCommon/TypeDef.h @ 1244

Last change on this file since 1244 was 1244, checked in by sharpjp-htm, 11 years ago

Fix uninitialized value in cDtParam.bUseIC (it happened on intra block), it affects coding results a little.
#define NH_3D_IC_FIX 1
The fixed bug is the reason why the base layer's result changes when ic is enabled.
Note: similar fix may be needed in Inter SDC (please see H_3D_INTER_SDC_FIX)

  • Property svn:eol-style set to native
File size: 60.9 KB
Line 
1/* The copyright in this software is being made available under the BSD
2 * License, included below. This software may be subject to other third party
3 * and contributor rights, including patent rights, and no such rights are
4 * granted under this license.
5 *
6 * Copyright (c) 2010-2015, ITU/ISO/IEC
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 *  * Redistributions of source code must retain the above copyright notice,
13 *    this list of conditions and the following disclaimer.
14 *  * Redistributions in binary form must reproduce the above copyright notice,
15 *    this list of conditions and the following disclaimer in the documentation
16 *    and/or other materials provided with the distribution.
17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18 *    be used to endorse or promote products derived from this software without
19 *    specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33/** \file     TypeDef.h
34    \brief    Define basic types, new types and enumerations
35*/
36#ifndef __TYPEDEF__
37#define __TYPEDEF__
38#ifndef __COMMONDEF__
39#error Include CommonDef.h not TypeDef.h
40#endif
41#include <vector>
42//! \ingroup TLibCommon
43//! \{
44/////////////////////////////////////////////////////////////////////////////////////////
45///////////////////////////////// EXTENSION SELECTION /////////////////////////////////// 
46/////////////////////////////////////////////////////////////////////////////////////////
47/* HEVC_EXT might be defined by compiler/makefile options.
48   Linux makefiles support the following settings:   
49   make             -> HEVC_EXT not defined   
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
53*/
54#ifndef HEVC_EXT
55#define HEVC_EXT                    2
56#endif
57#if ( HEVC_EXT < 0 )||( HEVC_EXT > 2 )
58#error HEVC_EXT must be in the range of 0 to 2, inclusive.
59#endif
60#define NH_MV          ( HEVC_EXT != 0)
61#define NH_3D          ( HEVC_EXT == 2)
62
63/////////////////////////////////////////////////////////////////////////////////////////
64///////////////////////////////////   MAJOR DEFINES   /////////////////////////////////// 
65/////////////////////////////////////////////////////////////////////////////////////////
66#if NH_MV
67#define H_MV_ENC_DEC_TRAC                 1  //< CU/PU level tracking
68#define H_MV_ENC_DEC_TRAC_FIX             1  // by SHARP
69
70#if NH_3D
71#define NH_3D_VSO                         1
72#define NH_3D_TMVP                        1   // QC_TMVP_C0047
73                                              // Sony_M23639
74                                              // H_3D_TMVP_SCALING_FIX_K0053       1   // QC/CY for K0053
75#define NH_3D_IC                          1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
76                                              // Unifying rounding offset, for IC part, JCT3V-D0135
77                                              // SHARP_ILLUCOMP_REFINE_E0046
78                                              // MTK_CLIPPING_ALIGN_IC_E0168       // To support simplify bi-prediction PU with identical motion checking, JCT3V-E0168
79                                              // LGE_IC_CTX_F0160 //JCT3V-F0160
80                                              // SEC_ONLY_TEXTURE_IC_F0151
81                                              // MTK_IC_FLAG_CABAC_SIMP_G0061
82                                              // SEC_IC_ARP_SIG_G0072, Disabling IC when ARP is enabled, option 1 in JCT3V-G0072, part 2 in JCT3V-G0121
83                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086  Low-latency IC encoding in JCT3V-H0086
84                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX  1  // Remove the global variables used in JCT3V-H0086
85                                              // SEC_IC_NEIGHBOR_CLIP_I0080    // Clipping of neighboring sample position, JCT3V-I0080
86                                              // LGE_CHROMA_IC_J0050_J0034
87#define NH_3D_IC_FIX                      1   // Fix uninitialized value in cDtParam.bUseIC (it happened on intra block)
88#define NH_3D_FULL_PEL_DEPTH_MAP_MV_ACC   1   // Full Pel Interpolation for Depth, HHI_FULL_PEL_DEPTH_MAP_MV_ACC
89
90
91#endif
92
93#if H_3D
94#define H_3D_QTLPC                        1   // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068
95                                              // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units
96                                              // MTK_TEX_DEP_PAR_G0055 Texture-partition-dependent depth partition. JCT3V-G0055
97#define H_3D_VSO                          1   // VSO, View synthesis optimization, includes:
98                                              // HHI_VSO
99                                              // HHI_VSO_LS_TABLE_M23714 enable table base Lagrange multiplier optimization
100                                              // SAIT_VSO_EST_A0033, JCT3V-A0033 modification 3
101                                              // LGE_WVSO_A0119
102                                              // SCU_HS_VSD_BUGFIX_IMPROV_G0163
103#define H_3D_NBDV                         1   // Neighboring block disparity derivation
104                                              // QC_JCT3V-A0097
105                                              // LGE_DVMCP_A0126
106                                              // LGE_DVMCP_MEM_REDUCTION_B0135     
107                                              // QC_SIMPLE_NBDV_B0047
108                                              // FIX_LGE_DVMCP_B0133
109                                              // QC_NBDV_LDB_FIX_C0055
110                                              // MTK_SAIT_TEMPORAL_FIRST_ORDER_C0141_C0097
111                                              // MTK_SIMPLIFY_DVTC_C0135           
112                                              // QC_CU_NBDV_D0181
113                                              // SEC_DEFAULT_DV_D0112
114                                              // MTK_DVMCP_FIX_E0172       fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172
115                                              // SEC_SIMPLIFIED_NBDV_E0142 Simplified NBDV, JCT3V-E0142 and JCT3V-E0190
116                                              // MTK_NBDV_TN_FIX_E0172     fix the issue of DV derivation from the temporal neighboring blocks, issue 7 in JCT3V-E0172
117                                              // MTK_TEXTURE_MRGCAND_BUGFIX_E0182  Bug fix for TEXTURE MERGING CANDIDATE     , JCT3V-E0182
118                                              // LGE_SIMP_DISP_AVAIL_J0041    // Use 2 status for disparity availability - DISP_AVAILABLE and DISP_NONE
119#define H_3D_ARP                          1   // Advanced residual prediction (ARP), JCT3V-D0177
120                                              // QC_MTK_INTERVIEW_ARP_F0123_F0108 JCT3V-F0123; JCT3V-F0108
121                                              // SHARP_ARP_REF_CHECK_F0105        ARP reference picture selection and DPB check
122                                              // LGE_ARP_CTX_F0161                JCT3V-F0161
123                                              // MTK_ARP_FLAG_CABAC_SIMP_G0061 Use 2 context for ARP flag referring to only left neighbor block in JCT3V-G0061
124                                              // MTK_ARP_REF_SELECTION_G0053 ARP Reference picture selection in JCT3V-G0053
125                                              // 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
126                                              // QC_I0051_ARP_SIMP         
127                                              // SHARP_ARP_CHROMA_I0104     
128                                              // MTK_I0072_IVARP_SCALING_FIX
129                                              // 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
130                                              // SEC_ARP_REM_ENC_RESTRICT_K0035    Removal of encoder restriction of ARP, JCT3V-K0035
131#define H_3D_IC                           1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
132                                              // Unifying rounding offset, for IC part, JCT3V-D0135
133                                              // Full Pel Interpolation for Depth, HHI_FULL_PEL_DEPTH_MAP_MV_ACC
134                                              // SHARP_ILLUCOMP_REFINE_E0046
135                                              // MTK_CLIPPING_ALIGN_IC_E0168       // To support simplify bi-prediction PU with identical motion checking, JCT3V-E0168
136                                              // LGE_IC_CTX_F0160 //JCT3V-F0160
137                                              // SEC_ONLY_TEXTURE_IC_F0151
138                                              // MTK_IC_FLAG_CABAC_SIMP_G0061
139                                              // SEC_IC_ARP_SIG_G0072, Disabling IC when ARP is enabled, option 1 in JCT3V-G0072, part 2 in JCT3V-G0121
140                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086  Low-latency IC encoding in JCT3V-H0086
141                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX  1  // Remove the global variables used in JCT3V-H0086
142                                              // SEC_IC_NEIGHBOR_CLIP_I0080    // Clipping of neighboring sample position, JCT3V-I0080
143                                              // LGE_CHROMA_IC_J0050_J0034
144#if H_3D_NBDV
145#define H_3D_NBDV_REF                     1   // Depth oriented neighboring block disparity derivation
146                                              // MTK_D0156
147                                              // MERL_D0166: Reference view selection in NBDV & Bi-VSP
148                                              // MERL_C0152: Basic VSP
149                                              // NBDV_DEFAULT_VIEWIDX_BUGFIX Bug fix for invalid default view index for NBDV
150                                              // NTT_DoNBDV_VECTOR_CLIP_E0141 disparity vector clipping in DoNBDV, JCT3V-E0141 and JCT3V-E0209
151                                              // SEC_VER_DONBDV_H0103          Vertical DV Restriction for DoNBDV
152#endif
153#define H_3D_VSP                          1   // View synthesis prediction
154                                              // MERL_C0152: Basic VSP
155                                              // MERL_D0166: Reference view selection in NBDV & Bi-VSP
156                                              // MTK_D0105, LG_D0139: No VSP for depth
157                                              // QC_D0191: Clean up
158                                              // LG_D0092: Multiple VSP candidate allowed
159                                              // MTK_VSP_FIX_ALIGN_WD_E0172
160                                              // NTT_VSP_ADAPTIVE_SPLIT_E0207 adaptive sub-PU partitioning in VSP, JCT3V-E0207
161                                              // NTT_VSP_DC_BUGFIX_E0208 bugfix for sub-PU based DC in VSP, JCT3V-E0208
162                                              // NTT_VSP_COMMON_E0207_E0208 common part of JCT3V-E0207 and JCT3V-E0208
163                                              // MTK_F0109_LG_F0120_VSP_BLOCK MTK_LG_SIMPLIFY_VSP_BLOCK_PARTITION_F0109_F0120 
164                                              // SHARP_VSP_BLOCK_IN_AMP_F0102 VSP partitioning for AMP
165                                              // MTK_VSP_SIMPLIFICATION_F0111 1. Inherited VSP also use NBDV of current CU, 2. VSP cannot be inherited from above LCU rowss
166                                              // LGE_SHARP_VSP_INHERIT_F0104
167                                              // NTT_STORE_SPDV_VSP_G0148 Storing Sub-PU based DV for VSP
168                                              // Restricted bi-prediction for VSP
169                                              // MTK_MRG_LIST_SIZE_CLEANUP_J0059   1   // Include VSP for deriving merge candidate list size, JCT3V-J0059
170                                              // SEC_A1_BASED_VSP_J0039            1   // Removal of redundant VSP in Merge list
171#define H_3D_IV_MERGE                     1   // Inter-view motion merge candidate
172                                              // HHI_INTER_VIEW_MOTION_PRED
173                                              // SAIT_IMPROV_MOTION_PRED_M24829, improved inter-view motion vector prediction
174                                              // QC_MRG_CANS_B0048             , JCT3V-B0048, B0086, B0069
175                                              // OL_DISMV_POS_B0069            , different pos for disparity MV candidate, B0069
176                                              // MTK_INTERVIEW_MERGE_A0049     , second part
177                                              // QC_AMVP_MRG_UNIFY_IVCAN_C0051     
178                                              // TEXTURE MERGING CANDIDATE     , JCT3V-C0137
179                                              // QC_INRIA_MTK_MRG_E0126
180                                              // ETRIKHU_MERGE_REUSE_F0093 QC_DEPTH_IV_MRG_F0125, JCT3V-F0125: Depth oriented Inter-view MV candidate
181                                              // EC_MPI_ENABLING_MERGE_F0150, MPI flag in VPS and enabling in Merge mode
182                                              // MTK_NBDV_IVREF_FIX_G0067      , Disable IvMC, VSP when IVREF is not available, JCT3V-G0067
183                                              // SEC_DEPTH_DV_DERIVAITON_G0074, Simplification of DV derivation for depth, JCT3V-G0074
184                                              // QC_DEPTH_MERGE_SIMP_G0127 Remove DV candidate and shifting candidate for depth coding
185                                              // QC_IV_PRED_CONSTRAINT_H0137   Constraint on inter-view (motion) prediction tools
186                                              // ETRIKHU_BUGFIX_H0083          bug-fix for DV candidate pruning
187                                              // ETRIKHU_CLEANUP_H0083         cleaned-up source code for constructing merging candidate list
188                                              // ETRIKHU_CLEANUP_H0083_MISSING missing guard macros added by GT
189                                              // SHARP_SIMPLE_MERGE_H0062      Restrict 3D-HEVC merge cand in small PUs
190                                              // MTK_DIS_SPBIP8X4_H0205        Disable bi-prediction for 8x4 and 4x8 sub PU and remove the SPIVMP 2Nx2N restriction
191                                              // SEC_ADAPT_DISABLE_IVMP        Disabling IVMP merge candidates when IC is enabled, JCT3V-H0070
192                                              // SEC_SIMP_SHIFTED_DV_I0086     Simplification of Shifted DV candidate, JCT3V-I0086
193                                              // SEC_SHIFTED_IVMC_POS_K0036    Position Derivation for Shifted-IVMC, JCT3V-K0036
194#define H_3D_TMVP                         1   // QC_TMVP_C0047
195                                              // Sony_M23639
196                                              // H_3D_TMVP_SCALING_FIX_K0053       1   // QC/CY for K0053
197#define H_3D_DIM                          1   // DIM, Depth intra modes, includes:
198                                              // HHI_DMM_WEDGE_INTRA
199                                              // HHI_DMM_PRED_TEX
200                                              // FIX_WEDGE_NOFLOAT_D0036
201                                              // LGE_EDGE_INTRA_A0070
202                                              // LGE_DMM3_SIMP_C0044
203                                              // QC_DC_PREDICTOR_D0183
204                                              // HHI_DELTADC_DLT_D0035
205                                              // PKU_QC_DEPTH_INTRA_UNI_D0195
206                                              // RWTH_SDC_DLT_B0036
207                                              // INTEL_SDC64_D0193
208                                              // RWTH_SDC_CTX_SIMPL_D0032
209                                              // LGE_CONCATENATE_D0141
210                                              // FIX_SDC_ENC_RD_WVSO_D0163
211                                              // MTK_SAMPLE_BASED_SDC_D0110
212                                              // SEC_DMM2_E0146_HHIFIX Removal of DMM2 from DMMs
213                                              // ZJU_DEPTH_INTRA_MODE_E0204 Simplified Binarization for depth_intra_mode
214                                              // KWU_SDC_SIMPLE_DC_E0117 Simplified DC calculation for SDC
215                                              // SCU_HS_DMM4_REMOVE_DIV_E0242 DMM4 Division Removal
216                                              // LGE_SDC_REMOVE_DC_E0158 Removal of DC mode from SDC
217                                              // LGE_PKU_DMM3_OVERLAP_E0159_HHIFIX 1   Removal of overlap between DMM3 and DMM1
218                                              // LGE_PRED_RES_CODING_DLT_DOMAIN_F0159 JCT3V-F0159
219                                              // HHI_DIM_PREDSAMP_FIX_F0171
220                                              // SEC_DMM3_RBC_F0147 Removal of DMM3 and RBC from DMMs
221                                              // QC_DIM_DELTADC_UNIFY_F0132 Unify delta DC coding in depth intra modes
222                                              // Unify intra SDC and inter SDC
223                                              // QC_GENERIC_SDC_G0122 Generalize SDC to all depth intra modes
224                                              // SCU_HS_DEPTH_DC_PRED_G0143
225                                              // HS_TSINGHUA_SDC_SPLIT_G0111
226                                              // QC_PKU_SDC_SPLIT_G0123 Intra SDC Split
227                                              // HS_DMM_SDC_PREDICTOR_UNIFY_H0108  Unification of DMM and SDC predictor derivation
228                                              // LGE_SIMP_DIM_NOT_PRESENT_FLAG_CODING_H0119_H0135  Use only one context for CABAC of dim_not_present_flag
229                                              // QC_SIMP_DELTADC_CODING_H0131   Simplify detaDC entropy coding
230                                              // MTK_DMM_SIMP_CODE_H0092        Remove CABAC context for DMM1 mode coding
231                                              // MTK_DELTA_DC_FLAG_ONE_CONTEXT_H0084_H0100_H0113 Use only one context for CABAC of delta_dc_flag as in JCTVC-H0084, JCTVC-H0100 and JCTVC-H0113
232                                              // MTK_SDC_FLAG_FIX_H0095                          Remove conditional check of PCM flag based on SDC flag, JCTVC-H0095
233                                              // SEC_NO_RESI_DLT_H0105   
234                                              // MTK_DLT_CODING_FIX_H0091
235                                              // HS_DMM_SIGNALLING_I0120
236                                              // SHARP_DMM1_I0110 LUT size reduction for DMM1 proposed in JCT3V-I0110
237                                              // FAST_SDC_OFFSET_DECISION_I0084
238                                              // SEPARATE_FLAG_I0085
239                                              // H_3D_DELTA_DLT
240                                              // RWTH_DLT_CLIP_I0057
241                                              // MTK_DMM_SIM_J0035
242                                              // MTK_J0033
243                                              // SHARP_DLT_SIMP_J0029 DLT(DepthValue2Idx[]) table derivation cleanup
244                                              // SHARP_DMM_CLEAN_K0042             1   // Generate DMM pattern with rotation
245#define H_3D_INTER_SDC                    1   // INTER SDC, Inter simplified depth coding
246                                              // LGE_INTER_SDC_E0156 Enable inter SDC for depth coding
247                                              // SEC_INTER_SDC_G0101 Improved inter SDC with multiple DC candidates
248#define H_3D_SPIVMP                       1   // H_3D_SPIVMP JCT3V-F0110: Sub-PU level inter-view motion prediction
249                                              // SEC_SPIVMP_MCP_SIZE_G0077, Apply SPIVMP only to 2Nx2N partition, JCT3V-G0077
250                                              // QC_SPIVMP_MPI_G0119 Sub-PU level MPI merge candidate
251                                              // Simplification on Sub-PU level temporal interview motion prediction
252                                              // MPI_SUBPU_DEFAULT_MV_H0077_H0099_H0111_H0133
253#define H_3D_DBBP                         1   // DBBP: Depth-based Block Partitioning and Merging
254                                              // MTK_DBBP_AMP_REM_H0072   
255                                              // RWTH_DBBP_NO_SPU_H0057   
256                                              // SEC_DBBP_FILTERING_H0104
257                                              // MTK_DBBP_SIGNALING_H0094   
258                                              // H_3D_FIX_DBBP_IVMP Fix . Enable IVMP is always disabled, when DBBP is enabled. The original intention is to disable Sub-PU IVMP when DBBP is enabled, not to disable IVMP itself.
259                                              // SEC_DBBP_EXPLICIT_SIG_I0077 Remove the partition derivation and signal dbbp_flag only when the partition mode is 2NxN/Nx2N, JCT3V-I0077
260                                              // Disallow DBBP in 8x8 CU, JCT3V-I0078
261                                              // SHARP_DBBP_SIMPLE_FLTER_I0109 Simple condition and one dimensional filter for DBBP
262                                              // SEC_DBBP_DMM4_THRESHOLD_I0076 Simplification of threshold derivation for DBBP and DMM4, JCT3V-I0076
263                                              // SEC_DBBP_VIEW_REF_CHECK_J0037 Signaling dbbp_flag when the current slice has view reference picture(s), JCT3V-J0037 item4
264                                              // RWTH_DBBP_NO_SATD_K0028
265                                              // HS_DBBP_CLEAN_K0048
266#define H_3D_DDD                          1   // Disparity derived depth coding
267                                              // LGE_DDD_REMOVAL_J0042_J0030 DDD removal
268#define H_3D_DIS                          1   // Depth intra skip
269                                              // SEC_DEPTH_INTRA_SKIP_MODE_K0033  Depth intra skip mode
270#define H_3D_FCO                          0   // Flexible coding order for 3D
271#define H_3D_FAST_INTRA_SDC               1   // I0123
272// OTHERS
273                                              // MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 // Progressive MV Compression, JCT3V-E0170
274#define H_3D_FAST_TEXTURE_ENCODING        1   // Fast merge mode decision and early CU determination for texture component of dependent view, JCT3V-E0173
275                                              // MTK_FAST_TEXTURE_ENCODING_E0173
276#if H_3D_DIM
277#define H_3D_FAST_DEPTH_INTRA             1   // Fast DMM Selection
278                                              // SCU_HS_FAST_DEPTH_INTRA_E0238_HHIFIX
279#endif
280//HLS
281                                             // HHI_DEPENDENCY_SIGNALLING_I1_J0107
282                                             // HHI_TOOL_PARAMETERS_I2_J0107
283                                             // HHI_VPS_3D_EXTENSION_I3_J0107
284                                             // HHI_INTER_COMP_PRED_K0052
285                                             // HHI_RES_PRED_K0052       
286                                             // HHI_CAM_PARA_K0052       
287                                             // H_3D_DIRECT_DEP_TYPE     
288// Rate Control
289#define KWU_FIX_URQ                       1
290#define KWU_RC_VIEWRC_E0227               0  ///< JCT3V-E0227, view-wise target bitrate allocation
291#define KWU_RC_MADPRED_E0227              0  ///< JCT3V-E0227, inter-view MAD prediction
292#endif // H_3D
293/////////////////////////////////////////////////////////////////////////////////////////
294///////////////////////////////////   DERIVED DEFINES /////////////////////////////////// 
295/////////////////////////////////////////////////////////////////////////////////////////
296#if NH_3D
297#define H_3D_OUTPUT_ACTIVE_TOOLS               0
298#define H_3D_REN_MAX_DEV_OUT                   0
299#endif
300///// ***** VIEW SYNTHESIS OPTIMIZAION *********
301#if NH_3D_VSO                                 
302#define H_3D_VSO_DIST_INT                 1   // Allow negative synthesized view distortion change
303#define H_3D_VSO_COLOR_PLANES             1   // Compute VSO distortion on color planes
304#define H_3D_VSO_EARLY_SKIP               1   // LGE_VSO_EARLY_SKIP_A0093, A0093 modification 4
305#define H_3D_VSO_RM_ASSERTIONS            0   // Output VSO assertions
306#define H_3D_VSO_SYNTH_DIST_OUT           0   // Output of synthesized view distortion instead of depth distortion in encoder output
307#endif
308////   ****** NEIGHBOURING BLOCK-BASED DISPARITY VECTOR  *********
309#if H_3D_NBDV
310#define DVFROM_LEFT                       0
311#define DVFROM_ABOVE                      1
312#define IDV_CANDS                         2
313#endif
314///// ***** ADVANCED INTERVIEW RESIDUAL PREDICTION *********
315#if H_3D_ARP
316#define H_3D_ARP_WFNR                     3
317#endif
318///// ***** DEPTH INTRA MODES *********
319#if H_3D_DIM
320                                              // HHI_DMM4_ENC_I0066
321#define H_3D_DIM_DMM                      1   // Depth Modeling Modes
322#define H_3D_DIM_SDC                      1   // Simplified Depth Coding method
323#define H_3D_DIM_DLT                      1   // Depth Lookup Table
324#define H_3D_DIM_ENC                      1   // Depth Intra encoder optimizations, includes:
325                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
326                                              // LG_ZEROINTRADEPTHRESI_A0087
327#endif
328/////////////////////////////////////////////////////////////////////////////////////
329/// GT: Move values which are not flags to CommonDef.h and convert to static int !!
330///////////////////////////////////////////////////////////////////////////////////
331///// ***** VIEW SYNTHESIS PREDICTION *********
332#if H_3D_VSP
333#define H_3D_VSP_BLOCKSIZE                4   // Supported values: 1, 2, and 4
334#if H_3D_VSP_BLOCKSIZE == 1
335#define H_3D_VSP_CONSTRAINED              1   // Constrained VSP @ 1x1
336#else
337#define H_3D_VSP_CONSTRAINED              0
338#endif
339#endif
340///// ***** ILLUMATION COMPENSATION *********
341#if NH_3D_IC
342#define IC_REG_COST_SHIFT                 7
343#define IC_CONST_SHIFT                    5
344#define IC_SHIFT_DIFF                     12
345#define IC_LOW_LATENCY_ENCODING_THRESHOLD 0.1 // Threshold for low-latency IC encoding in JCT3V-H0086
346#endif
347///// ***** DEPTH BASED BLOCK PARTITIONING *********
348#if H_3D_DBBP
349#define DBBP_INVALID_SHORT                (-4)
350#define DBBP_PACK_MODE               SIZE_2NxN
351#endif
352///// ***** FCO *********
353#if H_3D_FCO
354#define H_3D_FCO_VSP_DONBDV_E0163               1   // Adaptive depth reference for flexible coding order
355#else
356#define H_3D_FCO_VSP_DONBDV_E0163               0   // Adaptive depth reference for flexible coding order
357#endif
358#if H_3D
359#define PPS_FIX_DEPTH                           1
360#endif
361/////////////////////////////////////////////////////////////////////////////////
362///////////////////////////////////   MV_HEVC HLS  //////////////////////////////
363/////////////////////////////////////////////////////////////////////////////////
364// TBD: Check if integration is necessary.
365#define H_MV_HLS_PTL_LIMITS                  0
366#define H_MV_HLS7_GEN                        0  // General changes (not tested)
367// POC
368// #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)
369// #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.
370// #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).
371// SEI related
372//#define H_MV_HLS_8_SEI_NODOC_53  0 // #53 (SEI    /NODOC/Added Multiview view position SEI message) Plain copy from AVC.
373//#define H_MV_HLS_8_SEI_NODOC_52  0 // #52 (SEI    /NODOC/Added Multiview acquisition information SEI) Plain copy from AVC.
374//#define H_MV_HLS_8_SEI_NODOC_51  0 // #51 (SEI    /NODOC/Added Multiview scene information SEI message)
375//#define H_MV_HLS_8_SEI_Q0189_35  0 // #35 (SEI    /Q0189/SEI message for indicating constraints on TMVP) Proposal 2.3,  SEI message for indicating constraints on TMVP
376//#define H_MV_HLS_8_EDF_Q0116_29  0 // #29 (ED.FIX /Q0116/Recovery point SEI) , consider adding a note regarding how random accessibility is affected by the recovery point SEI message
377//#define H_MV_HLS_8_GEN_Q0183_23  0 // #23 (GEN    /Q0183/SEI clean-ups) numerous small clean-ups on SEI messages.
378//#define H_MV_HLS_8_MIS_Q0247_49  0 // #49 (MISC   /Q0247/frame-field information SEI message)
379//#define H_MV_HLS_8_MIS_Q0189_34  0 // #34 (MISC   /Q0189/slice temporal mvp enabled flag) Proposal 2.2, clarification of semantics of slice temporal mvp enabled flag
380//#define H_MV_HLS_8_EDF_Q0081_01  0 // #1  (ED.FIX /Q0081/alpha channel persist) On reuse of alpha planes in auxiliary pictures. It was asked why there would not be a presumption that the alpha channel content would simply persist, without needing the flag to indicate it. Decision (Ed.): Delegated to editors to clarify, as necessary, that the alpha channel content persists until cancelled or updated in output order.
381//#define H_MV_HLS_8_SEI_Q0253_37  0 // #37 (SEI    /Q0253/layer not present), modified semantics of layers not present SEI message to correct bug introduced during editing
382//#define H_MV_HLS_8_SEI_Q0045_11  0 // #11 (SEI    /Q0045/Overlay) Proposal for an SEI message on selectable overlays. Decision: Adopt (modified for variable-length strings).
383//#define H_MV_HLS_7_SEI_P0133_28  0 // (SEI/P0133/Recovery point SEI) #28 Decision: Adopt change to recover point semantics only (-v3)
384//#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.
385// DPB
386//#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).
387//#define H_MV_HLS_8_DBP_Q0154_38  0 // #38 (DBP    /Q0154/VPS DPB) Proposal in C.5.2.1: Add in the decoding process that when a new VPS is activated, all pictures in the DPB are marked as unused for reference
388//#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).
389//#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
390// OTHERS
391//#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
392//#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.
393//#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.
394/////////////////////////////////////////////////////////////////////////////////////////
395///////////////////////////////////   HM RELATED DEFINES ////////////////////////////////
396/////////////////////////////////////////////////////////////////////////////////////////
397#endif
398// ====================================================================================================================
399// Debugging
400// ====================================================================================================================
401#define DEBUG_STRING                                      0 ///< When enabled, prints out final decision debug info at encoder and decoder
402#define DEBUG_ENCODER_SEARCH_BINS                         0 ///< When enabled, prints out each bin as it is coded during encoder search
403#define DEBUG_CABAC_BINS                                  0 ///< When enabled, prints out each bin as it is coded during final encode and decode
404#define DEBUG_INTRA_SEARCH_COSTS                          0 ///< When enabled, prints out the cost for each mode during encoder search
405#define DEBUG_TRANSFORM_AND_QUANTISE                      0 ///< When enabled, prints out each TU as it passes through the transform-quantise-dequantise-inverseTransform process
406#define ENVIRONMENT_VARIABLE_DEBUG_AND_TEST               0 ///< When enabled, allows control of debug modifications via environment variables
407#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
408// TODO: rename this macro to DECODER_DEBUG_BIT_STATISTICS (may currently cause merge issues with other branches)
409// This can be enabled by the makefile
410#ifndef RExt__DECODER_DEBUG_BIT_STATISTICS
411#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%)
412#endif
413// This can be enabled by the makefile
414#if !NH_MV
415#ifndef ENC_DEC_TRACE
416#define ENC_DEC_TRACE                                     0
417#endif
418#endif
419#define DEC_NUH_TRACE                                     0 ///< When trace enabled, enable tracing of NAL unit headers at the decoder (currently not possible at the encoder)
420#define PRINT_RPS_INFO                                    0 ///< Enable/disable the printing of bits used to send the RPS.
421// ====================================================================================================================
422// Tool Switches - transitory (these macros are likely to be removed in future revisions)
423// ====================================================================================================================
424#define DECODER_CHECK_SUBSTREAM_AND_SLICE_TRAILING_BYTES  1 ///< TODO: integrate this macro into a broader conformance checking system.
425#define T0196_SELECTIVE_RDOQ                              1 ///< selective RDOQ
426// ====================================================================================================================
427// Tool Switches
428// ====================================================================================================================
429#define ADAPTIVE_QP_SELECTION                             1 ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection
430#define AMP_ENC_SPEEDUP                                   1 ///< encoder only speed-up by AMP mode skipping
431#if AMP_ENC_SPEEDUP
432#define AMP_MRG                                           1 ///< encoder only force merge for AMP partition (no motion search for AMP)
433#endif
434#define FAST_BIT_EST                                      1   ///< G763: Table-based bit estimation for CABAC
435#define HHI_RQT_INTRA_SPEEDUP                             1           ///< tests one best mode with full rqt
436#define HHI_RQT_INTRA_SPEEDUP_MOD                         0           ///< tests two best modes with full rqt
437#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP
438#error
439#endif
440#define MATRIX_MULT                                       0 ///< Brute force matrix multiplication instead of partial butterfly
441#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 ].
442#define RDOQ_CHROMA_LAMBDA                                1 ///< F386: weighting of chroma for RDOQ
443// This can be enabled by the makefile
444#ifndef RExt__HIGH_BIT_DEPTH_SUPPORT
445#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)
446#endif
447// ====================================================================================================================
448// Derived macros
449// ====================================================================================================================
450#if RExt__HIGH_BIT_DEPTH_SUPPORT
451#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
452#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
453#else
454#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
455#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
456#endif
457#if FULL_NBIT
458# define DISTORTION_PRECISION_ADJUSTMENT(x)  0
459#else
460# define DISTORTION_PRECISION_ADJUSTMENT(x) (x)
461#endif
462#if DEBUG_STRING
463  #define DEBUG_STRING_PASS_INTO(name) , name
464  #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) , (exp==0)?0:name
465  #define DEBUG_STRING_FN_DECLARE(name) , std::string &name
466  #define DEBUG_STRING_FN_DECLAREP(name) , std::string *name
467  #define DEBUG_STRING_NEW(name) std::string name;
468  #define DEBUG_STRING_OUTPUT(os, name) os << name;
469  #define DEBUG_STRING_APPEND(str1, str2) str1+=str2;
470  #define DEBUG_STRING_SWAP(str1, str2) str1.swap(str2);
471  #define DEBUG_STRING_CHANNEL_CONDITION(compID) (true)
472  #include <sstream>
473  #include <iomanip>
474#else
475  #define DEBUG_STRING_PASS_INTO(name)
476  #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp)
477  #define DEBUG_STRING_FN_DECLARE(name)
478  #define DEBUG_STRING_FN_DECLAREP(name)
479  #define DEBUG_STRING_NEW(name)
480  #define DEBUG_STRING_OUTPUT(os, name)
481  #define DEBUG_STRING_APPEND(str1, str2)
482  #define DEBUG_STRING_SWAP(srt1, str2)
483  #define DEBUG_STRING_CHANNEL_CONDITION(compID)
484#endif
485// ====================================================================================================================
486// Error checks
487// ====================================================================================================================
488#if ((RExt__HIGH_PRECISION_FORWARD_TRANSFORM != 0) && (RExt__HIGH_BIT_DEPTH_SUPPORT == 0))
489#error ERROR: cannot enable RExt__HIGH_PRECISION_FORWARD_TRANSFORM without RExt__HIGH_BIT_DEPTH_SUPPORT
490#endif
491// ====================================================================================================================
492// Basic type redefinition
493// ====================================================================================================================
494typedef       void                Void;
495typedef       bool                Bool;
496#ifdef __arm__
497typedef       signed char         Char;
498#else
499typedef       char                Char;
500#endif
501typedef       unsigned char       UChar;
502typedef       short               Short;
503typedef       unsigned short      UShort;
504typedef       int                 Int;
505typedef       unsigned int        UInt;
506typedef       double              Double;
507typedef       float               Float;
508// ====================================================================================================================
509// 64-bit integer type
510// ====================================================================================================================
511#ifdef _MSC_VER
512typedef       __int64             Int64;
513#if _MSC_VER <= 1200 // MS VC6
514typedef       __int64             UInt64;   // MS VC6 does not support unsigned __int64 to double conversion
515#else
516typedef       unsigned __int64    UInt64;
517#endif
518#else
519typedef       long long           Int64;
520typedef       unsigned long long  UInt64;
521#endif
522// ====================================================================================================================
523// Named numerical types
524// ====================================================================================================================
525#if RExt__HIGH_BIT_DEPTH_SUPPORT
526typedef       Int             Pel;               ///< pixel type
527typedef       Int64           TCoeff;            ///< transform coefficient
528typedef       Int             TMatrixCoeff;      ///< transform matrix coefficient
529typedef       Short           TFilterCoeff;      ///< filter coefficient
530typedef       Int64           Intermediate_Int;  ///< used as intermediate value in calculations
531typedef       UInt64          Intermediate_UInt; ///< used as intermediate value in calculations
532#else
533typedef       Short           Pel;               ///< pixel type
534typedef       Int             TCoeff;            ///< transform coefficient
535typedef       Short           TMatrixCoeff;      ///< transform matrix coefficient
536typedef       Short           TFilterCoeff;      ///< filter coefficient
537typedef       Int             Intermediate_Int;  ///< used as intermediate value in calculations
538typedef       UInt            Intermediate_UInt; ///< used as intermediate value in calculations
539#endif
540#if FULL_NBIT
541typedef       UInt64          Distortion;        ///< distortion measurement
542#else
543typedef       UInt            Distortion;        ///< distortion measurement
544#endif
545#if NH_MV                         
546typedef std::vector< Int >        IntAry1d;
547typedef std::vector< IntAry1d >   IntAry2d; 
548typedef std::vector< IntAry2d >   IntAry3d; 
549typedef std::vector< IntAry3d >   IntAry4d; 
550typedef std::vector< IntAry4d >   IntAry5d; 
551typedef std::vector< Bool >        BoolAry1d;
552typedef std::vector< BoolAry1d >   BoolAry2d; 
553typedef std::vector< BoolAry2d >   BoolAry3d; 
554typedef std::vector< BoolAry3d >   BoolAry4d; 
555typedef std::vector< BoolAry4d >   BoolAry5d; 
556#endif
557#if NH_3D_VSO
558// ====================================================================================================================
559// Define Distortion Types
560// ====================================================================================================================
561typedef       Int64           RMDist;     ///< renderer model distortion
562#if H_3D_VSO_DIST_INT
563typedef       Int64            Dist;       ///< RDO distortion
564typedef       Int64            Dist64; 
565#define       RDO_DIST_MIN     MIN_INT
566#define       RDO_DIST_MAX     MAX_INT
567#else
568typedef       UInt             Dist;       ///< RDO distortion
569typedef       UInt64           Dist; 
570#define       RDO_DIST_MIN     0
571#define       RDO_DIST_MAX     MAX_UINT
572#endif
573#endif
574// ====================================================================================================================
575// Enumeration
576// ====================================================================================================================
577enum RDPCMMode
578{
579  RDPCM_OFF             = 0,
580  RDPCM_HOR             = 1,
581  RDPCM_VER             = 2,
582  NUMBER_OF_RDPCM_MODES = 3
583};
584enum RDPCMSignallingMode
585{
586  RDPCM_SIGNAL_IMPLICIT            = 0,
587  RDPCM_SIGNAL_EXPLICIT            = 1,
588  NUMBER_OF_RDPCM_SIGNALLING_MODES = 2
589};
590/// supported slice type
591enum SliceType
592{
593  B_SLICE               = 0,
594  P_SLICE               = 1,
595  I_SLICE               = 2,
596  NUMBER_OF_SLICE_TYPES = 3
597};
598/// chroma formats (according to semantics of chroma_format_idc)
599enum ChromaFormat
600{
601  CHROMA_400        = 0,
602  CHROMA_420        = 1,
603  CHROMA_422        = 2,
604  CHROMA_444        = 3,
605  NUM_CHROMA_FORMAT = 4
606};
607enum ChannelType
608{
609  CHANNEL_TYPE_LUMA    = 0,
610  CHANNEL_TYPE_CHROMA  = 1,
611  MAX_NUM_CHANNEL_TYPE = 2
612};
613enum ComponentID
614{
615  COMPONENT_Y       = 0,
616  COMPONENT_Cb      = 1,
617  COMPONENT_Cr      = 2,
618  MAX_NUM_COMPONENT = 3
619};
620enum InputColourSpaceConversion // defined in terms of conversion prior to input of encoder.
621{
622  IPCOLOURSPACE_UNCHANGED               = 0,
623  IPCOLOURSPACE_YCbCrtoYCrCb            = 1, // Mainly used for debug!
624  IPCOLOURSPACE_YCbCrtoYYY              = 2, // Mainly used for debug!
625  IPCOLOURSPACE_RGBtoGBR                = 3,
626  NUMBER_INPUT_COLOUR_SPACE_CONVERSIONS = 4
627};
628enum DeblockEdgeDir
629{
630  EDGE_VER     = 0,
631  EDGE_HOR     = 1,
632  NUM_EDGE_DIR = 2
633};
634/// supported partition shape
635enum PartSize
636{
637  SIZE_2Nx2N           = 0,           ///< symmetric motion partition,  2Nx2N
638  SIZE_2NxN            = 1,           ///< symmetric motion partition,  2Nx N
639  SIZE_Nx2N            = 2,           ///< symmetric motion partition,   Nx2N
640  SIZE_NxN             = 3,           ///< symmetric motion partition,   Nx N
641  SIZE_2NxnU           = 4,           ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)
642  SIZE_2NxnD           = 5,           ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2)
643  SIZE_nLx2N           = 6,           ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N
644  SIZE_nRx2N           = 7,           ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N
645  NUMBER_OF_PART_SIZES = 8
646};
647/// supported prediction type
648enum PredMode
649{
650  MODE_INTER                 = 0,     ///< inter-prediction mode
651  MODE_INTRA                 = 1,     ///< intra-prediction mode
652  NUMBER_OF_PREDICTION_MODES = 2,
653};
654/// reference list index
655enum RefPicList
656{
657  REF_PIC_LIST_0               = 0,   ///< reference list 0
658  REF_PIC_LIST_1               = 1,   ///< reference list 1
659  NUM_REF_PIC_LIST_01          = 2,
660  REF_PIC_LIST_X               = 100  ///< special mark
661};
662/// distortion function index
663enum DFunc
664{
665  DF_DEFAULT         = 0,
666  DF_SSE             = 1,      ///< general size SSE
667  DF_SSE4            = 2,      ///<   4xM SSE
668  DF_SSE8            = 3,      ///<   8xM SSE
669  DF_SSE16           = 4,      ///<  16xM SSE
670  DF_SSE32           = 5,      ///<  32xM SSE
671  DF_SSE64           = 6,      ///<  64xM SSE
672  DF_SSE16N          = 7,      ///< 16NxM SSE
673  DF_SAD             = 8,      ///< general size SAD
674  DF_SAD4            = 9,      ///<   4xM SAD
675  DF_SAD8            = 10,     ///<   8xM SAD
676  DF_SAD16           = 11,     ///<  16xM SAD
677  DF_SAD32           = 12,     ///<  32xM SAD
678  DF_SAD64           = 13,     ///<  64xM SAD
679  DF_SAD16N          = 14,     ///< 16NxM SAD
680  DF_SADS            = 15,     ///< general size SAD with step
681  DF_SADS4           = 16,     ///<   4xM SAD with step
682  DF_SADS8           = 17,     ///<   8xM SAD with step
683  DF_SADS16          = 18,     ///<  16xM SAD with step
684  DF_SADS32          = 19,     ///<  32xM SAD with step
685  DF_SADS64          = 20,     ///<  64xM SAD with step
686  DF_SADS16N         = 21,     ///< 16NxM SAD with step
687  DF_HADS            = 22,     ///< general size Hadamard with step
688  DF_HADS4           = 23,     ///<   4xM HAD with step
689  DF_HADS8           = 24,     ///<   8xM HAD with step
690  DF_HADS16          = 25,     ///<  16xM HAD with step
691  DF_HADS32          = 26,     ///<  32xM HAD with step
692  DF_HADS64          = 27,     ///<  64xM HAD with step
693  DF_HADS16N         = 28,     ///< 16NxM HAD with step
694#if NH_3D_VSO
695  DF_VSD      = 29,      ///< general size VSD
696  DF_VSD4     = 30,      ///<   4xM VSD
697  DF_VSD8     = 31,      ///<   8xM VSD
698  DF_VSD16    = 32,      ///<  16xM VSD
699  DF_VSD32    = 33,      ///<  32xM VSD
700  DF_VSD64    = 34,      ///<  64xM VSD
701  DF_VSD16N   = 35,      ///< 16NxM VSD
702#endif
703  DF_SAD12           = 43,
704  DF_SAD24           = 44,
705  DF_SAD48           = 45,
706  DF_SADS12          = 46,
707  DF_SADS24          = 47,
708  DF_SADS48          = 48,
709  DF_SSE_FRAME       = 50,     ///< Frame-based SSE
710  DF_TOTAL_FUNCTIONS = 64
711};
712/// index for SBAC based RD optimization
713enum CI_IDX
714{
715  CI_CURR_BEST = 0,     ///< best mode index
716  CI_NEXT_BEST,         ///< next best index
717  CI_TEMP_BEST,         ///< temporal index
718  CI_CHROMA_INTRA,      ///< chroma intra index
719  CI_QT_TRAFO_TEST,
720  CI_QT_TRAFO_ROOT,
721  CI_NUM,               ///< total number
722};
723/// motion vector predictor direction used in AMVP
724enum MVP_DIR
725{
726  MD_LEFT = 0,          ///< MVP of left block
727  MD_ABOVE,             ///< MVP of above block
728  MD_ABOVE_RIGHT,       ///< MVP of above right block
729  MD_BELOW_LEFT,        ///< MVP of below left block
730  MD_ABOVE_LEFT         ///< MVP of above left block
731};
732#if H_3D
733enum DefaultMergCandOrder
734{
735  MRG_T = 0,            ///< MPI
736  MRG_D,                ///< DDD
737  MRG_IVMC,             ///< Temporal inter-view
738  MRG_A1,               ///< Left
739  MRG_B1,               ///< Above
740  MRG_VSP,              ///< VSP
741  MRG_B0,               ///< Above right
742  MRG_IVDC,             ///< Disparity inter-view
743  MRG_A0,               ///< Left bottom
744  MRG_B2,               ///< Above left
745  MRG_IVSHIFT,          ///< Shifted IVMC of Shifted IVDC. (These are mutually exclusive)
746  MRG_COL               ///< Temporal co-located
747};
748#endif
749enum StoredResidualType
750{
751  RESIDUAL_RECONSTRUCTED          = 0,
752  RESIDUAL_ENCODER_SIDE           = 1,
753  NUMBER_OF_STORED_RESIDUAL_TYPES = 2
754};
755enum TransformDirection
756{
757  TRANSFORM_FORWARD              = 0,
758  TRANSFORM_INVERSE              = 1,
759  TRANSFORM_NUMBER_OF_DIRECTIONS = 2
760};
761/// supported ME search methods
762enum MESearchMethod
763{
764  FULL_SEARCH                = 0,     ///< Full search
765  DIAMOND                    = 1,     ///< Fast search
766  SELECTIVE                  = 2      ///< Selective search
767};
768/// coefficient scanning type used in ACS
769enum COEFF_SCAN_TYPE
770{
771  SCAN_DIAG = 0,        ///< up-right diagonal scan
772  SCAN_HOR  = 1,        ///< horizontal first scan
773  SCAN_VER  = 2,        ///< vertical first scan
774  SCAN_NUMBER_OF_TYPES = 3
775};
776enum COEFF_SCAN_GROUP_TYPE
777{
778  SCAN_UNGROUPED   = 0,
779  SCAN_GROUPED_4x4 = 1,
780  SCAN_NUMBER_OF_GROUP_TYPES = 2
781};
782enum SignificanceMapContextType
783{
784  CONTEXT_TYPE_4x4    = 0,
785  CONTEXT_TYPE_8x8    = 1,
786  CONTEXT_TYPE_NxN    = 2,
787  CONTEXT_TYPE_SINGLE = 3,
788  CONTEXT_NUMBER_OF_TYPES = 4
789};
790enum ScalingListMode
791{
792  SCALING_LIST_OFF,
793  SCALING_LIST_DEFAULT,
794  SCALING_LIST_FILE_READ
795};
796enum ScalingListSize
797{
798  SCALING_LIST_4x4 = 0,
799  SCALING_LIST_8x8,
800  SCALING_LIST_16x16,
801  SCALING_LIST_32x32,
802  SCALING_LIST_SIZE_NUM
803};
804// Slice / Slice segment encoding modes
805enum SliceConstraint
806{
807  NO_SLICES              = 0,          ///< don't use slices / slice segments
808  FIXED_NUMBER_OF_CTU    = 1,          ///< Limit maximum number of largest coding tree units in a slice / slice segments
809  FIXED_NUMBER_OF_BYTES  = 2,          ///< Limit maximum number of bytes in a slice / slice segment
810  FIXED_NUMBER_OF_TILES  = 3,          ///< slices / slice segments span an integer number of tiles
811};
812enum SAOMode //mode
813{
814  SAO_MODE_OFF = 0,
815  SAO_MODE_NEW,
816  SAO_MODE_MERGE,
817  NUM_SAO_MODES
818};
819enum SAOModeMergeTypes
820{
821  SAO_MERGE_LEFT =0,
822  SAO_MERGE_ABOVE,
823  NUM_SAO_MERGE_TYPES
824};
825enum SAOModeNewTypes
826{
827  SAO_TYPE_START_EO =0,
828  SAO_TYPE_EO_0 = SAO_TYPE_START_EO,
829  SAO_TYPE_EO_90,
830  SAO_TYPE_EO_135,
831  SAO_TYPE_EO_45,
832  SAO_TYPE_START_BO,
833  SAO_TYPE_BO = SAO_TYPE_START_BO,
834  NUM_SAO_NEW_TYPES
835};
836#define NUM_SAO_EO_TYPES_LOG2 2
837enum SAOEOClasses
838{
839  SAO_CLASS_EO_FULL_VALLEY = 0,
840  SAO_CLASS_EO_HALF_VALLEY = 1,
841  SAO_CLASS_EO_PLAIN       = 2,
842  SAO_CLASS_EO_HALF_PEAK   = 3,
843  SAO_CLASS_EO_FULL_PEAK   = 4,
844  NUM_SAO_EO_CLASSES,
845};
846#define NUM_SAO_BO_CLASSES_LOG2  5
847#define NUM_SAO_BO_CLASSES       (1<<NUM_SAO_BO_CLASSES_LOG2)
848namespace Profile
849{
850  enum Name
851  {
852    NONE = 0,
853    MAIN = 1,
854    MAIN10 = 2,
855    MAINSTILLPICTURE = 3,
856    MAINREXT = 4,
857    HIGHTHROUGHPUTREXT = 5
858#if NH_MV
859    ,MULTIVIEWMAIN = 6,
860#if NH_3D
861    MAIN3D = 8, 
862#endif
863#endif
864  };
865}
866namespace Level
867{
868  enum Tier
869  {
870    MAIN = 0,
871    HIGH = 1,
872  };
873  enum Name
874  {
875    // code = (level * 30)
876    NONE     = 0,
877    LEVEL1   = 30,
878    LEVEL2   = 60,
879    LEVEL2_1 = 63,
880    LEVEL3   = 90,
881    LEVEL3_1 = 93,
882    LEVEL4   = 120,
883    LEVEL4_1 = 123,
884    LEVEL5   = 150,
885    LEVEL5_1 = 153,
886    LEVEL5_2 = 156,
887    LEVEL6   = 180,
888    LEVEL6_1 = 183,
889    LEVEL6_2 = 186,
890    LEVEL8_5 = 255,
891  };
892}
893enum CostMode
894{
895  COST_STANDARD_LOSSY              = 0,
896  COST_SEQUENCE_LEVEL_LOSSLESS     = 1,
897  COST_LOSSLESS_CODING             = 2,
898  COST_MIXED_LOSSLESS_LOSSY_CODING = 3
899};
900enum SPSExtensionFlagIndex
901{
902  SPS_EXT__REXT           = 0,
903//SPS_EXT__MVHEVC         = 1, //for use in future versions
904//SPS_EXT__SHVC           = 2, //for use in future versions
905  NUM_SPS_EXTENSION_FLAGS = 8
906};
907enum PPSExtensionFlagIndex
908{
909  PPS_EXT__REXT           = 0,
910//PPS_EXT__MVHEVC         = 1, //for use in future versions
911//PPS_EXT__SHVC           = 2, //for use in future versions
912  NUM_PPS_EXTENSION_FLAGS = 8
913};
914// TODO: Existing names used for the different NAL unit types can be altered to better reflect the names in the spec.
915//       However, the names in the spec are not yet stable at this point. Once the names are stable, a cleanup
916//       effort can be done without use of macros to alter the names used to indicate the different NAL unit types.
917enum NalUnitType
918{
919  NAL_UNIT_CODED_SLICE_TRAIL_N = 0, // 0
920  NAL_UNIT_CODED_SLICE_TRAIL_R,     // 1
921  NAL_UNIT_CODED_SLICE_TSA_N,       // 2
922  NAL_UNIT_CODED_SLICE_TSA_R,       // 3
923  NAL_UNIT_CODED_SLICE_STSA_N,      // 4
924  NAL_UNIT_CODED_SLICE_STSA_R,      // 5
925  NAL_UNIT_CODED_SLICE_RADL_N,      // 6
926  NAL_UNIT_CODED_SLICE_RADL_R,      // 7
927  NAL_UNIT_CODED_SLICE_RASL_N,      // 8
928  NAL_UNIT_CODED_SLICE_RASL_R,      // 9
929  NAL_UNIT_RESERVED_VCL_N10,
930  NAL_UNIT_RESERVED_VCL_R11,
931  NAL_UNIT_RESERVED_VCL_N12,
932  NAL_UNIT_RESERVED_VCL_R13,
933  NAL_UNIT_RESERVED_VCL_N14,
934  NAL_UNIT_RESERVED_VCL_R15,
935  NAL_UNIT_CODED_SLICE_BLA_W_LP,    // 16
936  NAL_UNIT_CODED_SLICE_BLA_W_RADL,  // 17
937  NAL_UNIT_CODED_SLICE_BLA_N_LP,    // 18
938  NAL_UNIT_CODED_SLICE_IDR_W_RADL,  // 19
939  NAL_UNIT_CODED_SLICE_IDR_N_LP,    // 20
940  NAL_UNIT_CODED_SLICE_CRA,         // 21
941  NAL_UNIT_RESERVED_IRAP_VCL22,
942  NAL_UNIT_RESERVED_IRAP_VCL23,
943  NAL_UNIT_RESERVED_VCL24,
944  NAL_UNIT_RESERVED_VCL25,
945  NAL_UNIT_RESERVED_VCL26,
946  NAL_UNIT_RESERVED_VCL27,
947  NAL_UNIT_RESERVED_VCL28,
948  NAL_UNIT_RESERVED_VCL29,
949  NAL_UNIT_RESERVED_VCL30,
950  NAL_UNIT_RESERVED_VCL31,
951  NAL_UNIT_VPS,                     // 32
952  NAL_UNIT_SPS,                     // 33
953  NAL_UNIT_PPS,                     // 34
954  NAL_UNIT_ACCESS_UNIT_DELIMITER,   // 35
955  NAL_UNIT_EOS,                     // 36
956  NAL_UNIT_EOB,                     // 37
957  NAL_UNIT_FILLER_DATA,             // 38
958  NAL_UNIT_PREFIX_SEI,              // 39
959  NAL_UNIT_SUFFIX_SEI,              // 40
960  NAL_UNIT_RESERVED_NVCL41,
961  NAL_UNIT_RESERVED_NVCL42,
962  NAL_UNIT_RESERVED_NVCL43,
963  NAL_UNIT_RESERVED_NVCL44,
964  NAL_UNIT_RESERVED_NVCL45,
965  NAL_UNIT_RESERVED_NVCL46,
966  NAL_UNIT_RESERVED_NVCL47,
967  NAL_UNIT_UNSPECIFIED_48,
968  NAL_UNIT_UNSPECIFIED_49,
969  NAL_UNIT_UNSPECIFIED_50,
970  NAL_UNIT_UNSPECIFIED_51,
971  NAL_UNIT_UNSPECIFIED_52,
972  NAL_UNIT_UNSPECIFIED_53,
973  NAL_UNIT_UNSPECIFIED_54,
974  NAL_UNIT_UNSPECIFIED_55,
975  NAL_UNIT_UNSPECIFIED_56,
976  NAL_UNIT_UNSPECIFIED_57,
977  NAL_UNIT_UNSPECIFIED_58,
978  NAL_UNIT_UNSPECIFIED_59,
979  NAL_UNIT_UNSPECIFIED_60,
980  NAL_UNIT_UNSPECIFIED_61,
981  NAL_UNIT_UNSPECIFIED_62,
982  NAL_UNIT_UNSPECIFIED_63,
983  NAL_UNIT_INVALID,
984};
985#if NH_MV
986/// scalability types
987enum ScalabilityType
988{
989  DEPTH_ID = 0,   
990  VIEW_ORDER_INDEX  = 1,
991  DEPENDENCY_ID = 2,
992  AUX_ID = 3,
993};
994#endif
995#if NH_3D
996// Renderer
997enum BlenMod
998{
999  BLEND_NONE  = -1,
1000  BLEND_AVRG  = 0,
1001  BLEND_LEFT  = 1,
1002  BLEND_RIGHT = 2,
1003  BLEND_GEN   =  3
1004};
1005enum
1006{
1007  VIEWPOS_INVALID = -1,
1008  VIEWPOS_LEFT    = 0,
1009  VIEWPOS_RIGHT   = 1,
1010  VIEWPOS_MERGED  = 2
1011};
1012#endif
1013// ====================================================================================================================
1014// Type definition
1015// ====================================================================================================================
1016/// parameters for adaptive loop filter
1017class TComPicSym;
1018#define MAX_NUM_SAO_CLASSES  32  //(NUM_SAO_EO_GROUPS > NUM_SAO_BO_GROUPS)?NUM_SAO_EO_GROUPS:NUM_SAO_BO_GROUPS
1019struct SAOOffset
1020{
1021  SAOMode modeIdc; // NEW, MERGE, OFF
1022  Int typeIdc;     // union of SAOModeMergeTypes and SAOModeNewTypes, depending on modeIdc.
1023  Int typeAuxInfo; // BO: starting band index
1024  Int offset[MAX_NUM_SAO_CLASSES];
1025  SAOOffset();
1026  ~SAOOffset();
1027  Void reset();
1028  const SAOOffset& operator= (const SAOOffset& src);
1029};
1030struct SAOBlkParam
1031{
1032  SAOBlkParam();
1033  ~SAOBlkParam();
1034  Void reset();
1035  const SAOBlkParam& operator= (const SAOBlkParam& src);
1036  SAOOffset& operator[](Int compIdx){ return offsetParam[compIdx];}
1037private:
1038  SAOOffset offsetParam[MAX_NUM_COMPONENT];
1039};
1040struct BitDepths
1041{
1042#if O0043_BEST_EFFORT_DECODING
1043  Int recon[MAX_NUM_CHANNEL_TYPE]; ///< the bit depth used for reconstructing the video
1044  Int stream[MAX_NUM_CHANNEL_TYPE];///< the bit depth used indicated in the SPS
1045#else
1046  Int recon[MAX_NUM_CHANNEL_TYPE]; ///< the bit depth as indicated in the SPS
1047#endif
1048};
1049/// parameters for deblocking filter
1050typedef struct _LFCUParam
1051{
1052  Bool bInternalEdge;                     ///< indicates internal edge
1053  Bool bLeftEdge;                         ///< indicates left edge
1054  Bool bTopEdge;                          ///< indicates top edge
1055} LFCUParam;
1056//TU settings for entropy encoding
1057struct TUEntropyCodingParameters
1058{
1059  const UInt            *scan;
1060  const UInt            *scanCG;
1061        COEFF_SCAN_TYPE  scanType;
1062        UInt             widthInGroups;
1063        UInt             heightInGroups;
1064        UInt             firstSignificanceMapContext;
1065};
1066struct TComPictureHash
1067{
1068  std::vector<UChar> hash;
1069  Bool operator==(const TComPictureHash &other) const
1070  {
1071    if (other.hash.size() != hash.size())
1072    {
1073      return false;
1074    }
1075    for(UInt i=0; i<UInt(hash.size()); i++)
1076    {
1077      if (other.hash[i] != hash[i])
1078      {
1079        return false;
1080      }
1081    }
1082    return true;
1083  }
1084  Bool operator!=(const TComPictureHash &other) const
1085  {
1086    return !(*this == other);
1087  }
1088};
1089struct TComSEITimeSet
1090{
1091  TComSEITimeSet() : clockTimeStampFlag(false),
1092                     numUnitFieldBasedFlag(false),
1093                     countingType(0),
1094                     fullTimeStampFlag(false),
1095                     discontinuityFlag(false),
1096                     cntDroppedFlag(false),
1097                     numberOfFrames(0),
1098                     secondsValue(0),
1099                     minutesValue(0),
1100                     hoursValue(0),
1101                     secondsFlag(false),
1102                     minutesFlag(false),
1103                     hoursFlag(false),
1104                     timeOffsetLength(0),
1105                     timeOffsetValue(0)
1106  { }
1107  Bool clockTimeStampFlag;
1108  Bool numUnitFieldBasedFlag;
1109  Int  countingType;
1110  Bool fullTimeStampFlag;
1111  Bool discontinuityFlag;
1112  Bool cntDroppedFlag;
1113  Int  numberOfFrames;
1114  Int  secondsValue;
1115  Int  minutesValue;
1116  Int  hoursValue;
1117  Bool secondsFlag;
1118  Bool minutesFlag;
1119  Bool hoursFlag;
1120  Int  timeOffsetLength;
1121  Int  timeOffsetValue;
1122};
1123struct TComSEIMasteringDisplay
1124{
1125  Bool      colourVolumeSEIEnabled;
1126  UInt      maxLuminance;
1127  UInt      minLuminance;
1128  UShort    primaries[3][2];
1129  UShort    whitePoint[2];
1130};
1131//! \}
1132#if H_3D
1133#define !!! REMOVE THIS !!! 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!
1134#endif
1135#endif
Note: See TracBrowser for help on using the repository browser.