source: 3DVCSoftware/branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TypeDef.h @ 631

Last change on this file since 631 was 631, checked in by chang, 12 years ago

Enable the depth selection in E0163 for flexible coding order.
Add the checklist document.

  • Property svn:eol-style set to native
File size: 32.2 KB
Line 
1/* The copyright in this software is being made available under the BSD
2 * License, included below. This software may be subject to other third party
3 * and contributor rights, including patent rights, and no such rights are
4 * granted under this license. 
5 *
6 * Copyright (c) 2010-2013, ITU/ISO/IEC
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 *  * Redistributions of source code must retain the above copyright notice,
13 *    this list of conditions and the following disclaimer.
14 *  * Redistributions in binary form must reproduce the above copyright notice,
15 *    this list of conditions and the following disclaimer in the documentation
16 *    and/or other materials provided with the distribution.
17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18 *    be used to endorse or promote products derived from this software without
19 *    specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/** \file     TypeDef.h
35    \brief    Define basic types, new types and enumerations
36*/
37
38#ifndef _TYPEDEF__
39#define _TYPEDEF__
40
41//! \ingroup TLibCommon
42//! \{
43/////////////////////////////////////////////////////////////////////////////////////////
44///////////////////////////////// EXTENSION SELECTION /////////////////////////////////// 
45/////////////////////////////////////////////////////////////////////////////////////////
46
47/* HEVC_EXT might be defined by compiler/makefile options.
48   
49   Linux makefiles support the following settings:   
50   make             -> HEVC_EXT not defined   
51   make HEVC_EXT=0  -> H_MV=0 H_3D=0   --> plain HM
52   make HEVC_EXT=1  -> H_MV=1 H_3D=0   --> MV only
53   make HEVC_EXT=2  -> H_MV=1 H_3D=1   --> full 3D
54*/
55
56#ifndef HEVC_EXT
57#define HEVC_EXT                    2
58#endif
59
60#if ( HEVC_EXT < 0 )||( HEVC_EXT > 2 )
61#error HEVC_EXT must be in the range of 0 to 2, inclusive.
62#endif
63
64#define H_MV          ( HEVC_EXT != 0)
65#define H_3D          ( HEVC_EXT == 2)
66
67/////////////////////////////////////////////////////////////////////////////////////////
68///////////////////////////////////   MAJOR DEFINES   /////////////////////////////////// 
69/////////////////////////////////////////////////////////////////////////////////////////
70#if H_MV
71#define H_MV_ENC_DEC_TRAC                 1  //< CU/PU level tracking
72#endif
73
74#if H_3D
75#define H_3D_QTLPC                        1   // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068
76                                              // HHI_QTLPC_RAU_OFF_C0160     // JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units
77
78#define H_3D_VSO                          1   // VSO, View synthesis optimization, includes:
79                                              // HHI_VSO
80                                              // HHI_VSO_LS_TABLE_M23714 enable table base Lagrange multiplier optimization
81                                              // SAIT_VSO_EST_A0033, JCT3V-A0033 modification 3
82                                              // LGE_WVSO_A0119
83#define H_3D_NBDV                         1   // Neighboring block disparity derivation
84                                              // QC_JCT3V-A0097
85                                              // LGE_DVMCP_A0126
86                                              // LGE_DVMCP_MEM_REDUCTION_B0135     
87                                              // QC_SIMPLE_NBDV_B0047
88                                              // FIX_LGE_DVMCP_B0133
89                                              // QC_NBDV_LDB_FIX_C0055
90                                              // MTK_SAIT_TEMPORAL_FIRST_ORDER_C0141_C0097
91                                              // MTK_SIMPLIFY_DVTC_C0135           
92                                              // QC_CU_NBDV_D0181
93                                              // SEC_DEFAULT_DV_D0112
94                                              // MTK_DVMCP_FIX_E0172               1 // fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172
95#define H_3D_ARP                          1   // Advanced residual prediction (ARP), JCT3V-D0177
96#define H_3D_IC                           1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
97                                              // Unifying rounding offset, for IC part, JCT3V-D0135
98                                              // Full Pel Interpolation for Depth, HHI_FULL_PEL_DEPTH_MAP_MV_ACC
99
100#if H_3D_NBDV
101#define H_3D_NBDV_REF                     1   // Depth oriented neighboring block disparity derivation
102                                              // MTK_D0156
103                                              // MERL_D0166: Reference view selection in NBDV & Bi-VSP
104                                              // MERL_C0152: Basic VSP
105#endif
106
107#define H_3D_VSP                          1   // View synthesis prediction
108                                              // MERL_C0152: Basic VSP
109                                              // MERL_D0166: Reference view selection in NBDV & Bi-VSP
110                                              // MTK_D0105, LG_D0139: No VSP for depth
111                                              // QC_D0191: Clean up
112                                              // LG_D0092: Multiple VSP candidate allowed
113                                              // MTK_VSP_FIX_ALIGN_WD_E0172
114#define H_3D_IV_MERGE                     1   // Inter-view motion merge candidate
115                                              // HHI_INTER_VIEW_MOTION_PRED
116                                              // SAIT_IMPROV_MOTION_PRED_M24829, improved inter-view motion vector prediction
117                                              // QC_MRG_CANS_B0048             , JCT3V-B0048, B0086, B0069
118                                              // OL_DISMV_POS_B0069            , different pos for disparity MV candidate, B0069
119                                              // MTK_INTERVIEW_MERGE_A0049     , second part
120                                              // QC_AMVP_MRG_UNIFY_IVCAN_C0051     
121                                              // TEXTURE MERGING CANDIDATE     , JCT3V-C0137
122                                              // QC_INRIA_MTK_MRG_E0126           
123#define H_3D_TMVP                         1   // QC_TMVP_C0047
124                                              // Sony_M23639
125
126#define H_3D_DIM                          1   // DIM, Depth intra modes, includes:
127                                              // HHI_DMM_WEDGE_INTRA
128                                              // HHI_DMM_PRED_TEX
129                                              // FIX_WEDGE_NOFLOAT_D0036
130                                              // LGE_EDGE_INTRA_A0070
131                                              // LGE_DMM3_SIMP_C0044
132                                              // QC_DC_PREDICTOR_D0183
133                                              // HHI_DELTADC_DLT_D0035
134                                              // PKU_QC_DEPTH_INTRA_UNI_D0195
135                                              // RWTH_SDC_DLT_B0036
136                                              // INTEL_SDC64_D0193
137                                              // RWTH_SDC_CTX_SIMPL_D0032
138                                              // LGE_CONCATENATE_D0141
139                                              // FIX_SDC_ENC_RD_WVSO_D0163
140                                              // MTK_SAMPLE_BASED_SDC_D0110
141#define H_3D_FCO_E0163                          1   // Flexible coding order for 3D
142
143
144/////////////////////////////////////////////////////////////////////////////////////////
145///////////////////////////////////   HTM-8.0 INTEGRATIONS //////////////////////////////
146/////////////////////////////////////////////////////////////////////////////////////////
147
148#define SHARP_ILLUCOMP_REFINE_E0046       1
149#define MTK_FAST_TEXTURE_ENCODING_E0173   1   // Fast merge mode decision and early CU determination for texture component of dependent view, JCT3V-E0173
150#define MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170            1   // Progressive MV Compression, JCT3V-E0170
151#define LGE_INTER_SDC_E0156               1   // Enable inter SDC for depth coding
152
153#if H_3D_IC
154#define MTK_CLIPPING_ALIGN_IC_E0168       1   // To support simplify bi-prediction PU with identical motion checking, JCT3V-E0168
155#endif
156
157#if H_3D_NBDV
158#define NBDV_DEFAULT_VIEWIDX_BUGFIX       1  // Bug fix for invalid default view index for NBDV
159#define MTK_RVS_BUGFIX_E0172              1  // Bug fix for issues caused by reference view selection, JCT3V-E0172
160#define MTK_TEXTURE_MRGCAND_BUGFIX_E0182  1  // Bug fix for TEXTURE MERGING CANDIDATE     , JCT3V-E0182
161
162#if MTK_RVS_BUGFIX_E0172
163#define MTK_DIVMC_FIX_E0172               1 // fix the issue of derivation of disparity inter-view merge candidate, issue 5 in JCT3V-E0172
164#define MTK_NBDV_TN_FIX_E0172             1 // fix the issue of DV derivation from the temporal neighboring blocks, issue 7 in JCT3V-E0172
165#endif // MTK_RVS_BUGFIX_E0172
166
167#if H_3D_NBDV_REF
168#define NTT_DoNBDV_VECTOR_CLIP_E0141      1   // disparity vector clipping in DoNBDV, JCT3V-E0141 and JCT3V-E0209
169#define SEC_SIMPLIFIED_NBDV_E0142         1   // Simplified NBDV, JCT3V-E0142 and JCT3V-E0190
170#endif
171#endif // H_3D_NBDV
172
173#if H_3D_DIM
174#define SEC_DMM2_E0146_HHIFIX             1   // Removal of DMM2 from DMMs
175#define ZJU_DEPTH_INTRA_MODE_E0204        1   // Simplified Binarization for depth_intra_mode
176#define KWU_SDC_SIMPLE_DC_E0117           1   // Simplified DC calculation for SDC
177#define SCU_HS_DMM4_REMOVE_DIV_E0242      1   // DMM4 Division Removal
178#define SCU_HS_FAST_DEPTH_INTRA_E0238_HHIFIX     1   // Fast DMM and RBC Mode Selection
179#endif
180
181#if H_3D_VSP
182#define NTT_VSP_COMMON_E0207_E0208        1 // common part of JCT3V-E0207 and JCT3V-E0208
183#if NTT_VSP_COMMON_E0207_E0208
184#define NTT_VSP_DC_BUGFIX_E0208           1 // bugfix for sub-PU based DC in VSP, JCT3V-E0208
185#define NTT_VSP_VECTOR_CLIP_E0208         1 // disparity vector clipping on fetching depth map in VSP, JCT3V-E0208
186#define NTT_VSP_ADAPTIVE_SPLIT_E0207      1 // adaptive sub-PU partitioning in VSP, JCT3V-E0207
187#endif
188#endif
189
190#if H_3D_FCO_E0163
191#define H_3D_FCO_VSP_DONBDV_E0163               1   // Adaptive depth reference for flexible coding order
192#else
193#define H_3D_FCO_VSP_DONBDV_E0163               0   // Adaptive depth reference for flexible coding order
194#endif
195
196#define H_3D_REN_MAX_DEV_OUT              0  // Output maximal possible shift deviation
197
198/// FIXES
199#define H_3D_FIX_BVSP                     1  // DV from NBDV instead of DoNBDV should be used
200#define H_3D_FIX_TICKET_036               1  // fix for ticket #36
201#define H_3D_FIX_REN                      1  // fix of erroneous inpainting for renderer
202#define H_3D_FIX_REN_WARNING              1  // fix of warning related to camera parameter precision
203
204#define H_3D_FIX_UINT_WARNING             1  // explicit in VSD
205#endif // H_3D
206
207
208/////////////////////////////////////////////////////////////////////////////////////////
209///////////////////////////////////   HTM-8.1 INTEGRATIONS //////////////////////////////
210/////////////////////////////////////////////////////////////////////////////////////////
211
212// Please put HTM-8.1 Integration defines here, when possible
213
214
215/// FIXES
216#if H_MV
217#define H_MV_FIX_LID_PIC_HASH_SEI_T40                      1   // Fix wrong layer_id in decoded picture hash SEI
218#define H_MV5                                              1   // Update to MV-HEVC 5 HLS
219#endif
220/////////////////////////////////////////////////////////////////////////////////////////
221///////////////////////////////////   DERIVED DEFINES /////////////////////////////////// 
222/////////////////////////////////////////////////////////////////////////////////////////
223
224///// ***** VIEW SYNTHESIS OPTIMIZAION *********
225#if H_3D_VSO                                 
226#define H_3D_VSO_DIST_INT                 1   // Allow negative synthesized view distortion change
227#define H_3D_VSO_COLOR_PLANES             1   // Compute VSO distortion on color planes
228#define H_3D_VSO_EARLY_SKIP               1   // LGE_VSO_EARLY_SKIP_A0093, A0093 modification 4
229#define H_3D_VSO_RM_ASSERTIONS            0   // Output VSO assertions
230#define H_3D_VSO_SYNTH_DIST_OUT           0   // Output of synthesized view distortion instead of depth distortion in encoder output
231
232#define H_3D_VSO_FIX                      0   // This fix should be enabled after verification
233
234#endif
235////   ****** Neighbouring block-based Disparity Vector  *********
236#if H_3D_NBDV
237#if SEC_SIMPLIFIED_NBDV_E0142
238#define DVFROM_LEFT                       0
239#define DVFROM_ABOVE                      1
240#define IDV_CANDS                         2
241#else
242#define DVFROM_LEFTBELOW                  0
243#define DVFROM_LEFT                       1
244#define DVFROM_ABOVERIGHT                 2
245#define DVFROM_ABOVE                      3
246#define DVFROM_ABOVELEFT                  4
247#define IDV_CANDS                         5
248#endif
249#endif
250
251///// ***** ADVANCED INTERVIEW RESIDUAL PREDICTION *********
252#if H_3D_ARP
253#define H_3D_ARP_WFNR                     3
254#endif
255///// ***** DEPTH INTRA MODES *********
256#if H_3D_DIM
257#define H_3D_DIM_DMM                      1   // Depth Modeling Modes
258#define H_3D_DIM_RBC                      1   // Region Boundary Chain mode
259#define H_3D_DIM_SDC                      1   // Simplified Depth Coding method
260#define H_3D_DIM_DLT                      1   // Depth Lookup Table
261#define H_3D_DIM_ENC                      1   // Depth Intra encoder optimizations, includes:
262                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
263                                              // LG_ZEROINTRADEPTHRESI_A0087
264#if H_3D_DIM_SDC
265#define LGE_SDC_REMOVE_DC_E0158           1   // Removal of DC mode from SDC
266#endif
267#if H_3D_DIM_DMM
268#define LGE_PKU_DMM3_OVERLAP_E0159_HHIFIX 1   // Removal of overlap between DMM3 and DMM1
269#endif
270#endif
271
272///// ***** VIEW SYNTHESIS PREDICTION *********
273#if H_3D_VSP
274#define H_3D_VSP_BLOCKSIZE                4   // Supported values: 1, 2, and 4
275#if H_3D_VSP_BLOCKSIZE == 1
276#define H_3D_VSP_CONSTRAINED              1   // Constrained VSP @ 1x1
277#else
278#define H_3D_VSP_CONSTRAINED              0
279#endif
280
281#endif
282
283/////////////////////////////////////////////////////////////////////////////////////////
284///////////////////////////////////   HM RELATED DEFINES ////////////////////////////////
285/////////////////////////////////////////////////////////////////////////////////////////
286
287#define FIX1071 1 ///< fix for issue #1071
288
289#define MAX_NUM_PICS_IN_SOP           1024
290
291#define MAX_NESTING_NUM_OPS         1024
292#define MAX_NESTING_NUM_LAYER       64
293
294#define MAX_VPS_NUM_HRD_PARAMETERS                1
295#define MAX_VPS_OP_SETS_PLUS1                     1024
296#if H_MV
297#define MAX_VPS_NUH_LAYER_ID_PLUS1  64
298#define MAX_NUM_SCALABILITY_TYPES   16
299#define ENC_CFG_CONSOUT_SPACE       29           
300#else
301#define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1  1
302#endif
303
304#define RATE_CONTROL_LAMBDA_DOMAIN                  1  ///< JCTVC-K0103, rate control by R-lambda model
305#define M0036_RC_IMPROVEMENT                        1  ///< JCTVC-M0036, improvement for R-lambda model based rate control
306#define TICKET_1090_FIX                             1
307
308#define RC_FIX                                      1  /// suggested fix for M0036
309#define RATE_CONTROL_INTRA                          1  ///< JCTVC-M0257, rate control for intra
310
311#define MAX_CPB_CNT                     32  ///< Upper bound of (cpb_cnt_minus1 + 1)
312#define MAX_NUM_LAYER_IDS               64
313#if H_MV
314#define MAX_NUM_LAYERS                  64
315#define MAX_VPS_PROFILE_TIER_LEVEL      64
316#define MAX_VPS_ADD_OUTPUT_LAYER_SETS   1024
317#define MAX_VPS_OUTPUTLAYER_SETS        ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 )
318#endif
319
320#define COEF_REMAIN_BIN_REDUCTION        3 ///< indicates the level at which the VLC
321                                           ///< transitions from Golomb-Rice to TU+EG(k)
322
323#define CU_DQP_TU_CMAX 5                   ///< max number bins for truncated unary
324#define CU_DQP_EG_k 0                      ///< expgolomb order
325
326#define SBH_THRESHOLD                    4  ///< I0156: value of the fixed SBH controlling threshold
327 
328#define SEQUENCE_LEVEL_LOSSLESS           0  ///< H0530: used only for sequence or frame-level lossless coding
329
330#define DISABLING_CLIP_FOR_BIPREDME         1  ///< Ticket #175
331 
332#define C1FLAG_NUMBER               8 // maximum number of largerThan1 flag coded in one chunk :  16 in HM5
333#define C2FLAG_NUMBER               1 // maximum number of largerThan2 flag coded in one chunk:  16 in HM5
334
335#define REMOVE_SAO_LCU_ENC_CONSTRAINTS_3 1  ///< disable the encoder constraint that conditionally disable SAO for chroma for entire slice in interleaved mode
336
337#define SAO_ENCODING_CHOICE              1  ///< I0184: picture early termination
338#if SAO_ENCODING_CHOICE
339#define SAO_ENCODING_RATE                0.75
340#define SAO_ENCODING_CHOICE_CHROMA       1 ///< J0044: picture early termination Luma and Chroma are handled separately
341#if SAO_ENCODING_CHOICE_CHROMA
342#define SAO_ENCODING_RATE_CHROMA         0.5
343#endif
344#endif
345
346#define MAX_NUM_VPS                16
347#define MAX_NUM_SPS                16
348#define MAX_NUM_PPS                64
349
350
351
352#define WEIGHTED_CHROMA_DISTORTION  1   ///< F386: weighting of chroma for RDO
353#define RDOQ_CHROMA_LAMBDA          1   ///< F386: weighting of chroma for RDOQ
354#define SAO_CHROMA_LAMBDA           1   ///< F386: weighting of chroma for SAO
355
356#define MIN_SCAN_POS_CROSS          4
357
358#define FAST_BIT_EST                1   ///< G763: Table-based bit estimation for CABAC
359
360#define MLS_GRP_NUM                         64     ///< G644 : Max number of coefficient groups, max(16, 64)
361#define MLS_CG_SIZE                         4      ///< G644 : Coefficient group size of 4x4
362
363#define ADAPTIVE_QP_SELECTION               1      ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection
364#if ADAPTIVE_QP_SELECTION
365#define ARL_C_PRECISION                     7      ///< G382: 7-bit arithmetic precision
366#define LEVEL_RANGE                         30     ///< G382: max coefficient level in statistics collection
367#endif
368
369#define NS_HAD                               0
370
371#define HHI_RQT_INTRA_SPEEDUP             1           ///< tests one best mode with full rqt
372#define HHI_RQT_INTRA_SPEEDUP_MOD         0           ///< tests two best modes with full rqt
373
374#if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP
375#error
376#endif
377
378#define VERBOSE_RATE 0 ///< Print additional rate information in encoder
379
380#define AMVP_DECIMATION_FACTOR            4
381
382#define SCAN_SET_SIZE                     16
383#define LOG2_SCAN_SET_SIZE                4
384
385#define FAST_UDI_MAX_RDMODE_NUM               35          ///< maximum number of RD comparison in fast-UDI estimation loop
386
387#define ZERO_MVD_EST                          0           ///< Zero Mvd Estimation in normal mode
388
389#define NUM_INTRA_MODE 36
390#if !REMOVE_LM_CHROMA
391#define LM_CHROMA_IDX  35
392#endif
393
394#define WRITE_BACK                      1           ///< Enable/disable the encoder to replace the deltaPOC and Used by current from the config file with the values derived by the refIdc parameter.
395#define AUTO_INTER_RPS                  1           ///< Enable/disable the automatic generation of refIdc from the deltaPOC and Used by current from the config file.
396#define PRINT_RPS_INFO                  0           ///< Enable/disable the printing of bits used to send the RPS.
397                                                    // using one nearest frame as reference frame, and the other frames are high quality (POC%4==0) frames (1+X)
398                                                    // this should be done with encoder only decision
399                                                    // but because of the absence of reference frame management, the related code was hard coded currently
400
401#define RVM_VCEGAM10_M 4
402
403#define PLANAR_IDX             0
404#define VER_IDX                26                    // index for intra VERTICAL   mode
405#define HOR_IDX                10                    // index for intra HORIZONTAL mode
406#define DC_IDX                 1                     // index for intra DC mode
407#define NUM_CHROMA_MODE        5                     // total number of chroma modes
408#define DM_CHROMA_IDX          36                    // chroma mode index for derived from luma intra mode
409
410
411#define FAST_UDI_USE_MPM 1
412
413#define RDO_WITHOUT_DQP_BITS              0           ///< Disable counting dQP bits in RDO-based mode decision
414
415#define FULL_NBIT 0 ///< When enabled, compute costs using full sample bitdepth.  When disabled, compute costs as if it is 8-bit source video.
416#if FULL_NBIT
417# define DISTORTION_PRECISION_ADJUSTMENT(x) 0
418#else
419# define DISTORTION_PRECISION_ADJUSTMENT(x) (x)
420#endif
421
422#define LOG2_MAX_NUM_COLUMNS_MINUS1        7
423#define LOG2_MAX_NUM_ROWS_MINUS1           7
424#define LOG2_MAX_COLUMN_WIDTH              13
425#define LOG2_MAX_ROW_HEIGHT                13
426
427#define MATRIX_MULT                             0   // Brute force matrix multiplication instead of partial butterfly
428
429#define REG_DCT 65535
430
431#define AMP_SAD                               1           ///< dedicated SAD functions for AMP
432#define AMP_ENC_SPEEDUP                       1           ///< encoder only speed-up by AMP mode skipping
433#if AMP_ENC_SPEEDUP
434#define AMP_MRG                               1           ///< encoder only force merge for AMP partition (no motion search for AMP)
435#endif
436
437#define SCALING_LIST_OUTPUT_RESULT    0 //JCTVC-G880/JCTVC-G1016 quantization matrices
438
439#define CABAC_INIT_PRESENT_FLAG     1
440
441// ====================================================================================================================
442// Basic type redefinition
443// ====================================================================================================================
444
445typedef       void                Void;
446typedef       bool                Bool;
447
448typedef       char                Char;
449typedef       unsigned char       UChar;
450typedef       short               Short;
451typedef       unsigned short      UShort;
452typedef       int                 Int;
453typedef       unsigned int        UInt;
454typedef       double              Double;
455typedef       float               Float;
456
457// ====================================================================================================================
458// 64-bit integer type
459// ====================================================================================================================
460
461#ifdef _MSC_VER
462typedef       __int64             Int64;
463
464#if _MSC_VER <= 1200 // MS VC6
465typedef       __int64             UInt64;   // MS VC6 does not support unsigned __int64 to double conversion
466#else
467typedef       unsigned __int64    UInt64;
468#endif
469
470#else
471
472typedef       long long           Int64;
473typedef       unsigned long long  UInt64;
474
475#endif
476
477// ====================================================================================================================
478// Type definition
479// ====================================================================================================================
480
481typedef       UChar           Pxl;        ///< 8-bit pixel type
482typedef       Short           Pel;        ///< 16-bit pixel type
483typedef       Int             TCoeff;     ///< transform coefficient
484
485#if H_3D_VSO
486// ====================================================================================================================
487// Define Distortion Types
488// ====================================================================================================================
489typedef       Int64           RMDist;     ///< renderer model distortion
490
491#if H_3D_VSO_DIST_INT
492#if H_3D_FIX_TICKET_036
493typedef       Int64            Dist;       ///< RDO distortion
494#else
495typedef       Int              Dist;       ///< RDO distortion
496#endif
497typedef       Int64            Dist64; 
498#define       RDO_DIST_MIN     MIN_INT
499#define       RDO_DIST_MAX     MAX_INT
500#else
501typedef       UInt             Dist;       ///< RDO distortion
502typedef       UInt64           Dist; 
503#define       RDO_DIST_MIN     0
504#define       RDO_DIST_MAX     MAX_UINT
505#endif
506#endif
507/// parameters for adaptive loop filter
508class TComPicSym;
509
510// Slice / Slice segment encoding modes
511enum SliceConstraint
512{
513  NO_SLICES              = 0,          ///< don't use slices / slice segments
514  FIXED_NUMBER_OF_LCU    = 1,          ///< Limit maximum number of largest coding tree blocks in a slice / slice segments
515  FIXED_NUMBER_OF_BYTES  = 2,          ///< Limit maximum number of bytes in a slice / slice segment
516  FIXED_NUMBER_OF_TILES  = 3,          ///< slices / slice segments span an integer number of tiles
517};
518
519#define NUM_DOWN_PART 4
520
521enum SAOTypeLen
522{
523  SAO_EO_LEN    = 4, 
524  SAO_BO_LEN    = 4,
525  SAO_MAX_BO_CLASSES = 32
526};
527
528enum SAOType
529{
530  SAO_EO_0 = 0, 
531  SAO_EO_1,
532  SAO_EO_2, 
533  SAO_EO_3,
534  SAO_BO,
535  MAX_NUM_SAO_TYPE
536};
537
538typedef struct _SaoQTPart
539{
540  Int         iBestType;
541  Int         iLength;
542  Int         subTypeIdx ;                 ///< indicates EO class or BO band position
543  Int         iOffset[4];
544  Int         StartCUX;
545  Int         StartCUY;
546  Int         EndCUX;
547  Int         EndCUY;
548
549  Int         PartIdx;
550  Int         PartLevel;
551  Int         PartCol;
552  Int         PartRow;
553
554  Int         DownPartsIdx[NUM_DOWN_PART];
555  Int         UpPartIdx;
556
557  Bool        bSplit;
558
559  //---- encoder only start -----//
560  Bool        bProcessed;
561  Double      dMinCost;
562  Int64       iMinDist;
563  Int         iMinRate;
564  //---- encoder only end -----//
565} SAOQTPart;
566
567typedef struct _SaoLcuParam
568{
569  Bool       mergeUpFlag;
570  Bool       mergeLeftFlag;
571  Int        typeIdx;
572  Int        subTypeIdx;                  ///< indicates EO class or BO band position
573  Int        offset[4];
574  Int        partIdx;
575  Int        partIdxTmp;
576  Int        length;
577} SaoLcuParam;
578
579struct SAOParam
580{
581  Bool       bSaoFlag[2];
582  SAOQTPart* psSaoPart[3];
583  Int        iMaxSplitLevel;
584  Bool         oneUnitFlag[3];
585  SaoLcuParam* saoLcuParam[3];
586  Int          numCuInHeight;
587  Int          numCuInWidth;
588  ~SAOParam();
589};
590
591/// parameters for deblocking filter
592typedef struct _LFCUParam
593{
594  Bool bInternalEdge;                     ///< indicates internal edge
595  Bool bLeftEdge;                         ///< indicates left edge
596  Bool bTopEdge;                          ///< indicates top edge
597} LFCUParam;
598
599// ====================================================================================================================
600// Enumeration
601// ====================================================================================================================
602
603/// supported slice type
604enum SliceType
605{
606  B_SLICE,
607  P_SLICE,
608  I_SLICE
609};
610
611/// chroma formats (according to semantics of chroma_format_idc)
612enum ChromaFormat
613{
614  CHROMA_400  = 0,
615  CHROMA_420  = 1,
616  CHROMA_422  = 2,
617  CHROMA_444  = 3
618};
619
620/// supported partition shape
621enum PartSize
622{
623  SIZE_2Nx2N,           ///< symmetric motion partition,  2Nx2N
624  SIZE_2NxN,            ///< symmetric motion partition,  2Nx N
625  SIZE_Nx2N,            ///< symmetric motion partition,   Nx2N
626  SIZE_NxN,             ///< symmetric motion partition,   Nx N
627  SIZE_2NxnU,           ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)
628  SIZE_2NxnD,           ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2)
629  SIZE_nLx2N,           ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N
630  SIZE_nRx2N,           ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N
631  SIZE_NONE = 15
632};
633
634/// supported prediction type
635enum PredMode
636{
637  MODE_INTER,           ///< inter-prediction mode
638  MODE_INTRA,           ///< intra-prediction mode
639  MODE_NONE = 15
640};
641
642/// texture component type
643enum TextType
644{
645  TEXT_LUMA,            ///< luma
646  TEXT_CHROMA,          ///< chroma (U+V)
647  TEXT_CHROMA_U,        ///< chroma U
648  TEXT_CHROMA_V,        ///< chroma V
649  TEXT_ALL,             ///< Y+U+V
650  TEXT_NONE = 15
651};
652
653/// reference list index
654enum RefPicList
655{
656  REF_PIC_LIST_0 = 0,   ///< reference list 0
657  REF_PIC_LIST_1 = 1,   ///< reference list 1
658  REF_PIC_LIST_X = 100  ///< special mark
659};
660
661/// distortion function index
662enum DFunc
663{
664  DF_DEFAULT  = 0,
665  DF_SSE      = 1,      ///< general size SSE
666  DF_SSE4     = 2,      ///<   4xM SSE
667  DF_SSE8     = 3,      ///<   8xM SSE
668  DF_SSE16    = 4,      ///<  16xM SSE
669  DF_SSE32    = 5,      ///<  32xM SSE
670  DF_SSE64    = 6,      ///<  64xM SSE
671  DF_SSE16N   = 7,      ///< 16NxM SSE
672 
673  DF_SAD      = 8,      ///< general size SAD
674  DF_SAD4     = 9,      ///<   4xM SAD
675  DF_SAD8     = 10,     ///<   8xM SAD
676  DF_SAD16    = 11,     ///<  16xM SAD
677  DF_SAD32    = 12,     ///<  32xM SAD
678  DF_SAD64    = 13,     ///<  64xM SAD
679  DF_SAD16N   = 14,     ///< 16NxM SAD
680 
681  DF_SADS     = 15,     ///< general size SAD with step
682  DF_SADS4    = 16,     ///<   4xM SAD with step
683  DF_SADS8    = 17,     ///<   8xM SAD with step
684  DF_SADS16   = 18,     ///<  16xM SAD with step
685  DF_SADS32   = 19,     ///<  32xM SAD with step
686  DF_SADS64   = 20,     ///<  64xM SAD with step
687  DF_SADS16N  = 21,     ///< 16NxM SAD with step
688 
689  DF_HADS     = 22,     ///< general size Hadamard with step
690  DF_HADS4    = 23,     ///<   4xM HAD with step
691  DF_HADS8    = 24,     ///<   8xM HAD with step
692  DF_HADS16   = 25,     ///<  16xM HAD with step
693  DF_HADS32   = 26,     ///<  32xM HAD with step
694  DF_HADS64   = 27,     ///<  64xM HAD with step
695  DF_HADS16N  = 28,     ///< 16NxM HAD with step
696#if H_3D_VSO
697  DF_VSD      = 29,      ///< general size VSD
698  DF_VSD4     = 30,      ///<   4xM VSD
699  DF_VSD8     = 31,      ///<   8xM VSD
700  DF_VSD16    = 32,      ///<  16xM VSD
701  DF_VSD32    = 33,      ///<  32xM VSD
702  DF_VSD64    = 34,      ///<  64xM VSD
703  DF_VSD16N   = 35,      ///< 16NxM VSD
704#endif
705
706#if AMP_SAD
707  DF_SAD12    = 43,
708  DF_SAD24    = 44,
709  DF_SAD48    = 45,
710
711  DF_SADS12   = 46,
712  DF_SADS24   = 47,
713  DF_SADS48   = 48,
714
715  DF_SSE_FRAME = 50     ///< Frame-based SSE
716#else
717  DF_SSE_FRAME = 33     ///< Frame-based SSE
718#endif
719};
720
721/// index for SBAC based RD optimization
722enum CI_IDX
723{
724  CI_CURR_BEST = 0,     ///< best mode index
725  CI_NEXT_BEST,         ///< next best index
726  CI_TEMP_BEST,         ///< temporal index
727  CI_CHROMA_INTRA,      ///< chroma intra index
728  CI_QT_TRAFO_TEST,
729  CI_QT_TRAFO_ROOT,
730  CI_NUM,               ///< total number
731};
732
733/// motion vector predictor direction used in AMVP
734enum MVP_DIR
735{
736  MD_LEFT = 0,          ///< MVP of left block
737  MD_ABOVE,             ///< MVP of above block
738  MD_ABOVE_RIGHT,       ///< MVP of above right block
739  MD_BELOW_LEFT,        ///< MVP of below left block
740  MD_ABOVE_LEFT         ///< MVP of above left block
741};
742
743/// coefficient scanning type used in ACS
744enum COEFF_SCAN_TYPE
745{
746  SCAN_DIAG = 0,         ///< up-right diagonal scan
747  SCAN_HOR,              ///< horizontal first scan
748  SCAN_VER               ///< vertical first scan
749};
750
751namespace Profile
752{
753  enum Name
754  {
755    NONE = 0,
756    MAIN = 1,
757    MAIN10 = 2,
758    MAINSTILLPICTURE = 3,
759#if H_MV
760    MAINSTEREO = 4,
761    MAINMULTIVIEW = 5,
762#if H_3D
763    MAIN3D = 6, 
764#endif
765#endif
766  };
767}
768
769namespace Level
770{
771  enum Tier
772  {
773    MAIN = 0,
774    HIGH = 1,
775  };
776
777  enum Name
778  {
779    NONE     = 0,
780    LEVEL1   = 30,
781    LEVEL2   = 60,
782    LEVEL2_1 = 63,
783    LEVEL3   = 90,
784    LEVEL3_1 = 93,
785    LEVEL4   = 120,
786    LEVEL4_1 = 123,
787    LEVEL5   = 150,
788    LEVEL5_1 = 153,
789    LEVEL5_2 = 156,
790    LEVEL6   = 180,
791    LEVEL6_1 = 183,
792    LEVEL6_2 = 186,
793  };
794}
795//! \}
796
797#if H_MV
798/// scalability types
799  enum ScalabilityType
800  {
801#if H_MV5
802#if H_3D
803    DEPTH_ID = 0,   
804#endif   
805    VIEW_ORDER_INDEX  = 1,
806#else
807    VIEW_ID  = 0,
808#if H_3D
809    DEPTH_ID = 1,   
810#endif   
811#endif
812  };
813#endif
814#if H_3D
815  // Renderer
816  enum BlenMod
817  {
818    BLEND_NONE  = -1,
819    BLEND_AVRG  = 0,
820    BLEND_LEFT  = 1,
821    BLEND_RIGHT = 2,
822    BLEND_GEN   =  3
823  };
824
825 
826  enum
827  {
828    VIEWPOS_INVALID = -1,
829    VIEWPOS_LEFT    = 0,
830    VIEWPOS_RIGHT   = 1,
831    VIEWPOS_MERGED  = 2
832  };
833
834
835#endif
836#endif
Note: See TracBrowser for help on using the repository browser.