source: 3DVCSoftware/branches/0.2-poznan-univ/source/Lib/TLibCommon/TypeDef.h @ 13

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

SVN merge bug Fix

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