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

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

some bug fix on high level syntax
fixed some compiler warning issues under windows and linux

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