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

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

Poznan Tools

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