source: 3DVCSoftware/branches/HTM-5.0-Sony/source/Lib/TLibCommon/TypeDef.h @ 197

Last change on this file since 197 was 197, checked in by sony, 11 years ago

Add DV_V_RESTRICTION_B0037 macro and two config parameters (DisparitySearchRangeRestriction, VerticalDisparitySearchRange).

It enables to restrict disparity vector range at encoder on motion search.
When users want to try the option, please set DisparitySearchRangeRestriction to 1 and set VerticalDisparitySearchRange to any positive integer value to be tested. The restriction is disabled by default.

  • Property svn:eol-style set to native
File size: 34.8 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-2012, 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
34/** \file     TypeDef.h
35    \brief    Define basic types, new types and enumerations
36*/
37
38#ifndef _TYPEDEF__
39#define _TYPEDEF__
40
41//! \ingroup TLibCommon
42//! \{
43#define QC_MVHEVC_B0046                   0
44#define QC_IV_AS_LT_B0046                 1   //JCT3V-B0046: Disable 3DHEVC tools
45#define QC_TMVP_IDX_MOD_B0046             1   //JCT3V-B0046: inter-view reference pictures are treated as long-term pictures, scaling of motion vectors for DCP based on ViewId/ViewOrderIdx is disabled
46#define QC_REM_IDV_B0046                  1   //JCT3V-B0046: the reference index for temporal merging candidate is set to 0, as defined in HEVC
47#define FIX_DEL_NULLPTR                   1
48
49#define DV_V_RESTRICTION_B0037            1   // JCT3V-B0037 disparity vector vertical range restriction
50
51#if !QC_MVHEVC_B0046
52///// ***** FIXES *********
53// A
54#define FIX_POZNAN_CABAC_INIT_FLAG        1
55#define FIX_LG_RESTRICTEDRESPRED_M24766   1
56
57// B
58#define FIX_LGE_IVMP_PARALLEL_MERGE_B0136 1
59#define FIX_RDO_NEGDIST                   1
60#define FIX_DMM_NEG_DIST                  1
61#define FIX_LGE_DVMCP_B0133               1
62
63
64///// ***** PATCHES *********
65#define TMVP_DEPTH_SWITCH                 1   // JCT3V-B0092 additional encoder option only
66
67///// ***** DEPTH MODELING MODES *********
68#define HHI_DMM_WEDGE_INTRA               1   // depth model modes independent on texture (explicit and intra-predicted Wedgelet prediction)
69#define HHI_DMM_PRED_TEX                  1   // depth model modes dependent on texture (inter-component Wedgelet and Contour prediction )
70#define LGE_EDGE_INTRA_A0070              1   // JCT3V-A0070
71#define RWTH_SDC_DLT_B0036                1   // JCT3V-B0036: Simplified Depth Coding + Depth Lookup Table
72#define HHIQC_DMMFASTSEARCH_B0039         1   // JCT3V-B0039: fast Wedgelet search for DMM modes 1 and 3
73
74///// ***** INTERVIEW MOTION VECTOR PREDICTION *********
75#define HHI_INTER_VIEW_MOTION_PRED        1   // inter-view motion parameter prediction
76#define SHARP_INTERVIEW_DECOUPLE_B0111    1   // JCT3V-B0111 decoupling inter-view candidate
77#define QC_MRG_CANS_B0048                 1   // JCT3V-B0048, B0086, B0069
78#if     QC_MRG_CANS_B0048
79#define OL_DISMV_POS_B0069                1   // different pos for disparity MV candidate, B0069
80#endif
81#define MTK_INTERVIEW_MERGE_A0049         1   // JCT3V-A0049 second part
82#if HHI_INTER_VIEW_MOTION_PRED         
83#define SAIT_IMPROV_MOTION_PRED_M24829    1   // improved inter-view motion vector prediction
84#else                                 
85#define SAIT_IMPROV_MOTION_PRED_M24829    0   
86#endif                                 
87
88///// ***** INTERVIEW RESIDUAL PREDICTION *********
89#define HHI_INTER_VIEW_RESIDUAL_PRED      1   // inter-view residual prediction
90#if HHI_INTER_VIEW_RESIDUAL_PRED       
91#define LG_RESTRICTEDRESPRED_M24766       1   // restricted inter-view residual prediction
92#define QC_SIMPLIFIEDIVRP_M24938          1
93#else                                 
94#define LG_RESTRICTEDRESPRED_M24766       0
95#define QC_SIMPLIFIEDIVRP_M24938          0
96#endif
97
98///// ***** DISPARITY VECTOR DERIVATION *********
99#define QC_MULTI_DIS_CAN_A0097            1   // JCT3V-A0097
100#define LGE_DVMCP_A0126                   1   // JCT3V-A0126     
101#define LGE_DVMCP_MEM_REDUCTION_B0135     1   // JCT3V-B0135     
102#define DV_DERIVATION_PARALLEL_B0096      1   // JCT3V-B0096, enable parallel derivation of disparity vector
103#define QC_SIMPLE_NBDV_B0047              1   // JCT3V-B0047
104
105///// ***** MOTION PARAMETER INHERITANCE  *********
106#define HHI_MPI                           1   // motion parameter inheritance from texture picture for depth map coding
107#if HHI_MPI
108#define FIX_MPI_B0065                     1   // JCT3V-B0065, fix the MPI bug when RQT is off
109#endif
110#define MTK_UNCONSTRAINED_MVI_B0083       1    //JCT3V-B0083
111
112///// ***** VIEW SYNTHESIS OPTIMIZAION *********
113#define HHI_VSO                           1
114#define HHI_VSO_LS_TABLE_M23714           1   // m23714, enable table base Lagrange multiplier optimization
115#define HHI_VSO_DIST_INT                  1   // Allow negative synthesized view distortion change
116#define HHI_VSO_COLOR_PLANES              1   // Compute VSO distortion on color planes
117#define HHI_VSO_RM_ASSERTIONS             0   // Output VSO assertions
118#define HHI_VSO_SYNTH_DIST_OUT            0   // Output of synthesized view distortion instead of depth distortion in encoder output
119#define SAIT_VSO_EST_A0033                1   // JCT3V-A0033 modification 3
120#define LGE_VSO_EARLY_SKIP_A0093          1   // JCT3V-A0093 modification 4
121#define LGE_WVSO_A0119                    1   // JCT3V-A0119 & JCT3V-B0131 Depth Metric with a weighted depth fidelity term
122
123
124///// ***** ILLUMINATION COMPENSATON *********
125#define LGE_ILLUCOMP_B0045                1   // JCT2-B0045 Illumination compensation for Luma and Chroma
126#if LGE_ILLUCOMP_B0045
127#define LGE_ILLUCOMP_B0045_ENCSIMP        1
128#endif
129
130///// ***** INTERVIEW SKIP *********
131#define HHI_INTERVIEW_SKIP                1
132
133///// ***** QUADTREE LIMITATION *********
134#define OL_QTLIMIT_PREDCODING_B0068       1    //JCT3V-B0068
135
136///// ***** OTHERS *********
137#define LG_ZEROINTRADEPTHRESI_A0087       1   // JCT2-A0087
138#define SONY_COLPIC_AVAILABILITY          1
139#define HHI_FULL_PEL_DEPTH_MAP_MV_ACC     1   // full-pel mv accuracy for depth maps
140#define VIDYO_VPS_INTEGRATION             1
141
142
143
144///// ***** DEFINED PARAMETERS *********
145#if QC_MULTI_DIS_CAN_A0097                   
146#define DIS_CANS                          1
147#endif                                 
148
149#define HHI_INTERVIEW_SKIP_LAMBDA_SCALE   1
150
151#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
152#define DMM_WEDGEMODEL_MIN_SIZE           4
153#define DMM_WEDGEMODEL_MAX_SIZE          32
154#define DMM_WEDGE_PREDDIR_DELTAEND_MAX    4
155#endif
156
157#if LGE_EDGE_INTRA_A0070
158#define LGE_EDGE_INTRA_MIN_SIZE           4
159#define LGE_EDGE_INTRA_MAX_SIZE           32
160#define LGE_EDGE_INTRA_THRESHOLD          20
161#define LGE_EDGE_INTRA_MAX_EDGE_NUM_PER_4x4 8
162#define LGE_EDGE_INTRA_DELTA_DC           1
163#define LGE_EDGE_INTRA_PIXEL_DIFFERENCE   1
164#endif
165
166
167#if LGE_DVMCP_A0126                           
168#define DVFROM_LEFTBELOW                  1
169#define DVFROM_LEFT                       2
170#define DVFROM_ABOVERIGHT                 3
171#define DVFROM_ABOVE                      4
172#define DVFROM_ABOVELEFT                  5
173#define DVFROM_COL                        6
174#endif
175
176
177#if HHIQC_DMMFASTSEARCH_B0039
178#define DMM3_SIMPLIFY_TR                  1
179#endif
180
181
182#if RWTH_SDC_DLT_B0036
183#define Log2( n ) ( log((double)n) / log(2.0) )
184#endif
185
186#define HHI_MPI_MERGE_POS                 0
187#endif
188///// ***** HM 6.1 *********
189#define SKIPFRAME_BUGFIX                  1 ///< bug fix to enable skipFrame at decoder
190#define START_DECODING_AT_CRA             1 ///< H0496, start decoding at clear random access point
191#define NO_COMBINED_PARALLEL              1 ///< Disallow any combined usage of parallel tools among Tile, EntropySlice and Wavefont
192
193#define LOSSLESS_CODING                   1 ///< H0530: lossless and lossy (mixed) coding
194#if LOSSLESS_CODING
195#define SEQUENCE_LEVEL_LOSSLESS           0 ///< H0530: used only for sequence or frame-level lossless coding
196#endif
197
198#define PARALLEL_MERGE  1                   //< H0082 parallel merge/skip
199#define LGE_IVMP_PARALLEL_MERGE_B0136     1 //< B0136 support of parallel merge/skip in disparity vector derivation
200#define LOG2_PARALLEL_MERGE_LEVEL_MINUS2  0 //< H0082 parallel merge level 0-> 4x4, 1-> 8x8, 2->16x16, 3->32x32, 4->64x64
201
202#if PARALLEL_MERGE && LOG2_PARALLEL_MERGE_LEVEL_MINUS2
203#define CU_BASED_MRG_CAND_LIST            1  //< H0240: single merge candidate list for all PUs inside a 8x8 CU conditioned on LOG2_PARALLEL_MERGE_LEVEL_MINUS2 > 0
204#define FIX_CU_BASED_MRG_CAND_LIST_B0136  1  //< B0136 bug fix for CU_BASED_MRG_CAND_LIST
205#endif
206
207#define MVP_AT_ENTROPYSLICE_BOUNDARY      1  //< H0362 enable motion prediction accross entropy slice boundary
208
209#define FAST_DECISION_FOR_MRG_RD_COST     1  ////< H0178: Fast Decision for Merge 2Nx2N RDCost
210
211#define PIC_CROPPING              1  ///< Picture cropping and size constraints
212#define NAL_REF_FLAG              1  ///< Change nal_ref_idc to nal_ref_flag (JCTVC-F463)
213#define REMOVE_DIV_OPERATION      1  ///< H0238: Simplified intra horizontal and vertical filtering
214#define LOGI_INTRA_NAME_3MPM      1  ///< H0407: logical Intra mode naming (sequential angular mode numbering) and 3 MPM mode coding
215
216#define LEVEL_CTX_LUMA_RED        1  ///<H0130: Luma level context reduction
217#define REMOVE_INFER_SIGGRP       1  ///<H0131: Remove inferred significant_coeff_group_flag
218
219#define SET_MERGE_TMVP_REFIDX     1  ///< H0278/H0199: Setting the merge TMVP refidx to 0 for the non-first partition
220
221#define MULTILEVEL_SIGMAP_EXT     1  ///< H0526: multi-level significance map extended to smaller TUs
222#define MULTIBITS_DATA_HIDING     1  ///< H0481: multiple sign bit hiding
223
224#define DEQUANT_CLIPPING          1  ///< H0312/H0541: transformed coefficients clipping before de-quantization
225
226#define REMOVE_NON_SCALED         1 ///< H0164/H0250: Removal of non-scaled merge candidate
227#define MRG_IDX_CTX_RED           1 ///< H0251: Merge index context reduction
228#define SIMP_MRG_PRUN             1 ///< H0252: simplification of merge pruning process
229
230#define AMVP_PRUNING_SIMPLIFICATION         1     ///H0316: simplify the pruning process of AMVP by exempting the temporal candidate
231#define AMVP_ZERO_CHECKING_REMOVAL          1     ///H0239/H0316: remove zero motion vector checking of AMVP
232
233#define H0111_MVD_L1_ZERO         1  ///< H0111: modification of bi-prediction
234#define DISABLING_CLIP_FOR_BIPREDME         1  ///< Ticket #175
235
236#define CLIPSCALEDMVP               1  ///< H0216: Clipping scaled MV to 16 bit
237
238#define UNIFIED_TRANSFORM_TREE      1   ///< H0123: unified tree structure for TU
239
240#define SIGMAP_CTX_SUBBLOCK       1 ///< H0290: 4x4 sub-block based region for significant_flag context selection
241
242#define SIGMAP_CONST_AT_HIGH_FREQUENCY      1      ///< H0095 method2.1: const significance map at high freaquency
243
244#define LAST_CTX_REDUCTION        1  ///< H0537/H514: contexts reduction for last position coding
245
246#define AMP_CTX                   1 ///<H0545: context reduction for asymmetric partition
247
248#define RESTRICT_GR1GR2FLAG_NUMBER    1 ///< H0554: Throughput improvement of CABAC coefficients level coding
249#if RESTRICT_GR1GR2FLAG_NUMBER    //
250#define C1FLAG_NUMBER               8 // maximum number of largerThan1 flag coded in one chunk :  16 in HM5
251#define C2FLAG_NUMBER               1 // maximum number of largerThan2 flag coded in one chunk:  16 in HM5
252#endif
253
254#define EIGHT_BITS_RICE_CODE        1 ///< H0498 : 8 bits rice codes
255
256#define SAO_UNIT_INTERLEAVING      1   ///< H0273
257#define REMOVE_SAO_LCU_ENC_CONSTRAINTS_1 0  ///< disable the encoder constraint that does not test SAO/BO mode for chroma in interleaved mode
258#define REMOVE_SAO_LCU_ENC_CONSTRAINTS_2 0  ///< disable the encoder constraint that reduce the range of SAO/EO for chroma in interleaved mode
259#define REMOVE_SAO_LCU_ENC_CONSTRAINTS_3 0  ///< disable the encoder constraint that conditionally disable SAO for chroma for entire slice in interleaved mode
260
261#define ALF_SINGLE_FILTER_SHAPE    1     //< !!! H0068: Single filter type : 9x7 cross + 3x3 square
262
263#define ALF_16_BA_GROUPS        1     ///< H0409 16 BA groups
264#define LCU_SYNTAX_ALF          1     ///< H0274 LCU-syntax ALF
265#define ALF_CHROMA_COEF_PRED_HARMONIZATION 1 ///< H0483: ALF chroma coeff pred harmonization
266
267#define CABAC_LINEAR_INIT       1     ///< H0535 : linear CABAC initialization
268
269#define COLLOCATED_REF_IDX      1     ///< H0442: signal collocated reference index
270
271#define UNIFIED_TRANSFORM       1     ///< H0492: unify square and non-square transform
272
273#define MAX_NUM_SPS                32
274#define MAX_NUM_PPS                256
275#define MAX_NUM_APS                32         //< !!!KS: number not defined in WD yet
276
277#define MRG_MAX_NUM_CANDS_SIGNALED         5   //<G091: value of maxNumMergeCand signaled in slice header
278
279#define WEIGHTED_CHROMA_DISTORTION  1   ///< F386: weighting of chroma for RDO
280#define RDOQ_CHROMA_LAMBDA          1   ///< F386: weighting of chroma for RDOQ
281#define ALF_CHROMA_LAMBDA           1   ///< F386: weighting of chroma for ALF
282#define SAO_CHROMA_LAMBDA           1   ///< F386: weighting of chroma for SAO
283
284#define MIN_SCAN_POS_CROSS          4
285
286#define FAST_BIT_EST                1   ///< G763: Table-based bit estimation for CABAC
287
288#define G519_TU_AMP_NSQT_HARMONIZATION  1   ///< G519: Harmonization of implicit TU, AMP and NSQT
289
290#define MLS_GRP_NUM                         64     ///< G644 : Max number of coefficient groups, max(16, 64)
291#define MLS_CG_SIZE                         4      ///< G644 : Coefficient group size of 4x4
292
293#define ADAPTIVE_QP_SELECTION               1      ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection
294#if ADAPTIVE_QP_SELECTION
295#define ARL_C_PRECISION                     7      ///< G382: 7-bit arithmetic precision
296#define LEVEL_RANGE                         30     ///< G382: max coefficient level in statistics collection
297#endif
298
299
300#define CHROMA_MODE_CODING                   1     //H0326/H0475 : 2-length fixed, bypass coding for chroma intra prediction mode
301
302#define NSQT_LFFIX                           1     ///< Bug fix related to NSQT and deblocking filter
303#define NS_HAD                               1
304
305#define APS_BITS_FOR_SAO_BYTE_LENGTH 12
306#define APS_BITS_FOR_ALF_BYTE_LENGTH 8
307
308#define H0736_AVC_STYLE_QP_RANGE             1    ///< H0736: AVC style qp range and wrapping.
309#define H0204_QP_PREDICTION                  1    ///< H0204: improved QP prediction
310
311#define HHI_RQT_INTRA_SPEEDUP             1           ///< tests one best mode with full rqt
312#define HHI_RQT_INTRA_SPEEDUP_MOD         0           ///< tests two best modes with full rqt
313
314#define BURST_IPCM                        1           ///< H0051: Burst IPCM
315
316#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP
317#error
318#endif
319
320#define H0137_0138_LIST_MODIFICATION      1           // Enabled reference picture lists combination (H0137) and reference picture list modification (H0138) updates
321#if !H0137_0138_LIST_MODIFICATION
322#error "H0137_0138_LIST_MODIFICATION must be enabled for multi-view coding."
323#endif
324
325#define VERBOSE_RATE 0                               ///< Print additional rate information in encoder
326
327#define AMVP_DECIMATION_FACTOR            4
328
329#define SCAN_SET_SIZE                     16
330#define LOG2_SCAN_SET_SIZE                4
331
332#if LGE_EDGE_INTRA_A0070
333#if LGE_EDGE_INTRA_DELTA_DC
334#define FAST_UDI_MAX_RDMODE_NUM               37          ///< maximum number of RD comparison in fast-UDI estimation loop
335#else
336#define FAST_UDI_MAX_RDMODE_NUM               36          ///< maximum number of RD comparison in fast-UDI estimation loop
337#endif
338#else
339#define FAST_UDI_MAX_RDMODE_NUM               35          ///< maximum number of RD comparison in fast-UDI estimation loop
340#endif
341
342#define ZERO_MVD_EST                          0           ///< Zero Mvd Estimation in normal mode
343
344#define NUM_INTRA_MODE 36
345#define LM_CHROMA_IDX  35
346
347#if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
348enum MODE_IDX
349{
350  DMM_WEDGE_FULL_IDX         = NUM_INTRA_MODE,
351  DMM_WEDGE_FULL_D_IDX       = NUM_INTRA_MODE+1,
352  DMM_WEDGE_PREDTEX_IDX      = NUM_INTRA_MODE+2,
353  DMM_WEDGE_PREDTEX_D_IDX    = NUM_INTRA_MODE+3,
354  DMM_CONTOUR_PREDTEX_IDX    = NUM_INTRA_MODE+4,
355  DMM_CONTOUR_PREDTEX_D_IDX  = NUM_INTRA_MODE+5,
356  DMM_WEDGE_PREDDIR_IDX      = NUM_INTRA_MODE+6,
357  DMM_WEDGE_PREDDIR_D_IDX    = NUM_INTRA_MODE+7
358};
359#define NUM_DMM_MODE 8
360#elif HHI_DMM_WEDGE_INTRA && !HHI_DMM_PRED_TEX
361enum MODE_IDX
362{
363  DMM_WEDGE_FULL_IDX         = NUM_INTRA_MODE,
364  DMM_WEDGE_FULL_D_IDX       = NUM_INTRA_MODE+1,
365  DMM_WEDGE_PREDDIR_IDX      = NUM_INTRA_MODE+2,
366  DMM_WEDGE_PREDDIR_D_IDX    = NUM_INTRA_MODE+3
367};
368#define NUM_DMM_MODE 4
369#elif !HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
370enum MODE_IDX
371{
372  DMM_WEDGE_PREDTEX_IDX      = NUM_INTRA_MODE,
373  DMM_WEDGE_PREDTEX_D_IDX    = NUM_INTRA_MODE+1,
374  DMM_CONTOUR_PREDTEX_IDX    = NUM_INTRA_MODE+2,
375  DMM_CONTOUR_PREDTEX_D_IDX  = NUM_INTRA_MODE+3,
376};
377#define NUM_DMM_MODE 4
378#endif
379
380#if LGE_EDGE_INTRA_A0070
381#if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
382#define EDGE_INTRA_IDX  (NUM_INTRA_MODE+NUM_DMM_MODE)
383#endif // HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
384#if LGE_EDGE_INTRA_DELTA_DC
385#define EDGE_INTRA_DELTA_IDX          (EDGE_INTRA_IDX+1)
386#endif
387#endif // LGE_EDGE_INTRA
388
389#define IBDI_DISTORTION                0           ///< enable/disable SSE modification when IBDI is used (JCTVC-D152)
390#define FIXED_ROUNDING_FRAME_MEMORY    0           ///< enable/disable fixed rounding to 8-bitdepth of frame memory when IBDI is used
391
392#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.
393#define PRINT_RPS_INFO                  0           ///< Enable/disable the printing of bits used to send the RPS.
394                                                    // using one nearest frame as reference frame, and the other frames are high quality (POC%4==0) frames (1+X)
395                                                    // this should be done with encoder only decision
396                                                    // but because of the absence of reference frame management, the related code was hard coded currently
397#define LTRP_MULT                       1           ///< enable/disable multiple long term reference pictures with same POC LSB
398
399#define OL_FLUSH 1          // Set to 1 to enable Wavefront Flush.
400#define OL_FLUSH_ALIGN 0    // Align flush to byte boundary.  This preserves byte operations in CABAC (faster) but at the expense of an average
401                            // of 4 bits per flush.
402                            // Setting to 0 will slow cabac by an as yet unknown amount.
403                            // This is here just to perform timing tests -- OL_FLUSH_ALIGN should be 0 for WPP.
404
405#define RVM_VCEGAM10_M         4
406
407#define PLANAR_IDX             0
408#if LOGI_INTRA_NAME_3MPM
409#define VER_IDX                26                    // index for intra VERTICAL   mode
410#define HOR_IDX                10                    // index for intra HORIZONTAL mode
411#define DC_IDX                 1                     // index for intra DC mode
412#else
413#define DC_IDX                 3                     // index for intra DC mode
414#endif
415#define NUM_CHROMA_MODE        6                     // total number of chroma modes
416#define DM_CHROMA_IDX          36                    // chroma mode index for derived from luma intra mode
417
418
419#define FAST_UDI_USE_MPM 1
420
421#define RDO_WITHOUT_DQP_BITS              0           ///< Disable counting dQP bits in RDO-based mode decision
422
423#define FULL_NBIT 0 ///< When enabled, does not use g_uiBitIncrement anymore to support > 8 bit data
424
425#define FIXED_NUMBER_OF_TILES_SLICE_MODE                1
426#define AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE      1          ///< OPTION IDENTIFIER. mode==1 -> Limit maximum number of largest coding tree blocks in a slice
427#define AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE    2          ///< OPTION IDENTIFIER. mode==2 -> Limit maximum number of bins/bits in a slice
428#if FIXED_NUMBER_OF_TILES_SLICE_MODE
429#define AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE    3
430#endif
431
432// Entropy slice options
433#define SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE            1          ///< OPTION IDENTIFIER. Limit maximum number of largest coding tree blocks in an entropy slice
434#define SHARP_MULTIPLE_CONSTRAINT_BASED_ENTROPY_SLICE         2          ///< OPTION IDENTIFIER. Limit maximum number of bins/bits in an entropy slice
435
436#define LOG2_MAX_NUM_COLUMNS_MINUS1        7
437#define LOG2_MAX_NUM_ROWS_MINUS1           7
438#define LOG2_MAX_COLUMN_WIDTH              13
439#define LOG2_MAX_ROW_HEIGHT                13
440
441#define MAX_MARKER_PER_NALU                 1000
442
443#define MATRIX_MULT                             0   // Brute force matrix multiplication instead of partial butterfly
444
445#define REG_DCT 65535
446
447#define AMP_SAD                               1           ///< dedicated SAD functions for AMP
448#define AMP_ENC_SPEEDUP                       1           ///< encoder only speed-up by AMP mode skipping
449#if AMP_ENC_SPEEDUP
450#define AMP_MRG                               1           ///< encoder only force merge for AMP partition (no motion search for AMP)
451#endif
452
453#define SCALING_LIST_OUTPUT_RESULT    0 //JCTVC-G880/JCTVC-G1016 quantization matrices
454#define SCALING_LIST                  1 //JCTVC-H0230/H0461/H0237
455
456#define DEFAULT_DC                    1 // JCTVC-H0242
457
458#define RPS_IN_SPS                    1 // Adopted during discussion of JCTVC-H0423
459
460#define H0412_REF_PIC_LIST_RESTRICTION 1
461
462#define H0566_TLA                     1
463#if H0566_TLA
464#define H0566_TLA_SET_FOR_SWITCHING_POINTS 1
465#endif
466
467#define H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER 1
468
469#define DBL_H0473_PART_1          1   //Deblocking filtering simplification
470#define DBL_CONTROL               1   //PPS deblocking_filter_control_present_flag (JCTVC-H0398); condition for inherit params flag in SH (JCTVC-H0424)
471#define DBL_STRONG_FILTER_CLIP    1   //Introduction of strong filter clipping in deblocking filter (JCTVC-H0275)
472
473#define CABAC_INIT_FLAG             1 // JCTVC-H0540
474#define CABAC_INIT_PRESENT_FLAG     1
475
476#define H0388                       1 // JCTVC-H0388
477
478#define TILES_WPP_ENTRY_POINT_SIGNALLING        1 // JCTVC-H0556. Assumes either Tiles is ON or WPP is ON (not both simultaneously).
479#define REMOVE_TILE_DEPENDENCE                  1 // remove tile_boundary_independence_flag and dependent tiles
480#define TILES_OR_ENTROPY_SYNC_IDC               1 // tiles_or_entropy_coding_sync_idc flag
481#define COMPLETE_SLICES_IN_TILE     1 // Among the constraints between slices and tiles, all slices within a tile shall be complete (JCTVC-H0348/JCTVC-H0463) for SliceMode 1&2
482#define WPP_SIMPLIFICATION          1 // JCTVC-H0349/JCTVC-0517
483
484// ====================================================================================================================
485// VPS INTEGRATION
486// ====================================================================================================================
487#if !QC_MVHEVC_B0046
488#if VIDYO_VPS_INTEGRATION
489#define MAX_NUM_VPS 10
490#endif
491#else
492#define MAX_NUM_VPS 1
493#endif
494
495
496// ====================================================================================================================
497// Basic type redefinition
498// ====================================================================================================================
499
500typedef       void                Void;
501typedef       bool                Bool;
502
503typedef       char                Char;
504typedef       unsigned char       UChar;
505typedef       short               Short;
506typedef       unsigned short      UShort;
507typedef       int                 Int;
508typedef       unsigned int        UInt;
509typedef       double              Double;
510
511// ====================================================================================================================
512// 64-bit integer type
513// ====================================================================================================================
514
515#ifdef _MSC_VER
516typedef       __int64             Int64;
517
518#if _MSC_VER <= 1200 // MS VC6
519typedef       __int64             UInt64;   // MS VC6 does not support unsigned __int64 to double conversion
520#else
521typedef       unsigned __int64    UInt64;
522#endif
523
524#else
525
526typedef       long long           Int64;
527typedef       unsigned long long  UInt64;
528
529#endif
530
531// ====================================================================================================================
532// Type definition
533// ====================================================================================================================
534
535typedef       UChar           Pxl;        ///< 8-bit pixel type
536typedef       Short           Pel;        ///< 16-bit pixel type
537typedef       Int             TCoeff;     ///< transform coefficient
538
539
540// ====================================================================================================================
541// Define Distortion Types
542// ====================================================================================================================
543typedef       Int64           RMDist;     ///< renderer model distortion
544
545#if HHI_VSO_DIST_INT
546typedef       Int              Dist;       ///< RDO distortion
547#define       RDO_DIST_MIN     MIN_INT
548#define       RDO_DIST_MAX     MAX_INT
549#else
550typedef       UInt             Dist;       ///< RDO distortion
551#define       RDO_DIST_MIN     0
552#define       RDO_DIST_MAX     MAX_UINT
553#endif
554
555/// parameters for adaptive loop filter
556class TComPicSym;
557
558#define NUM_DOWN_PART 4
559
560enum SAOTypeLen
561{
562  SAO_EO_LEN    = 4,
563#if SAO_UNIT_INTERLEAVING
564  SAO_BO_LEN    = 4,
565  SAO_MAX_BO_CLASSES = 32
566#else
567  SAO_BO_LEN    = 16
568#endif
569};
570
571enum SAOType
572{
573  SAO_EO_0 = 0,
574  SAO_EO_1,
575  SAO_EO_2,
576  SAO_EO_3,
577#if SAO_UNIT_INTERLEAVING
578  SAO_BO,
579#else
580  SAO_BO_0,
581  SAO_BO_1,
582#endif
583  MAX_NUM_SAO_TYPE
584};
585
586typedef struct _SaoQTPart
587{
588#if !SAO_UNIT_INTERLEAVING
589  Bool        bEnableFlag;
590#endif
591  Int         iBestType;
592  Int         iLength;
593#if SAO_UNIT_INTERLEAVING
594  Int         bandPosition ;
595  Int         iOffset[4];
596#else
597  Int         iOffset[32];
598#endif
599  Int         StartCUX;
600  Int         StartCUY;
601  Int         EndCUX;
602  Int         EndCUY;
603
604  Int         PartIdx;
605  Int         PartLevel;
606  Int         PartCol;
607  Int         PartRow;
608
609  Int         DownPartsIdx[NUM_DOWN_PART];
610  Int         UpPartIdx;
611
612  Bool        bSplit;
613
614  //---- encoder only start -----//
615  Bool        bProcessed;
616  Double      dMinCost;
617  Int64       iMinDist;
618  Int         iMinRate;
619  //---- encoder only end -----//
620} SAOQTPart;
621
622#if SAO_UNIT_INTERLEAVING
623typedef struct _SaoLcuParam
624{
625  Bool       mergeUpFlag;
626  Bool       mergeLeftFlag;
627  Int        typeIdx;
628  Int        bandPosition;
629  Int        offset[4];
630  Int        runDiff;
631  Int        run;
632  Int        partIdx;
633  Int        partIdxTmp;
634  Int        length;
635} SaoLcuParam;
636#endif
637
638struct SAOParam
639{
640  Bool       bSaoFlag[3];
641  SAOQTPart* psSaoPart[3];
642  Int        iMaxSplitLevel;
643  Int        iNumClass[MAX_NUM_SAO_TYPE];
644#if SAO_UNIT_INTERLEAVING
645  Bool         oneUnitFlag[3];
646  SaoLcuParam* saoLcuParam[3];
647  Int          numCuInHeight;
648  Int          numCuInWidth;
649#endif
650  ~SAOParam();
651};
652
653struct ALFParam
654{
655  Int alf_flag;                           ///< indicates use of ALF
656#if !LCU_SYNTAX_ALF
657  Int chroma_idc;                         ///< indicates use of ALF for chroma
658#endif
659  Int num_coeff;                          ///< number of filter coefficients
660  Int filter_shape;
661#if !LCU_SYNTAX_ALF
662  Int filter_shape_chroma;
663  Int num_coeff_chroma;                   ///< number of filter coefficients (chroma)
664  Int *coeff_chroma;                      ///< filter coefficient array (chroma)
665#endif
666  Int *filterPattern;
667  Int startSecondFilter;
668  Int filters_per_group;
669  Int predMethod;
670  Int *nbSPred;
671  Int **coeffmulti;
672  Int minKStart;
673#if !LCU_SYNTAX_ALF
674  Int maxScanVal;
675  Int kMinTab[42];
676
677  Int alf_pcr_region_flag;
678  ~ALFParam();
679#endif
680#if LCU_SYNTAX_ALF
681  Int componentID;
682  Int* kMinTab;
683  //constructor, operator
684  ALFParam():componentID(-1){}
685  ALFParam(Int cID){create(cID);}
686  ALFParam(const ALFParam& src) {*this = src;}
687  ~ALFParam(){destroy();}
688  const ALFParam& operator= (const ALFParam& src);
689private:
690  Void create(Int cID);
691  Void destroy();
692  Void copy(const ALFParam& src);
693#endif
694};
695
696#if LCU_SYNTAX_ALF
697struct AlfUnitParam
698{
699  Int   mergeType;
700  Bool  isEnabled;
701  Bool  isNewFilt;
702  Int   storedFiltIdx;
703  ALFParam* alfFiltParam;
704  //constructor, operator
705  AlfUnitParam();
706  AlfUnitParam(const AlfUnitParam& src){ *this = src;}
707  const AlfUnitParam& operator= (const AlfUnitParam& src);
708  Bool operator == (const AlfUnitParam& cmp);
709};
710
711struct AlfParamSet
712{
713  Bool isEnabled[3];
714  Bool isUniParam[3];
715  Int  numLCUInWidth;
716  Int  numLCUInHeight;
717  Int  numLCU;
718  AlfUnitParam* alfUnitParam[3];
719  //constructor, operator
720  AlfParamSet(){create();}
721  ~AlfParamSet(){destroy();}
722  Void create(Int width =0, Int height=0, Int num=0);
723  Void init();
724  Void releaseALFParam();
725  Void createALFParam();
726private:
727  Void destroy();
728};
729#endif
730
731
732
733/// parameters for deblocking filter
734typedef struct _LFCUParam
735{
736  Bool bInternalEdge;                     ///< indicates internal edge
737  Bool bLeftEdge;                         ///< indicates left edge
738  Bool bTopEdge;                          ///< indicates top edge
739} LFCUParam;
740
741// ====================================================================================================================
742// Enumeration
743// ====================================================================================================================
744
745/// supported slice type
746enum SliceType
747{
748  I_SLICE,
749  P_SLICE,
750  B_SLICE
751};
752
753/// chroma formats (according to semantics of chroma_format_idc)
754enum ChromaFormat
755{
756  CHROMA_400  = 0,
757  CHROMA_420  = 1,
758  CHROMA_422  = 2,
759  CHROMA_444  = 3
760};
761
762/// supported partition shape
763enum PartSize
764{
765  SIZE_2Nx2N,           ///< symmetric motion partition,  2Nx2N
766  SIZE_2NxN,            ///< symmetric motion partition,  2Nx N
767  SIZE_Nx2N,            ///< symmetric motion partition,   Nx2N
768  SIZE_NxN,             ///< symmetric motion partition,   Nx N
769  SIZE_2NxnU,           ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)
770  SIZE_2NxnD,           ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2)
771  SIZE_nLx2N,           ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N
772  SIZE_nRx2N,           ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N
773  SIZE_NONE = 15
774};
775
776
777enum BlenMod
778{
779    BLEND_NONE  = -1,
780    BLEND_AVRG  = 0,
781    BLEND_LEFT  = 1,
782    BLEND_RIGHT = 2,
783    BLEND_GEN   =  3
784};
785
786/// supported prediction type
787enum PredMode
788{
789  MODE_SKIP,            ///< SKIP mode
790  MODE_INTER,           ///< inter-prediction mode
791  MODE_INTRA,           ///< intra-prediction mode
792  MODE_NONE = 15
793};
794
795/// texture component type
796enum TextType
797{
798  TEXT_LUMA,            ///< luma
799  TEXT_CHROMA,          ///< chroma (U+V)
800  TEXT_CHROMA_U,        ///< chroma U
801  TEXT_CHROMA_V,        ///< chroma V
802  TEXT_ALL,             ///< Y+U+V
803  TEXT_NONE = 15
804};
805
806/// reference list index
807enum RefPicList
808{
809  REF_PIC_LIST_0 = 0,   ///< reference list 0
810  REF_PIC_LIST_1 = 1,   ///< reference list 1
811  REF_PIC_LIST_C = 2,   ///< combined reference list for uni-prediction in B-Slices
812  REF_PIC_LIST_X = 100  ///< special mark
813};
814
815/// distortion function index
816enum DFunc
817{
818  DF_DEFAULT  = 0,
819  DF_SSE      = 1,      ///< general size SSE
820  DF_SSE4     = 2,      ///<   4xM SSE
821  DF_SSE8     = 3,      ///<   8xM SSE
822  DF_SSE16    = 4,      ///<  16xM SSE
823  DF_SSE32    = 5,      ///<  32xM SSE
824  DF_SSE64    = 6,      ///<  64xM SSE
825  DF_SSE16N   = 7,      ///< 16NxM SSE
826
827  DF_SAD      = 8,      ///< general size SAD
828  DF_SAD4     = 9,      ///<   4xM SAD
829  DF_SAD8     = 10,     ///<   8xM SAD
830  DF_SAD16    = 11,     ///<  16xM SAD
831  DF_SAD32    = 12,     ///<  32xM SAD
832  DF_SAD64    = 13,     ///<  64xM SAD
833  DF_SAD16N   = 14,     ///< 16NxM SAD
834
835  DF_SADS     = 15,     ///< general size SAD with step
836  DF_SADS4    = 16,     ///<   4xM SAD with step
837  DF_SADS8    = 17,     ///<   8xM SAD with step
838  DF_SADS16   = 18,     ///<  16xM SAD with step
839  DF_SADS32   = 19,     ///<  32xM SAD with step
840  DF_SADS64   = 20,     ///<  64xM SAD with step
841  DF_SADS16N  = 21,     ///< 16NxM SAD with step
842
843  DF_HADS     = 22,     ///< general size Hadamard with step
844  DF_HADS4    = 23,     ///<   4xM HAD with step
845  DF_HADS8    = 24,     ///<   8xM HAD with step
846  DF_HADS16   = 25,     ///<  16xM HAD with step
847  DF_HADS32   = 26,     ///<  32xM HAD with step
848  DF_HADS64   = 27,     ///<  64xM HAD with step
849  DF_HADS16N  = 28,     ///< 16NxM HAD with step
850
851#if SAIT_VSO_EST_A0033
852  DF_VSD      = 29,      ///< general size VSD
853  DF_VSD4     = 30,      ///<   4xM VSD
854  DF_VSD8     = 31,      ///<   8xM VSD
855  DF_VSD16    = 32,      ///<  16xM VSD
856  DF_VSD32    = 33,      ///<  32xM VSD
857  DF_VSD64    = 34,      ///<  64xM VSD
858  DF_VSD16N   = 35,      ///< 16NxM VSD
859#endif
860
861
862#if AMP_SAD
863  DF_SAD12    = 43,
864  DF_SAD24    = 44,
865  DF_SAD48    = 45,
866
867  DF_SADS12   = 46,
868  DF_SADS24   = 47,
869  DF_SADS48   = 48,
870
871  DF_SSE_FRAME = 50     ///< Frame-based SSE
872#else
873  DF_SSE_FRAME = 33     ///< Frame-based SSE
874#endif
875};
876
877/// index for SBAC based RD optimization
878enum CI_IDX
879{
880  CI_CURR_BEST = 0,     ///< best mode index
881  CI_NEXT_BEST,         ///< next best index
882  CI_TEMP_BEST,         ///< temporal index
883  CI_CHROMA_INTRA,      ///< chroma intra index
884  CI_QT_TRAFO_TEST,
885  CI_QT_TRAFO_ROOT,
886  CI_NUM,               ///< total number
887};
888
889/// motion vector predictor direction used in AMVP
890enum MVP_DIR
891{
892  MD_LEFT = 0,          ///< MVP of left block
893  MD_ABOVE,             ///< MVP of above block
894  MD_ABOVE_RIGHT,       ///< MVP of above right block
895  MD_BELOW_LEFT,        ///< MVP of below left block
896  MD_ABOVE_LEFT         ///< MVP of above left block
897};
898
899/// motion vector prediction mode used in AMVP
900enum AMVP_MODE
901{
902  AM_NONE = 0,          ///< no AMVP mode
903  AM_EXPL,              ///< explicit signalling of motion vector index
904};
905
906/// coefficient scanning type used in ACS
907enum COEFF_SCAN_TYPE
908{
909  SCAN_ZIGZAG = 0,      ///< typical zigzag scan
910  SCAN_HOR,             ///< horizontal first scan
911  SCAN_VER,              ///< vertical first scan
912  SCAN_DIAG              ///< up-right diagonal scan
913};
914
915// Renderer
916enum
917{
918  VIEWPOS_INVALID = -1,
919  VIEWPOS_LEFT    = 0,
920  VIEWPOS_RIGHT   = 1,
921  VIEWPOS_MERGED  = 2
922};
923
924//! \}
925
926#endif
927
928
Note: See TracBrowser for help on using the repository browser.