source: 3DVCSoftware/branches/0.3-poznan-univ/source/Lib/TLibCommon/TypeDef.h @ 41

Last change on this file since 41 was 41, checked in by poznan-univ, 12 years ago

Adjustment for FlexCO, and high-level syntax improvement.

  • Property svn:eol-style set to native
File size: 30.2 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-2011, 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 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
42#define FLEX_CODING_ORDER               1
43
44#define SONY_COLPIC_AVAILABILITY        1
45
46//>>>>> HHI 3DV tools >>>>>
47#define HHI_INTER_VIEW_MOTION_PRED      1   // inter-view motion parameter prediction
48#define HHI_INTER_VIEW_RESIDUAL_PRED    1   // inter-view residual prediction
49#define HHI_FULL_PEL_DEPTH_MAP_MV_ACC   1   // full-pel mv accuracy for depth maps
50#define HHI_MPI                         1   // motion parameter inheritance from texture picture for depth map coding
51#define HHI_INTERVIEW_SKIP              1   // skipping of residual for renderable regions
52#define HHI_INTERVIEW_SKIP_LAMBDA_SCALE 1   // scaling of lambda in cost calculation in rederable regions
53#define HHI_VSO                         1   // view synthesis optimization
54#define HHI_VSO_COLOR_PLANES            1   // view synthesis optimization in color planes
55#define HHI_VSO_DIST_INT                1   // view synthesis optimization integer distorition in rdo process
56#define HHI_VSO_LS_TABLE                1   // table based lambda scaling
57
58#if HHI_INTERVIEW_SKIP_LAMBDA_SCALE && !HHI_INTERVIEW_SKIP
59  #error "HHI_INTERVIEW_SKIP_LAMBDA_SCALE cannot be enabled if HHI_INTERVIEW_SKIP is not"
60#endif
61
62#define HHI_DMM_WEDGE_INTRA             1   // depth model modes independent on texture (explicit and intra-predicted Wedgelet prediction)
63#define HHI_DMM_PRED_TEX                1   // depth model model dependent on texture (inter-component Wedgelet and Contour prediction )
64
65#define HHI_NO_LowDelayCoding           0   // old-fashioned encoder control, should be adapted to hm5.0
66//<<<<< HHI 3DV tools <<<<<
67
68//<<<<< Poznan 3DV tools <<<<<<
69#define POZNAN_CU_SKIP              1 //Poznan Cu Skip
70#define POZNAN_CU_SYNTH             1 //Poznan Cu Synth
71
72#define POZNAN_AVAIL_MAP            1 //Creates Availibity buffers in all needed classes
73
74#define POZNAN_SYNTH_VIEW           1 //Creates view synthesis buffers in all needed classes
75#define POZNAN_SYNTH_DEPTH          1
76
77#define POZNAN_SYNTH                1 //Creates aligned synthesis classes in encoder and decoder
78
79#define POZNAN_ENCODE_ONLY_DISOCCLUDED_CU          1 //Poznan CU Skip
80#define POZNAN_FILL_OCCLUDED_CU_WITH_SYNTHESIS     1 //Fill not sended CUs with synthesized data
81
82#define POZNAN_VSO_FIX              0
83
84#define POZNAN_CU_SKIP_PSNR         1 //Poznan Cu Skip Display psnr of the codded CUs only
85
86#define POZNAN_NONLINEAR_DEPTH              1    /// Non-linear depth processing
87#define POZNAN_NONLINEAR_DEPTH_THRESHOLD    1  /// Non-linear depth thrasholding
88
89#if POZNAN_SYNTH
90#define POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1 /// Increase QP for texture CUs that are in the background (according to proper depth map). This QP change is not encoded in a bitstream
91#endif
92#if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH     
93 #define POZNAN_TEXTURE_TU_DELTA_QP_NOT_IN_BASE_VIEW 1     /// should not be disabled in current software version - no depth synthesis map is available for base view anyway 
94 #define POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_CU_ROW 1    /// increase of QP param for top and bottom LCU row in frame
95 #define POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 0 /// used for optimization of function calculating dQP from depth block max value. Standard values set if disabled. If enabled params are set in cfg file for encoder (no decoder is supported in that case).
96  #if !POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC
97    #define POZNAN_TEXTURE_TU_DELTA_QP_OFFSET (-2.6)
98    #define POZNAN_TEXTURE_TU_DELTA_QP_MUL (1)
99    #define POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_ROW_VAL (0)
100  #endif
101#endif
102
103#define POZNAN_MP                                  1    /// Depth-Based Multiview Prediction of CU parameters
104#if POZNAN_MP
105
106#define POZNAN_MP_USE_DEPTH_MAP_GENERATION 0 // determines if DEPTH_MAP_GENERATION is used for calculating corresponding pixel position in PUT multiview prediction (POZNAN_MP):
107                                                                                                                                        //                      POZNAN_MP_USE_DEPTH_MAP_GENERATION=1 - use DEPTH_MAP_GENERATION,
108                                                                                                                                        //                      POZNAN_MP_USE_DEPTH_MAP_GENERATION=0 - use reconstructed depth maps from neighboring views
109
110#if !POZNAN_MP_USE_DEPTH_MAP_GENERATION
111#define POZNAN_MP_USE_CURRENT_VIEW_DEPTH_MAP_IF_AVAILABLE 1 // Depth-Based Multiview Prediction of CU parameters will use depth picture of current view if this picture is available, otherwise reference view depth is utilized
112#endif
113
114#define POZNAN_MP_FILL                             1    // Depth-Based Multiview Prediction of CU parameters with fill option for occluded areas
115#if POZNAN_MP_FILL
116#define POZNAN_MP_FILL_TYPE                        0    // Variant of fill algorithm used for occluded areas (0 - smaller disparity, 1 - larger disparity)
117#endif
118
119// ---------------------------------------
120
121#define POZNAN_DBMP                                1    // Depth Based Motion Prediction prediction for MERGE
122#if POZNAN_DBMP
123#define POZNAN_DBMP_USE_FOR_TEXTURE                  1    //use Depth Based Motion Prediction in texture pictures (0 - no, 1 -yes)
124#define POZNAN_DBMP_USE_FOR_DEPTH                  1    // use Depth Based Motion Prediction in depth pictures (0 - no, 1 -yes)
125
126#define POZNAN_DBMP_CALC_PRED_DATA              1    // Depth Based Motion Prediction motion data used for prediction in other CUs is calculated based on all CU points (otherwise motion data for none-MP points is used for prediction)
127#define POZNAN_DBMP_COMPRESS_ME_DATA            0    // Depth Based Motion Prediction derives representative motion data from reference CUs even if they are DBMP-based predicted (otherwise motion data is derived with per-point resolution for DBMP-based predicted reference CUs)
128#define POZNAN_DBMP_USE_IN_NONANCHOR_PIC_ONLY           1    // determines if Depth Based Motion Prediction is used in non-anchor pictures only
129#endif
130
131#endif
132
133
134//<<<<< Poznan 3DV tools <<<<<<
135
136////////////////////////////
137// AHG18 Weighted Prediction defines section start
138////////////////////////////
139#define WEIGHT_PRED           ///< enable AVC based weighted prediction
140
141//////////////////////////
142// AHG18 Weighted Prediction defines section end
143//////////////////////////
144
145////////////////////////////
146// JCT-VC E start
147////////////////////////////
148
149#define E253                              1
150
151////////////////////////////
152// JCT-VC E end
153////////////////////////////
154
155
156
157#define HHI_DISABLE_INTER_NxN_SPLIT       1           ///< TN: disable redundant use of pu-mode NxN for CTBs larger 8x8 (inter only)
158#define HHI_RMP_SWITCH                    0
159
160#define HHI_RQT_FORCE_SPLIT_NxN           0           ///< MSHK: force split flags of residual quadtree for NxN PUs such that transform blocks are guaranteed to not span NxN PUs
161#define HHI_RQT_FORCE_SPLIT_RECT          0           ///< MSHK: force split flags of residual quadtree for rectangular PUs such that transform blocks are guaranteed to not span rectangular PUs
162#define HHI_RQT_INTRA_SPEEDUP             1           ///< tests one best mode with full rqt
163#define HHI_RQT_INTRA_SPEEDUP_MOD         0           ///< tests two best modes with full rqt
164
165#define PART_MRG                          1            // If the number of partitions is two and size > 8, only merging mode is enabled for the first partition & do not code merge_flag for the first partition
166#define HHI_MRG_SKIP                      1            // (JCTVC-E481 - merge skip) replaces the AMVP based skip by merge based skip (E481 - MERGE skip)
167
168#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP
169#error
170#endif
171
172#if ( HHI_RQT_FORCE_SPLIT_NxN || HHI_RQT_FORCE_SPLIT_RECT)
173#define HHI_RQT_FORCE_SPLIT_ACC2_PU       1
174#else
175#define HHI_RQT_FORCE_SPLIT_ACC2_PU       0
176#endif
177
178// COLOCATED PREDICTOR
179// FOR MERGE
180#define MRG_NEIGH_COL                     1           ///< use of colocated MB in MERGE
181#define FT_TCTR_MRG                       1           ///< central colocated in MERGE
182#if !FT_TCTR_MRG
183#define PANASONIC_MERGETEMPORALEXT        1           ///<
184#endif
185#define MTK_TMVP_H_MRG                    1           ///< (JCTVC-E481 - D125 2.1) right-bottom collocated for merge
186#define PANASONIC_MRG_TMVP_REFIDX         1           ///< (JCTVC-E481 - D274 (2) ) refidx derivation for merge TMVP
187// FOR AMVP
188#define AMVP_NEIGH_COL                    1           ///< use of colocated MB in AMVP
189#define FT_TCTR_AMVP                      1           ///< central colocated in AMVP
190#if !FT_TCTR_AMVP
191#define PANASONIC_AMVPTEMPORALEXT         1           ///<
192#endif
193#define MTK_TMVP_H_AMVP                   1           ///< (JCTVC-E481 - D125 2.1) right-bottom collocated for amvp
194// FOR BOTH
195#define PANASONIC_AMVPTEMPORALMOD         1           ///< (JCTVC-E481 - D125 2.4' / D274 3')
196#define AMVP_BUFFERCOMPRESS               1           ///< motion vector buffer compression
197#define AMVP_DECIMATION_FACTOR            4
198#define MV_COMPRESS_MODE_REFIDX           1           ///< (JCTVC-E147) compress all inter prediction parameters according to 1)
199
200#define HIGH_ACCURACY_BI                  1          // High precision bi-prediction JCTVC-D321
201#define REMOVE_INTERMEDIATE_CLIPPING      1          // No intermediate clipping in bi-prediction JCTVC-E242
202
203////////////////
204// E494 (E227/E338/E344/E489/E494): PCP SIGMAP + REDUCED CONTEXTS
205////////////////
206
207#define PCP_SIGMAP_SIMPLE_LAST            1
208#define SIMPLE_CONTEXT_SIG                1
209
210
211#define QC_MOD_LCEC                       1           // JCTVC-D374: modified LCEC coeff. coding
212#define LCEC_INTRA_MODE                   1           // JCTVC-D366: improved luma intra mode coding
213#define QC_MOD_LCEC_RDOQ                  1           // JCTVC-D374: improved RDOQ
214#define QC_LCEC_INTER_MODE                1
215#define QC_MDIS                           1           // JCTVC-D282: enable mode dependent intra smoothing
216#define QC_MDCS                           1           // JCTVC-D393: mode dependent coefficients coding
217#if QC_MOD_LCEC
218#define RUNLEVEL_TABLE_CUT                1           // JCTVC-E384: Run-Level table size reduction
219#if RUNLEVEL_TABLE_CUT
220#define CAVLC_COEF_LRG_BLK                1           // JCTVC-E383: enable large block coeff. coding
221#endif
222#endif
223
224
225#define ENABLE_FORCECOEFF0  0
226
227/* Rounding control */
228//#define ROUNDING_CONTROL_BIPRED ///< From JCTVC-B074 This part of the code is not needed anymore : KU
229#define TRANS_PRECISION_EXT     ///< From JCTVC-B074
230
231#define HHI_RQT_DISABLE_SUB                   0           ///< disabling subtree whose node size is smaller than partition size
232
233#define FAST_UDI_MAX_RDMODE_NUM               35          ///< maximum number of RD comparison in fast-UDI estimation loop
234
235#define SAMSUNG_FAST_UDI_MODESET              0           ///< 0: {9,9,4,4,5} (default) and 1: {9,9,9,9,5} for {4x4,8x8,16x16,32x32,64x64}
236
237#define ZERO_MVD_EST                          0           ///< Zero Mvd Estimation in normal mode
238
239#define LM_CHROMA                             1           // JCTVC-E266: Chroma intra prediction based on luma signal
240
241#define UNIFY_INTER_TABLE                     1           // JCTVC-E381 CAVLC: Inter pred coding
242
243#define DCM_RDCOST_TEMP_FIX //Enables temporary bug fixes to RD cost computation
244
245#define DCM_DECODING_REFRESH              1           ///< enable/disable decoding refresh (IDR and CDR)
246#if DCM_DECODING_REFRESH
247#define DCM_SKIP_DECODING_FRAMES          1           ///< enable/disable the random access by the decoder
248#endif
249
250#define DCM_SIMPLIFIED_MVP                1           ///< enable/disable the simplified motion vector prediction(D231)
251#if DCM_SIMPLIFIED_MVP
252#define MTK_AMVP_SMVP_DERIVATION          1              ///< (JCTVC-E481 - D125 2.1) amvp spatial candidate derivation
253#define TI_AMVP_SMVP_SIMPLIFIED           1              ///< (JCTVC-E481 - F)amvp spatial candidate simplified scanning
254#endif
255
256#define DCM_COMB_LIST                  1           ///< Use of combined list for uni-prediction in B-slices
257
258#define ADD_PLANAR_MODE                   1           ///< enable/disable Planar mode for intra prediction (JCTVC-E321)
259#if ADD_PLANAR_MODE
260#define NUM_INTRA_MODE                    35
261#define PLANAR_IDX                        (NUM_INTRA_MODE-1)
262#endif
263
264#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
265#define DMM_WEDGEMODEL_MIN_SIZE           4           
266#define DMM_WEDGEMODEL_MAX_SIZE          32
267#define DMM_WEDGE_PREDDIR_DELTAEND_MAX    4           
268
269#if ADD_PLANAR_MODE
270#define  MAX_MODE_ID_INTRA_DIR            34
271#else
272#define  MAX_MODE_ID_INTRA_DIR            33
273#endif
274#if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
275enum MODE_IDX
276{
277  DMM_WEDGE_FULL_IDX         = MAX_MODE_ID_INTRA_DIR+1,
278  DMM_WEDGE_FULL_D_IDX       = MAX_MODE_ID_INTRA_DIR+2,
279  DMM_WEDGE_PREDTEX_IDX      = MAX_MODE_ID_INTRA_DIR+3,
280  DMM_WEDGE_PREDTEX_D_IDX    = MAX_MODE_ID_INTRA_DIR+4,
281  DMM_CONTOUR_PREDTEX_IDX    = MAX_MODE_ID_INTRA_DIR+5,
282  DMM_CONTOUR_PREDTEX_D_IDX  = MAX_MODE_ID_INTRA_DIR+6,
283  DMM_WEDGE_PREDDIR_IDX      = MAX_MODE_ID_INTRA_DIR+7,
284  DMM_WEDGE_PREDDIR_D_IDX    = MAX_MODE_ID_INTRA_DIR+8
285};
286#elif HHI_DMM_WEDGE_INTRA && !HHI_DMM_PRED_TEX
287enum MODE_IDX
288{
289  DMM_WEDGE_FULL_IDX         = MAX_MODE_ID_INTRA_DIR+1,
290  DMM_WEDGE_FULL_D_IDX       = MAX_MODE_ID_INTRA_DIR+2,
291  DMM_WEDGE_PREDDIR_IDX      = MAX_MODE_ID_INTRA_DIR+3,
292  DMM_WEDGE_PREDDIR_D_IDX    = MAX_MODE_ID_INTRA_DIR+4
293};
294#elif !HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
295enum MODE_IDX
296{
297  DMM_WEDGE_PREDTEX_IDX      = MAX_MODE_ID_INTRA_DIR+1,
298  DMM_WEDGE_PREDTEX_D_IDX    = MAX_MODE_ID_INTRA_DIR+2,
299  DMM_CONTOUR_PREDTEX_IDX    = MAX_MODE_ID_INTRA_DIR+3,
300  DMM_CONTOUR_PREDTEX_D_IDX  = MAX_MODE_ID_INTRA_DIR+4,
301};
302#endif
303#endif
304
305#define TSB_ALF_HEADER                 1           // Send ALF ON/OFF flag in slice header
306#define IBDI_DISTORTION                0           ///< enable/disable SSE modification when IBDI is used (JCTVC-D152)
307#define FIXED_ROUNDING_FRAME_MEMORY    0           ///< enable/disable fixed rounding to 8-bitdepth of frame memory when IBDI is used
308
309#define MS_LCEC_ONE_FRAME               1           // change the initial table in LCEC when there is up to one reference frame in each list, JCTVC-D141
310#define MS_LCEC_LOOKUP_TABLE_MAX_VALUE  1           // use the information of the max position in the lookup table, JCTVC-D141
311#define MS_LCEC_LOOKUP_TABLE_EXCEPTION  1           // deal with the case when the number of reference frames is greater than 2, JCTVC-D141
312#define MS_LCEC_UNI_EXCEPTION_THRES     1           // for GPB case, uni-prediction, > MS_LCEC_UNI_EXCEPTION_THRES is exception
313#define CAVLC_COUNTER_ADAPT             1          // counter based CAVLC adaptation, JCTVC-E143
314#if CAVLC_COUNTER_ADAPT
315#define CAVLC_RQT_CBP                   1           //CAVLC coding of cbf and split flag, JCTVC-E404
316#endif
317
318
319#define AVOID_ZERO_MERGE_CANDIDATE      1           // (JCTVC-E146/E118) insert zero MV if no merge candidates are available
320#define CHANGE_MERGE_CONTEXT            1           // (JCTVC-E146/E118) change merge flag context derivation
321#define CHANGE_GET_MERGE_CANDIDATE      1           // (JCTVC-E146/E118) merge flag parsing independent of number of merge candidates
322#if CHANGE_GET_MERGE_CANDIDATE && !CHANGE_MERGE_CONTEXT
323#error CHANGE_GET_MERGE_CANDIDATE can only be defined with CHANGE_MERGE_CONTEXT
324#endif
325
326#define MTK_DISABLE_INTRA_NxN_SPLIT       1           ///< Disable use of PUs-mode NxN for CUs larger 8x8 (intra only)
327#define MTK_NONCROSS_INLOOP_FILTER        1           ///< Allow non-cross-slice-boundary in-loop filtering, including DB & ALF (JCTVC-D128)
328
329#define RVM_VCEGAM10 1 // RVM model proposed in VCEG-AM10
330#if RVM_VCEGAM10
331#define RVM_VCEGAM10_M 4
332#endif
333
334#define MTK_DCM_MPM 1 // MostProbableModeSignaling
335
336#define FAST_UDI_USE_MPM 1
337#define SONY_SIG_CTX 1
338#define SNY_DQP                          1           ///< syntax change of dQP (JCT-VC D258)
339
340#define TI_ALF_MAX_VSIZE_7 1
341
342#define CHROMA_CODEWORD 1                             ///< enable new intra chroma mode encoding by setting to 1. setting to 0 should yield same results as TMuC 0.9
343#define CHROMA_CODEWORD_SWITCH  1                     ///< Switch the places of the last two codewords
344
345#define FULL_NBIT 0 ///< When enabled, does not use g_uiBitIncrement anymore to support > 8 bit data
346
347/////////////////////////////////
348// AHG SLICES defines section start
349/////////////////////////////////
350#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
351#define AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE    2          ///< OPTION IDENTIFIER. mode==2 -> Limit maximum number of bins/bits in a slice
352
353// Entropy slice options
354#define SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE            1          ///< OPTION IDENTIFIER. Limit maximum number of largest coding tree blocks in an entropy slice
355#define SHARP_MULTIPLE_CONSTRAINT_BASED_ENTROPY_SLICE         2          ///< OPTION IDENTIFIER. Limit maximum number of bins/bits in an entropy slice
356/////////////////////////////////
357// AHG SLICES defines section end
358/////////////////////////////////
359
360#define CONSTRAINED_INTRA_PRED            1           // JCTVC-D086: constrained intra prediction
361
362#define MTK_SAO                           1           // JCTVC-E049: Sample adaptive offset
363
364#define MQT_ALF_NPASS                       1
365
366#define MQT_BA_RA                        1  // JCTVC-E323+E046
367#if MQT_BA_RA
368#define VAR_SIZE_H           4
369#define VAR_SIZE_W           4
370#define NO_VAR_BIN          16
371#endif
372
373#if QC_MDIS
374#define MN_MDIS_SIMPLIFICATION       1       ///< JCTVC-E069: simplification of MDIS
375#endif
376#define MN_DC_PRED_FILTER            1       ///< JCTVC-E069: DC prediction samples filtering
377
378#define MVD_CTX            1           // JCTVC-E324: Modified context selection for MVD
379#define PARALLEL_DEBLK_DECISION      1 // JCTC-E224: Parallel decisions
380#define PARALLEL_MERGED_DEBLK        1 // JCTC-E224, JCTVC-E181: Parallel decisions + Parallel filtering
381#define REFERENCE_SAMPLE_PADDING                1   // JCTVC-E488 padding of unavailable reference samples for intra prediction
382
383#define E243_CORE_TRANSFORMS                    1
384#if E243_CORE_TRANSFORMS
385#define MATRIX_MULT                             0   // Brute force matrix multiplication instead of partial butterfly
386#endif
387
388// Discrete Sine Transform (DST) Type - 7
389// Currently DST operates with E-243 only
390#define INTRA_DST_TYPE_7                      1           // JCTVC-E125 4x4 DST
391#if INTRA_DST_TYPE_7
392#define REG_DCT 65535
393#if !E243_CORE_TRANSFORMS                   // E243_CORE_TRANSFORMS should be ON when DST is used
394#error "E243_CORE_TRANSFORMS should be ON"
395#endif
396#endif
397
398// ====================================================================================================================
399// Basic type redefinition
400// ====================================================================================================================
401
402typedef       void                Void;
403typedef       bool                Bool;
404
405typedef       char                Char;
406typedef       unsigned char       UChar;
407typedef       short               Short;
408typedef       unsigned short      UShort;
409typedef       int                 Int;
410typedef       unsigned int        UInt;
411typedef       long                Long;
412typedef       unsigned long       ULong;
413typedef       double              Double;
414
415// ====================================================================================================================
416// 64-bit integer type
417// ====================================================================================================================
418
419#ifdef _MSC_VER
420typedef       __int64             Int64;
421
422#if _MSC_VER <= 1200 // MS VC6
423typedef       __int64             UInt64;   // MS VC6 does not support unsigned __int64 to double conversion
424#else
425typedef       unsigned __int64    UInt64;
426#endif
427
428#else
429
430typedef       long long           Int64;
431typedef       unsigned long long  UInt64;
432
433#endif
434
435// ====================================================================================================================
436// Type definition
437// ====================================================================================================================
438
439typedef       UChar           Pxl;        ///< 8-bit pixel type
440typedef       Short           Pel;        ///< 16-bit pixel type
441typedef       Int             TCoeff;     ///< transform coefficient
442
443
444
445// ====================================================================================================================
446// Define Distortion Types
447// ====================================================================================================================
448typedef       Int64           RMDist;     ///< renderer model distortion
449
450#if HHI_VSO_DIST_INT
451typedef       Int              Dist;       ///< RDO distortion
452#define       RDO_DIST_MIN     MIN_INT
453#define       RDO_DIST_MAX     MAX_INT
454#else
455typedef       UInt             Dist;       ///< RDO distortion
456#define       RDO_DIST_MIN     0
457#define       RDO_DIST_MAX     MAX_UINT
458#endif
459
460/// parameters for adaptive loop filter
461class TComPicSym;
462
463#if MTK_SAO
464
465#define NUM_DOWN_PART 4
466
467enum QAOTypeLen
468{
469  SAO_EO_LEN    = 4,
470  SAO_EO_LEN_2D = 6,
471  SAO_BO_LEN    = 16
472};
473
474enum QAOType
475{
476  SAO_EO_0 = 0,
477  SAO_EO_1,
478  SAO_EO_2,
479  SAO_EO_3,
480  SAO_BO_0,
481  SAO_BO_1,
482  MAX_NUM_SAO_TYPE
483};
484
485typedef struct _SaoQTPart
486{
487  Bool        bEnableFlag;
488  Int         iBestType;
489  Int         iLength;
490  Int         iOffset[32];
491
492  Int         StartCUX;
493  Int         StartCUY;
494  Int         EndCUX;
495  Int         EndCUY;
496
497  Int         part_xs;
498  Int         part_xe;
499  Int         part_ys;
500  Int         part_ye;
501  Int         part_width;
502  Int         part_height;
503
504  Int         PartIdx;
505  Int         PartLevel;
506  Int         PartCol;
507  Int         PartRow;
508
509  Int         DownPartsIdx[NUM_DOWN_PART];
510  Int         UpPartIdx;
511
512  Int*        pSubPartList;
513  Int         iLengthSubPartList;
514
515  Bool        bBottomLevel;
516  Bool        bSplit;
517  //    Bool        bAvailable;
518
519  //---- encoder only start -----//
520  Int64***    pppiCorr; //[filt_type][corr_row][corr_col]
521  Int**       ppCoeff;  //[filt_type][coeff]
522  Bool        bProcessed;
523  Double      dMinCost;
524  Int64       iMinDist;
525  Int         iMinRate;
526  //---- encoder only end -----//
527} SAOQTPart;
528
529struct _SaoParam
530{
531  Bool       bSaoFlag;
532  SAOQTPart* psSaoPart;
533  Int        iMaxSplitLevel;
534  Int        iNumClass[MAX_NUM_SAO_TYPE];
535};
536
537#endif
538
539struct _AlfParam
540{
541  Int alf_flag;                           ///< indicates use of ALF
542  Int cu_control_flag;                    ///< coding unit based control flag
543  Int chroma_idc;                         ///< indicates use of ALF for chroma
544#if TI_ALF_MAX_VSIZE_7
545  Int tap;                                ///< number of filter taps - horizontal
546  Int tapV;                               ///< number of filter taps - vertical
547#else
548  Int tap;                                ///< number of filter taps
549#endif
550  Int num_coeff;                          ///< number of filter coefficients
551  Int *coeff;                             ///< filter coefficient array
552  Int tap_chroma;                         ///< number of filter taps (chroma)
553  Int num_coeff_chroma;                   ///< number of filter coefficients (chroma)
554  Int *coeff_chroma;                      ///< filter coefficient array (chroma)
555  //CodeAux related
556  Int realfiltNo;
557  Int filtNo;
558#if MQT_BA_RA
559  Int filterPattern[NO_VAR_BIN];
560#else
561  Int filterPattern[16];
562#endif
563  Int startSecondFilter;
564  Int noFilters;
565#if MQT_BA_RA
566  Int varIndTab[NO_VAR_BIN];
567#else
568  Int varIndTab[16];
569#endif
570
571  //Coeff send related
572  Int filters_per_group_diff; //this can be updated using codedVarBins
573  Int filters_per_group;
574#if MQT_BA_RA
575  Int codedVarBins[NO_VAR_BIN];
576#else
577  Int codedVarBins[16];
578#endif
579  Int forceCoeff0;
580  Int predMethod;
581  Int **coeffmulti;
582  Int minKStart;
583  Int maxScanVal;
584  Int kMinTab[42];
585#if TSB_ALF_HEADER
586  UInt num_alf_cu_flag;
587  UInt num_cus_in_frame;
588  UInt alf_max_depth;
589  UInt *alf_cu_flag;
590#endif
591
592#if MQT_BA_RA
593  Int alf_pcr_region_flag;
594#endif
595};
596
597/// parameters for deblocking filter
598typedef struct _LFCUParam
599{
600  Bool bInternalEdge;                     ///< indicates internal edge
601  Bool bLeftEdge;                         ///< indicates left edge
602  Bool bTopEdge;                          ///< indicates top edge
603} LFCUParam;
604
605/// parapeters for TENTM coefficient VLC
606typedef struct _LastCoeffStruct
607{
608  int level;
609  int last_pos;
610} LastCoeffStruct;
611
612// ====================================================================================================================
613// Enumeration
614// ====================================================================================================================
615
616/// supported slice type
617enum SliceType
618{
619  I_SLICE,
620  P_SLICE,
621  B_SLICE
622};
623
624/// supported partition shape
625enum PartSize
626{
627  SIZE_2Nx2N,           ///< symmetric motion partition,  2Nx2N
628  SIZE_2NxN,            ///< symmetric motion partition,  2Nx N
629  SIZE_Nx2N,            ///< symmetric motion partition,   Nx2N
630  SIZE_NxN,             ///< symmetric motion partition,   Nx N
631
632  SIZE_NONE = 15
633};
634
635//GT
636enum InterViewReference
637{
638  PREVVIEW = 0,
639  CURRVIEW = 1,
640  NEXTVIEW = 2
641};
642
643/// supported prediction type
644enum PredMode
645{
646  MODE_SKIP,            ///< SKIP mode
647  MODE_INTER,           ///< inter-prediction mode
648  MODE_INTRA,           ///< intra-prediction mode
649#if POZNAN_SYNTH
650  MODE_SYNTH,           ///< synth-mode
651#endif
652  MODE_NONE = 15
653};
654
655/// texture component type
656enum TextType
657{
658  TEXT_LUMA,            ///< luma
659  TEXT_CHROMA,          ///< chroma (U+V)
660  TEXT_CHROMA_U,        ///< chroma U
661  TEXT_CHROMA_V,        ///< chroma V
662  TEXT_ALL,             ///< Y+U+V
663  TEXT_NONE = 15
664};
665
666enum
667{
668  VIEWPOS_INVALID = -1,
669  VIEWPOS_LEFT    = 0,
670  VIEWPOS_RIGHT   = 1,
671  VIEWPOS_MERGED  = 2
672};
673
674/// reference list index
675enum RefPicList
676{
677  REF_PIC_LIST_0 = 0,   ///< reference list 0
678  REF_PIC_LIST_1 = 1,   ///< reference list 1
679#if DCM_COMB_LIST
680  REF_PIC_LIST_C = 2,   ///< combined reference list for uni-prediction in B-Slices
681#endif
682  REF_PIC_LIST_X = 100  ///< special mark
683};
684
685/// distortion function index
686enum DFunc
687{
688  DF_DEFAULT  = 0,
689  DF_SSE      = 1,      ///< general size SSE
690  DF_SSE4     = 2,      ///<   4xM SSE
691  DF_SSE8     = 3,      ///<   8xM SSE
692  DF_SSE16    = 4,      ///<  16xM SSE
693  DF_SSE32    = 5,      ///<  32xM SSE
694  DF_SSE64    = 6,      ///<  64xM SSE
695  DF_SSE16N   = 7,      ///< 16NxM SSE
696
697  DF_SAD      = 8,      ///< general size SAD
698  DF_SAD4     = 9,      ///<   4xM SAD
699  DF_SAD8     = 10,     ///<   8xM SAD
700  DF_SAD16    = 11,     ///<  16xM SAD
701  DF_SAD32    = 12,     ///<  32xM SAD
702  DF_SAD64    = 13,     ///<  64xM SAD
703  DF_SAD16N   = 14,     ///< 16NxM SAD
704
705  DF_SADS     = 15,     ///< general size SAD with step
706  DF_SADS4    = 16,     ///<   4xM SAD with step
707  DF_SADS8    = 17,     ///<   8xM SAD with step
708  DF_SADS16   = 18,     ///<  16xM SAD with step
709  DF_SADS32   = 19,     ///<  32xM SAD with step
710  DF_SADS64   = 20,     ///<  64xM SAD with step
711  DF_SADS16N  = 21,     ///< 16NxM SAD with step
712
713  DF_HADS     = 22,     ///< general size Hadamard with step
714  DF_HADS4    = 23,     ///<   4xM HAD with step
715  DF_HADS8    = 24,     ///<   8xM HAD with step
716  DF_HADS16   = 25,     ///<  16xM HAD with step
717  DF_HADS32   = 26,     ///<  32xM HAD with step
718  DF_HADS64   = 27,     ///<  64xM HAD with step
719  DF_HADS16N  = 28,     ///< 16NxM HAD with step
720
721  DF_SSE_FRAME = 33     ///< Frame-based SSE
722};
723
724
725/// index for SBAC based RD optimization
726enum CI_IDX
727{
728  CI_CURR_BEST = 0,     ///< best mode index
729  CI_NEXT_BEST,         ///< next best index
730  CI_TEMP_BEST,         ///< temporal index
731  CI_CHROMA_INTRA,      ///< chroma intra index
732  CI_QT_TRAFO_TEST,
733  CI_QT_TRAFO_ROOT,
734  CI_NUM,               ///< total number
735};
736
737/// motion vector predictor direction used in AMVP
738enum MVP_DIR
739{
740  MD_LEFT = 0,          ///< MVP of left block
741  MD_ABOVE,             ///< MVP of above block
742  MD_ABOVE_RIGHT,       ///< MVP of above right block
743  MD_BELOW_LEFT,        ///< MVP of below left block
744  MD_ABOVE_LEFT         ///< MVP of above left block
745};
746
747/// motion vector prediction mode used in AMVP
748enum AMVP_MODE
749{
750  AM_NONE = 0,          ///< no AMVP mode
751  AM_EXPL,              ///< explicit signalling of motion vector index
752};
753
754/// interpolation filter type
755enum InterpFilterType
756{
757  IPF_SAMSUNG_DIF_DEFAULT = 0,          ///< Samsung DCT-based filter
758  IPF_HHI_4TAP_MOMS,                    ///< HHI 4-tap MOMS filter
759  IPF_HHI_6TAP_MOMS,                    ///< HHI 6-tap MOMS filter
760  IPF_LAST
761};
762
763#if QC_MDCS
764/// coefficient scanning type used in ACS
765enum COEFF_SCAN_TYPE
766{
767  SCAN_ZIGZAG = 0,      ///< typical zigzag scan
768  SCAN_HOR,             ///< horizontal first scan
769  SCAN_VER              ///< vertical first scan
770};
771#endif //QC_MDCS
772
773#endif
774
Note: See TracBrowser for help on using the repository browser.