Mercurial > hg > forks > libbpg
comparison jctvc/TLibCommon/TypeDef.h @ 0:772086c29cc7
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 16 Nov 2016 11:16:33 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:772086c29cc7 |
---|---|
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-2014, 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 #include <vector> | |
42 | |
43 //! \ingroup TLibCommon | |
44 //! \{ | |
45 | |
46 // ==================================================================================================================== | |
47 // Debugging | |
48 // ==================================================================================================================== | |
49 | |
50 // #define DEBUG_STRING // enable to print out final decision debug info at encoder and decoder | |
51 // #define DEBUG_ENCODER_SEARCH_BINS // enable to print out each bin as it is coded during encoder search | |
52 // #define DEBUG_CABAC_BINS // enable to print out each bin as it is coded during final encode and decode | |
53 // #define DEBUG_INTRA_SEARCH_COSTS // enable to print out the cost for each mode during encoder search | |
54 // #define DEBUG_TRANSFORM_AND_QUANTISE // enable to print out each TU as it passes through the transform-quantise-dequantise-inverseTransform process | |
55 | |
56 #ifdef DEBUG_STRING | |
57 #define DEBUG_STRING_PASS_INTO(name) , name | |
58 #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) , (exp==0)?0:name | |
59 #define DEBUG_STRING_FN_DECLARE(name) , std::string &name | |
60 #define DEBUG_STRING_FN_DECLAREP(name) , std::string *name | |
61 #define DEBUG_STRING_NEW(name) std::string name; | |
62 #define DEBUG_STRING_OUTPUT(os, name) os << name; | |
63 #define DEBUG_STRING_APPEND(str1, str2) str1+=str2; | |
64 #define DEBUG_STRING_SWAP(str1, str2) str1.swap(str2); | |
65 #define DEBUG_STRING_CHANNEL_CONDITION(compID) (true) | |
66 #include <sstream> | |
67 #include <iomanip> | |
68 #else | |
69 #define DEBUG_STRING_PASS_INTO(name) | |
70 #define DEBUG_STRING_PASS_INTO_OPTIONAL(name, exp) | |
71 #define DEBUG_STRING_FN_DECLARE(name) | |
72 #define DEBUG_STRING_FN_DECLAREP(name) | |
73 #define DEBUG_STRING_NEW(name) | |
74 #define DEBUG_STRING_OUTPUT(os, name) | |
75 #define DEBUG_STRING_APPEND(str1, str2) | |
76 #define DEBUG_STRING_SWAP(srt1, str2) | |
77 #define DEBUG_STRING_CHANNEL_CONDITION(compID) | |
78 #endif | |
79 | |
80 | |
81 // ==================================================================================================================== | |
82 // Tool Switches | |
83 // ==================================================================================================================== | |
84 | |
85 #define HARMONIZE_GOP_FIRST_FIELD_COUPLE 1 | |
86 #define EFFICIENT_FIELD_IRAP 1 | |
87 #define ALLOW_RECOVERY_POINT_AS_RAP 1 | |
88 #define BUGFIX_INTRAPERIOD 1 | |
89 | |
90 #define SAO_ENCODE_ALLOW_USE_PREDEBLOCK 1 | |
91 | |
92 #define TILE_SIZE_CHECK 1 | |
93 | |
94 #define MAX_NUM_PICS_IN_SOP 1024 | |
95 | |
96 #define MAX_NESTING_NUM_OPS 1024 | |
97 #define MAX_NESTING_NUM_LAYER 64 | |
98 | |
99 #define MAX_VPS_NUM_HRD_PARAMETERS 1 | |
100 #define MAX_VPS_OP_SETS_PLUS1 1024 | |
101 #define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1 | |
102 | |
103 #define MAXIMUM_INTRA_FILTERED_WIDTH 16 | |
104 #define MAXIMUM_INTRA_FILTERED_HEIGHT 16 | |
105 | |
106 #define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1) | |
107 #define MAX_NUM_LAYER_IDS 64 | |
108 | |
109 #define COEF_REMAIN_BIN_REDUCTION 3 ///< indicates the level at which the VLC | |
110 ///< transitions from Golomb-Rice to TU+EG(k) | |
111 | |
112 #define CU_DQP_TU_CMAX 5 ///< max number bins for truncated unary | |
113 #define CU_DQP_EG_k 0 ///< expgolomb order | |
114 | |
115 #define SBH_THRESHOLD 4 ///< I0156: value of the fixed SBH controlling threshold | |
116 | |
117 #define DISABLING_CLIP_FOR_BIPREDME 1 ///< Ticket #175 | |
118 | |
119 #define C1FLAG_NUMBER 8 // maximum number of largerThan1 flag coded in one chunk : 16 in HM5 | |
120 #define C2FLAG_NUMBER 1 // maximum number of largerThan2 flag coded in one chunk: 16 in HM5 | |
121 | |
122 #define SAO_ENCODING_CHOICE 1 ///< I0184: picture early termination | |
123 #if SAO_ENCODING_CHOICE | |
124 #define SAO_ENCODING_RATE 0.75 | |
125 #define SAO_ENCODING_CHOICE_CHROMA 1 ///< J0044: picture early termination Luma and Chroma are handled separately | |
126 #if SAO_ENCODING_CHOICE_CHROMA | |
127 #define SAO_ENCODING_RATE_CHROMA 0.5 | |
128 #endif | |
129 #endif | |
130 | |
131 #define MAX_NUM_SAO_OFFSETS 4 | |
132 | |
133 #define MAX_NUM_VPS 16 | |
134 #define MAX_NUM_SPS 16 | |
135 #define MAX_NUM_PPS 64 | |
136 | |
137 #define RDOQ_CHROMA_LAMBDA 1 ///< F386: weighting of chroma for RDOQ | |
138 | |
139 #define MIN_SCAN_POS_CROSS 4 | |
140 | |
141 #define FAST_BIT_EST 1 ///< G763: Table-based bit estimation for CABAC | |
142 | |
143 #define MLS_GRP_NUM 64 ///< G644 : Max number of coefficient groups, max(16, 64) | |
144 #define MLS_CG_LOG2_WIDTH 2 | |
145 #define MLS_CG_LOG2_HEIGHT 2 | |
146 #define MLS_CG_SIZE (MLS_CG_LOG2_WIDTH + MLS_CG_LOG2_HEIGHT) ///< G644 : Coefficient group size of 4x4 | |
147 | |
148 #define ADAPTIVE_QP_SELECTION 1 ///< G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection | |
149 #if ADAPTIVE_QP_SELECTION | |
150 #define ARL_C_PRECISION 7 ///< G382: 7-bit arithmetic precision | |
151 #define LEVEL_RANGE 30 ///< G382: max coefficient level in statistics collection | |
152 #endif | |
153 | |
154 #define HHI_RQT_INTRA_SPEEDUP 1 ///< tests one best mode with full rqt | |
155 #define HHI_RQT_INTRA_SPEEDUP_MOD 0 ///< tests two best modes with full rqt | |
156 | |
157 #if HHI_RQT_INTRA_SPEEDUP_MOD && !HHI_RQT_INTRA_SPEEDUP | |
158 #error | |
159 #endif | |
160 | |
161 #define VERBOSE_RATE 0 ///< Print additional rate information in encoder | |
162 | |
163 #define AMVP_DECIMATION_FACTOR 4 | |
164 | |
165 #define SCAN_SET_SIZE 16 | |
166 #define LOG2_SCAN_SET_SIZE 4 | |
167 | |
168 #define FAST_UDI_MAX_RDMODE_NUM 35 ///< maximum number of RD comparison in fast-UDI estimation loop | |
169 | |
170 #define NUM_INTRA_MODE 36 | |
171 | |
172 #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. | |
173 #define AUTO_INTER_RPS 1 ///< Enable/disable the automatic generation of refIdc from the deltaPOC and Used by current from the config file. | |
174 #define PRINT_RPS_INFO 0 ///< Enable/disable the printing of bits used to send the RPS. | |
175 // using one nearest frame as reference frame, and the other frames are high quality (POC%4==0) frames (1+X) | |
176 // this should be done with encoder only decision | |
177 // but because of the absence of reference frame management, the related code was hard coded currently | |
178 | |
179 #define RVM_VCEGAM10_M 4 | |
180 | |
181 #define PLANAR_IDX 0 | |
182 #define VER_IDX 26 // index for intra VERTICAL mode | |
183 #define HOR_IDX 10 // index for intra HORIZONTAL mode | |
184 #define DC_IDX 1 // index for intra DC mode | |
185 #define NUM_CHROMA_MODE 5 // total number of chroma modes | |
186 #define DM_CHROMA_IDX 36 // chroma mode index for derived from luma intra mode | |
187 #define INVALID_MODE_IDX (NUM_INTRA_MODE+1) // value used to indicate an invalid intra mode | |
188 #define STOPCHROMASEARCH_MODE_IDX (INVALID_MODE_IDX+1) // value used to signal the end of a chroma mode search | |
189 | |
190 #define MDCS_ANGLE_LIMIT 4 ///< (default 4) 0 = Horizontal/vertical only, 1 = Horizontal/vertical +/- 1, 2 = Horizontal/vertical +/- 2 etc... | |
191 #define MDCS_MAXIMUM_WIDTH 8 ///< (default 8) (measured in pixels) TUs with width greater than this can only use diagonal scan | |
192 #define MDCS_MAXIMUM_HEIGHT 8 ///< (default 8) (measured in pixels) TUs with height greater than this can only use diagonal scan | |
193 | |
194 #define FAST_UDI_USE_MPM 1 | |
195 | |
196 #define RDO_WITHOUT_DQP_BITS 0 ///< Disable counting dQP bits in RDO-based mode decision | |
197 | |
198 #define LOG2_MAX_NUM_COLUMNS_MINUS1 7 | |
199 #define LOG2_MAX_NUM_ROWS_MINUS1 7 | |
200 #define LOG2_MAX_COLUMN_WIDTH 13 | |
201 #define LOG2_MAX_ROW_HEIGHT 13 | |
202 | |
203 #define MATRIX_MULT 0 // Brute force matrix multiplication instead of partial butterfly | |
204 | |
205 #define AMP_SAD 1 ///< dedicated SAD functions for AMP | |
206 #define AMP_ENC_SPEEDUP 1 ///< encoder only speed-up by AMP mode skipping | |
207 #if AMP_ENC_SPEEDUP | |
208 #define AMP_MRG 1 ///< encoder only force merge for AMP partition (no motion search for AMP) | |
209 #endif | |
210 | |
211 #define CABAC_INIT_PRESENT_FLAG 1 | |
212 | |
213 #define LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS 4 | |
214 #define CHROMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS 8 | |
215 | |
216 #define MAX_NUM_LONG_TERM_REF_PICS 33 | |
217 | |
218 #define DECODER_CHECK_SUBSTREAM_AND_SLICE_TRAILING_BYTES 1 | |
219 | |
220 #define RD_TEST_SAO_DISABLE_AT_PICTURE_LEVEL 0 ///< 1 = tests whether SAO should be disabled at the picture level, 0 (default) = does not apply this additional test | |
221 | |
222 #define O0043_BEST_EFFORT_DECODING 0 ///< 0 (default) = disable code related to best effort decoding, 1 = enable code relating to best effort decoding [ decode-side only ]. | |
223 | |
224 // Cost mode support | |
225 | |
226 #define LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP 0 ///< QP to use for lossless coding. | |
227 #define LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME 4 ///< QP' to use for mixed_lossy_lossless coding. | |
228 | |
229 // Debug support | |
230 | |
231 #define ENVIRONMENT_VARIABLE_DEBUG_AND_TEST 0 ///< When enabled, allows control of debug modifications via environment variables | |
232 | |
233 #define PRINT_MACRO_VALUES 1 ///< When enabled, the encoder prints out a list of the non-environment-variable controlled macros and their values on startup | |
234 | |
235 // TODO: rename this macro to DECODER_DEBUG_BIT_STATISTICS (may currently cause merge issues with other branches) | |
236 // This can be enabled by the makefile | |
237 #ifndef RExt__DECODER_DEBUG_BIT_STATISTICS | |
238 #define RExt__DECODER_DEBUG_BIT_STATISTICS 0 ///< 0 (default) = decoder reports as normal, 1 = decoder produces bit usage statistics (will impact decoder run time by up to ~10%) | |
239 #endif | |
240 | |
241 // This can be enabled by the makefile | |
242 #ifndef RExt__HIGH_BIT_DEPTH_SUPPORT | |
243 #define RExt__HIGH_BIT_DEPTH_SUPPORT 0 ///< 0 (default) use data type definitions for 8-10 bit video, 1 = use larger data types to allow for up to 16-bit video (originally developed as part of N0188) | |
244 #endif | |
245 | |
246 #define RExt__GOLOMB_RICE_ADAPTATION_STATISTICS_SETS 4 | |
247 #define RExt__GOLOMB_RICE_INCREMENT_DIVISOR 4 | |
248 | |
249 #define RExt__PREDICTION_WEIGHTING_ANALYSIS_DC_PRECISION 0 ///< Additional fixed bit precision used during encoder-side weighting prediction analysis. Currently only used when high_precision_prediction_weighting_flag is set, for backwards compatibility reasons. | |
250 | |
251 #define MAX_TIMECODE_SEI_SETS 3 ///< Maximum number of time sets | |
252 | |
253 | |
254 //------------------------------------------------ | |
255 // Derived macros | |
256 //------------------------------------------------ | |
257 | |
258 #if RExt__HIGH_BIT_DEPTH_SUPPORT | |
259 #define FULL_NBIT 1 ///< When enabled, use distortion measure derived from all bits of source data, otherwise discard (bitDepth - 8) least-significant bits of distortion | |
260 #define RExt__HIGH_PRECISION_FORWARD_TRANSFORM 1 ///< 0 use original 6-bit transform matrices for both forward and inverse transform, 1 (default) = use original matrices for inverse transform and high precision matrices for forward transform | |
261 #else | |
262 #define FULL_NBIT 0 ///< When enabled, use distortion measure derived from all bits of source data, otherwise discard (bitDepth - 8) least-significant bits of distortion | |
263 #define RExt__HIGH_PRECISION_FORWARD_TRANSFORM 0 ///< 0 (default) use original 6-bit transform matrices for both forward and inverse transform, 1 = use original matrices for inverse transform and high precision matrices for forward transform | |
264 #endif | |
265 | |
266 #if FULL_NBIT | |
267 # define DISTORTION_PRECISION_ADJUSTMENT(x) 0 | |
268 #else | |
269 # define DISTORTION_PRECISION_ADJUSTMENT(x) (x) | |
270 #endif | |
271 | |
272 | |
273 //------------------------------------------------ | |
274 // Error checks | |
275 //------------------------------------------------ | |
276 | |
277 #if ((RExt__HIGH_PRECISION_FORWARD_TRANSFORM != 0) && (RExt__HIGH_BIT_DEPTH_SUPPORT == 0)) | |
278 #error ERROR: cannot enable RExt__HIGH_PRECISION_FORWARD_TRANSFORM without RExt__HIGH_BIT_DEPTH_SUPPORT | |
279 #endif | |
280 | |
281 // ==================================================================================================================== | |
282 // Basic type redefinition | |
283 // ==================================================================================================================== | |
284 | |
285 typedef void Void; | |
286 typedef bool Bool; | |
287 | |
288 #ifdef __arm__ | |
289 typedef signed char Char; | |
290 #else | |
291 typedef char Char; | |
292 #endif | |
293 typedef unsigned char UChar; | |
294 typedef short Short; | |
295 typedef unsigned short UShort; | |
296 typedef int Int; | |
297 typedef unsigned int UInt; | |
298 typedef double Double; | |
299 typedef float Float; | |
300 | |
301 | |
302 // ==================================================================================================================== | |
303 // 64-bit integer type | |
304 // ==================================================================================================================== | |
305 | |
306 #ifdef _MSC_VER | |
307 typedef __int64 Int64; | |
308 | |
309 #if _MSC_VER <= 1200 // MS VC6 | |
310 typedef __int64 UInt64; // MS VC6 does not support unsigned __int64 to double conversion | |
311 #else | |
312 typedef unsigned __int64 UInt64; | |
313 #endif | |
314 | |
315 #else | |
316 | |
317 typedef long long Int64; | |
318 typedef unsigned long long UInt64; | |
319 | |
320 #endif | |
321 | |
322 | |
323 // ==================================================================================================================== | |
324 // Enumeration | |
325 // ==================================================================================================================== | |
326 | |
327 enum RDPCMMode | |
328 { | |
329 RDPCM_OFF = 0, | |
330 RDPCM_HOR = 1, | |
331 RDPCM_VER = 2, | |
332 NUMBER_OF_RDPCM_MODES = 3 | |
333 }; | |
334 | |
335 enum RDPCMSignallingMode | |
336 { | |
337 RDPCM_SIGNAL_IMPLICIT = 0, | |
338 RDPCM_SIGNAL_EXPLICIT = 1, | |
339 NUMBER_OF_RDPCM_SIGNALLING_MODES = 2 | |
340 }; | |
341 | |
342 /// supported slice type | |
343 enum SliceType | |
344 { | |
345 B_SLICE = 0, | |
346 P_SLICE = 1, | |
347 I_SLICE = 2, | |
348 NUMBER_OF_SLICE_TYPES = 3 | |
349 }; | |
350 | |
351 /// chroma formats (according to semantics of chroma_format_idc) | |
352 enum ChromaFormat | |
353 { | |
354 CHROMA_400 = 0, | |
355 CHROMA_420 = 1, | |
356 CHROMA_422 = 2, | |
357 CHROMA_444 = 3, | |
358 NUM_CHROMA_FORMAT = 4 | |
359 }; | |
360 | |
361 enum ChannelType | |
362 { | |
363 CHANNEL_TYPE_LUMA = 0, | |
364 CHANNEL_TYPE_CHROMA = 1, | |
365 MAX_NUM_CHANNEL_TYPE = 2 | |
366 }; | |
367 | |
368 enum ComponentID | |
369 { | |
370 COMPONENT_Y = 0, | |
371 COMPONENT_Cb = 1, | |
372 COMPONENT_Cr = 2, | |
373 MAX_NUM_COMPONENT = 3 | |
374 }; | |
375 | |
376 enum InputColourSpaceConversion // defined in terms of conversion prior to input of encoder. | |
377 { | |
378 IPCOLOURSPACE_UNCHANGED = 0, | |
379 IPCOLOURSPACE_YCbCrtoYCrCb = 1, // Mainly used for debug! | |
380 IPCOLOURSPACE_YCbCrtoYYY = 2, // Mainly used for debug! | |
381 IPCOLOURSPACE_RGBtoGBR = 3, | |
382 NUMBER_INPUT_COLOUR_SPACE_CONVERSIONS = 4 | |
383 }; | |
384 | |
385 enum DeblockEdgeDir | |
386 { | |
387 EDGE_VER = 0, | |
388 EDGE_HOR = 1, | |
389 NUM_EDGE_DIR = 2 | |
390 }; | |
391 | |
392 /// supported partition shape | |
393 enum PartSize | |
394 { | |
395 SIZE_2Nx2N = 0, ///< symmetric motion partition, 2Nx2N | |
396 SIZE_2NxN = 1, ///< symmetric motion partition, 2Nx N | |
397 SIZE_Nx2N = 2, ///< symmetric motion partition, Nx2N | |
398 SIZE_NxN = 3, ///< symmetric motion partition, Nx N | |
399 SIZE_2NxnU = 4, ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2) | |
400 SIZE_2NxnD = 5, ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2) | |
401 SIZE_nLx2N = 6, ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N | |
402 SIZE_nRx2N = 7, ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N | |
403 NUMBER_OF_PART_SIZES = 8 | |
404 }; | |
405 | |
406 /// supported prediction type | |
407 enum PredMode | |
408 { | |
409 MODE_INTER = 0, ///< inter-prediction mode | |
410 MODE_INTRA = 1, ///< intra-prediction mode | |
411 NUMBER_OF_PREDICTION_MODES = 2, | |
412 }; | |
413 | |
414 /// reference list index | |
415 enum RefPicList | |
416 { | |
417 REF_PIC_LIST_0 = 0, ///< reference list 0 | |
418 REF_PIC_LIST_1 = 1, ///< reference list 1 | |
419 NUM_REF_PIC_LIST_01 = 2, | |
420 REF_PIC_LIST_X = 100 ///< special mark | |
421 }; | |
422 | |
423 /// distortion function index | |
424 enum DFunc | |
425 { | |
426 DF_DEFAULT = 0, | |
427 DF_SSE = 1, ///< general size SSE | |
428 DF_SSE4 = 2, ///< 4xM SSE | |
429 DF_SSE8 = 3, ///< 8xM SSE | |
430 DF_SSE16 = 4, ///< 16xM SSE | |
431 DF_SSE32 = 5, ///< 32xM SSE | |
432 DF_SSE64 = 6, ///< 64xM SSE | |
433 DF_SSE16N = 7, ///< 16NxM SSE | |
434 | |
435 DF_SAD = 8, ///< general size SAD | |
436 DF_SAD4 = 9, ///< 4xM SAD | |
437 DF_SAD8 = 10, ///< 8xM SAD | |
438 DF_SAD16 = 11, ///< 16xM SAD | |
439 DF_SAD32 = 12, ///< 32xM SAD | |
440 DF_SAD64 = 13, ///< 64xM SAD | |
441 DF_SAD16N = 14, ///< 16NxM SAD | |
442 | |
443 DF_SADS = 15, ///< general size SAD with step | |
444 DF_SADS4 = 16, ///< 4xM SAD with step | |
445 DF_SADS8 = 17, ///< 8xM SAD with step | |
446 DF_SADS16 = 18, ///< 16xM SAD with step | |
447 DF_SADS32 = 19, ///< 32xM SAD with step | |
448 DF_SADS64 = 20, ///< 64xM SAD with step | |
449 DF_SADS16N = 21, ///< 16NxM SAD with step | |
450 | |
451 DF_HADS = 22, ///< general size Hadamard with step | |
452 DF_HADS4 = 23, ///< 4xM HAD with step | |
453 DF_HADS8 = 24, ///< 8xM HAD with step | |
454 DF_HADS16 = 25, ///< 16xM HAD with step | |
455 DF_HADS32 = 26, ///< 32xM HAD with step | |
456 DF_HADS64 = 27, ///< 64xM HAD with step | |
457 DF_HADS16N = 28, ///< 16NxM HAD with step | |
458 | |
459 #if AMP_SAD | |
460 DF_SAD12 = 43, | |
461 DF_SAD24 = 44, | |
462 DF_SAD48 = 45, | |
463 | |
464 DF_SADS12 = 46, | |
465 DF_SADS24 = 47, | |
466 DF_SADS48 = 48, | |
467 | |
468 DF_SSE_FRAME = 50, ///< Frame-based SSE | |
469 DF_TOTAL_FUNCTIONS = 64 | |
470 #else | |
471 DF_SSE_FRAME = 32, ///< Frame-based SSE | |
472 DF_TOTAL_FUNCTIONS = 33 | |
473 #endif | |
474 }; | |
475 | |
476 /// index for SBAC based RD optimization | |
477 enum CI_IDX | |
478 { | |
479 CI_CURR_BEST = 0, ///< best mode index | |
480 CI_NEXT_BEST, ///< next best index | |
481 CI_TEMP_BEST, ///< temporal index | |
482 CI_CHROMA_INTRA, ///< chroma intra index | |
483 CI_QT_TRAFO_TEST, | |
484 CI_QT_TRAFO_ROOT, | |
485 CI_NUM, ///< total number | |
486 }; | |
487 | |
488 /// motion vector predictor direction used in AMVP | |
489 enum MVP_DIR | |
490 { | |
491 MD_LEFT = 0, ///< MVP of left block | |
492 MD_ABOVE, ///< MVP of above block | |
493 MD_ABOVE_RIGHT, ///< MVP of above right block | |
494 MD_BELOW_LEFT, ///< MVP of below left block | |
495 MD_ABOVE_LEFT ///< MVP of above left block | |
496 }; | |
497 | |
498 enum StoredResidualType | |
499 { | |
500 RESIDUAL_RECONSTRUCTED = 0, | |
501 RESIDUAL_ENCODER_SIDE = 1, | |
502 NUMBER_OF_STORED_RESIDUAL_TYPES = 2 | |
503 }; | |
504 | |
505 enum TransformDirection | |
506 { | |
507 TRANSFORM_FORWARD = 0, | |
508 TRANSFORM_INVERSE = 1, | |
509 TRANSFORM_NUMBER_OF_DIRECTIONS = 2 | |
510 }; | |
511 | |
512 /// supported ME search methods | |
513 enum MESearchMethod | |
514 { | |
515 FULL_SEARCH = 0, ///< Full search | |
516 DIAMOND = 1, ///< Fast search | |
517 SELECTIVE = 2 ///< Selective search | |
518 }; | |
519 | |
520 /// coefficient scanning type used in ACS | |
521 enum COEFF_SCAN_TYPE | |
522 { | |
523 SCAN_DIAG = 0, ///< up-right diagonal scan | |
524 SCAN_HOR = 1, ///< horizontal first scan | |
525 SCAN_VER = 2, ///< vertical first scan | |
526 SCAN_NUMBER_OF_TYPES = 3 | |
527 }; | |
528 | |
529 enum COEFF_SCAN_GROUP_TYPE | |
530 { | |
531 SCAN_UNGROUPED = 0, | |
532 SCAN_GROUPED_4x4 = 1, | |
533 SCAN_NUMBER_OF_GROUP_TYPES = 2 | |
534 }; | |
535 | |
536 enum SignificanceMapContextType | |
537 { | |
538 CONTEXT_TYPE_4x4 = 0, | |
539 CONTEXT_TYPE_8x8 = 1, | |
540 CONTEXT_TYPE_NxN = 2, | |
541 CONTEXT_TYPE_SINGLE = 3, | |
542 CONTEXT_NUMBER_OF_TYPES = 4 | |
543 }; | |
544 | |
545 enum ScalingListMode | |
546 { | |
547 SCALING_LIST_OFF, | |
548 SCALING_LIST_DEFAULT, | |
549 SCALING_LIST_FILE_READ | |
550 }; | |
551 | |
552 enum ScalingListSize | |
553 { | |
554 SCALING_LIST_4x4 = 0, | |
555 SCALING_LIST_8x8, | |
556 SCALING_LIST_16x16, | |
557 SCALING_LIST_32x32, | |
558 SCALING_LIST_SIZE_NUM | |
559 }; | |
560 | |
561 // Slice / Slice segment encoding modes | |
562 enum SliceConstraint | |
563 { | |
564 NO_SLICES = 0, ///< don't use slices / slice segments | |
565 FIXED_NUMBER_OF_CTU = 1, ///< Limit maximum number of largest coding tree units in a slice / slice segments | |
566 FIXED_NUMBER_OF_BYTES = 2, ///< Limit maximum number of bytes in a slice / slice segment | |
567 FIXED_NUMBER_OF_TILES = 3, ///< slices / slice segments span an integer number of tiles | |
568 }; | |
569 | |
570 enum SAOMode //mode | |
571 { | |
572 SAO_MODE_OFF = 0, | |
573 SAO_MODE_NEW, | |
574 SAO_MODE_MERGE, | |
575 NUM_SAO_MODES | |
576 }; | |
577 | |
578 enum SAOModeMergeTypes | |
579 { | |
580 SAO_MERGE_LEFT =0, | |
581 SAO_MERGE_ABOVE, | |
582 NUM_SAO_MERGE_TYPES | |
583 }; | |
584 | |
585 | |
586 enum SAOModeNewTypes | |
587 { | |
588 SAO_TYPE_START_EO =0, | |
589 SAO_TYPE_EO_0 = SAO_TYPE_START_EO, | |
590 SAO_TYPE_EO_90, | |
591 SAO_TYPE_EO_135, | |
592 SAO_TYPE_EO_45, | |
593 | |
594 SAO_TYPE_START_BO, | |
595 SAO_TYPE_BO = SAO_TYPE_START_BO, | |
596 | |
597 NUM_SAO_NEW_TYPES | |
598 }; | |
599 #define NUM_SAO_EO_TYPES_LOG2 2 | |
600 | |
601 enum SAOEOClasses | |
602 { | |
603 SAO_CLASS_EO_FULL_VALLEY = 0, | |
604 SAO_CLASS_EO_HALF_VALLEY = 1, | |
605 SAO_CLASS_EO_PLAIN = 2, | |
606 SAO_CLASS_EO_HALF_PEAK = 3, | |
607 SAO_CLASS_EO_FULL_PEAK = 4, | |
608 NUM_SAO_EO_CLASSES, | |
609 }; | |
610 | |
611 #define NUM_SAO_BO_CLASSES_LOG2 5 | |
612 #define NUM_SAO_BO_CLASSES (1<<NUM_SAO_BO_CLASSES_LOG2) | |
613 | |
614 namespace Profile | |
615 { | |
616 enum Name | |
617 { | |
618 NONE = 0, | |
619 MAIN = 1, | |
620 MAIN10 = 2, | |
621 MAINSTILLPICTURE = 3, | |
622 MAINREXT = 4, | |
623 HIGHTHROUGHPUTREXT = 5 | |
624 }; | |
625 } | |
626 | |
627 namespace Level | |
628 { | |
629 enum Tier | |
630 { | |
631 MAIN = 0, | |
632 HIGH = 1, | |
633 }; | |
634 | |
635 enum Name | |
636 { | |
637 // code = (level * 30) | |
638 NONE = 0, | |
639 LEVEL1 = 30, | |
640 LEVEL2 = 60, | |
641 LEVEL2_1 = 63, | |
642 LEVEL3 = 90, | |
643 LEVEL3_1 = 93, | |
644 LEVEL4 = 120, | |
645 LEVEL4_1 = 123, | |
646 LEVEL5 = 150, | |
647 LEVEL5_1 = 153, | |
648 LEVEL5_2 = 156, | |
649 LEVEL6 = 180, | |
650 LEVEL6_1 = 183, | |
651 LEVEL6_2 = 186, | |
652 LEVEL8_5 = 255, | |
653 }; | |
654 } | |
655 | |
656 enum CostMode | |
657 { | |
658 COST_STANDARD_LOSSY = 0, | |
659 COST_SEQUENCE_LEVEL_LOSSLESS = 1, | |
660 COST_LOSSLESS_CODING = 2, | |
661 COST_MIXED_LOSSLESS_LOSSY_CODING = 3 | |
662 }; | |
663 | |
664 enum SPSExtensionFlagIndex | |
665 { | |
666 SPS_EXT__REXT = 0, | |
667 //SPS_EXT__MVHEVC = 1, //for use in future versions | |
668 //SPS_EXT__SHVC = 2, //for use in future versions | |
669 NUM_SPS_EXTENSION_FLAGS = 8 | |
670 }; | |
671 | |
672 enum PPSExtensionFlagIndex | |
673 { | |
674 PPS_EXT__REXT = 0, | |
675 //PPS_EXT__MVHEVC = 1, //for use in future versions | |
676 //PPS_EXT__SHVC = 2, //for use in future versions | |
677 NUM_PPS_EXTENSION_FLAGS = 8 | |
678 }; | |
679 | |
680 // ==================================================================================================================== | |
681 // Type definition | |
682 // ==================================================================================================================== | |
683 | |
684 #if RExt__HIGH_BIT_DEPTH_SUPPORT | |
685 typedef Int Pel; ///< pixel type | |
686 typedef Int64 TCoeff; ///< transform coefficient | |
687 typedef Int TMatrixCoeff; ///< transform matrix coefficient | |
688 typedef Short TFilterCoeff; ///< filter coefficient | |
689 typedef Int64 Intermediate_Int; ///< used as intermediate value in calculations | |
690 typedef UInt64 Intermediate_UInt; ///< used as intermediate value in calculations | |
691 #else | |
692 typedef Short Pel; ///< pixel type | |
693 typedef Int TCoeff; ///< transform coefficient | |
694 typedef Short TMatrixCoeff; ///< transform matrix coefficient | |
695 typedef Short TFilterCoeff; ///< filter coefficient | |
696 typedef Int Intermediate_Int; ///< used as intermediate value in calculations | |
697 typedef UInt Intermediate_UInt; ///< used as intermediate value in calculations | |
698 #endif | |
699 | |
700 #if FULL_NBIT | |
701 typedef UInt64 Distortion; ///< distortion measurement | |
702 #else | |
703 typedef UInt Distortion; ///< distortion measurement | |
704 #endif | |
705 | |
706 /// parameters for adaptive loop filter | |
707 class TComPicSym; | |
708 | |
709 #define MAX_NUM_SAO_CLASSES 32 //(NUM_SAO_EO_GROUPS > NUM_SAO_BO_GROUPS)?NUM_SAO_EO_GROUPS:NUM_SAO_BO_GROUPS | |
710 | |
711 struct SAOOffset | |
712 { | |
713 SAOMode modeIdc; // NEW, MERGE, OFF | |
714 Int typeIdc; // union of SAOModeMergeTypes and SAOModeNewTypes, depending on modeIdc. | |
715 Int typeAuxInfo; // BO: starting band index | |
716 Int offset[MAX_NUM_SAO_CLASSES]; | |
717 | |
718 SAOOffset(); | |
719 ~SAOOffset(); | |
720 Void reset(); | |
721 | |
722 const SAOOffset& operator= (const SAOOffset& src); | |
723 }; | |
724 | |
725 struct SAOBlkParam | |
726 { | |
727 | |
728 SAOBlkParam(); | |
729 ~SAOBlkParam(); | |
730 Void reset(); | |
731 const SAOBlkParam& operator= (const SAOBlkParam& src); | |
732 SAOOffset& operator[](Int compIdx){ return offsetParam[compIdx];} | |
733 private: | |
734 SAOOffset offsetParam[MAX_NUM_COMPONENT]; | |
735 | |
736 }; | |
737 | |
738 | |
739 /// parameters for deblocking filter | |
740 typedef struct _LFCUParam | |
741 { | |
742 Bool bInternalEdge; ///< indicates internal edge | |
743 Bool bLeftEdge; ///< indicates left edge | |
744 Bool bTopEdge; ///< indicates top edge | |
745 } LFCUParam; | |
746 | |
747 | |
748 | |
749 //TU settings for entropy encoding | |
750 struct TUEntropyCodingParameters | |
751 { | |
752 const UInt *scan; | |
753 const UInt *scanCG; | |
754 COEFF_SCAN_TYPE scanType; | |
755 UInt widthInGroups; | |
756 UInt heightInGroups; | |
757 UInt firstSignificanceMapContext; | |
758 }; | |
759 | |
760 | |
761 struct TComDigest | |
762 { | |
763 std::vector<UChar> hash; | |
764 | |
765 Bool operator==(const TComDigest &other) const | |
766 { | |
767 if (other.hash.size() != hash.size()) return false; | |
768 for(UInt i=0; i<UInt(hash.size()); i++) | |
769 if (other.hash[i] != hash[i]) return false; | |
770 return true; | |
771 } | |
772 | |
773 Bool operator!=(const TComDigest &other) const | |
774 { | |
775 return !(*this == other); | |
776 } | |
777 }; | |
778 | |
779 struct TComSEITimeSet | |
780 { | |
781 TComSEITimeSet() : clockTimeStampFlag(false), | |
782 numUnitFieldBasedFlag(false), | |
783 countingType(0), | |
784 fullTimeStampFlag(false), | |
785 discontinuityFlag(false), | |
786 cntDroppedFlag(false), | |
787 numberOfFrames(0), | |
788 secondsValue(0), | |
789 minutesValue(0), | |
790 hoursValue(0), | |
791 secondsFlag(false), | |
792 minutesFlag(false), | |
793 hoursFlag(false), | |
794 timeOffsetLength(0), | |
795 timeOffsetValue(0) | |
796 { } | |
797 Bool clockTimeStampFlag; | |
798 Bool numUnitFieldBasedFlag; | |
799 Int countingType; | |
800 Bool fullTimeStampFlag; | |
801 Bool discontinuityFlag; | |
802 Bool cntDroppedFlag; | |
803 Int numberOfFrames; | |
804 Int secondsValue; | |
805 Int minutesValue; | |
806 Int hoursValue; | |
807 Bool secondsFlag; | |
808 Bool minutesFlag; | |
809 Bool hoursFlag; | |
810 Int timeOffsetLength; | |
811 Int timeOffsetValue; | |
812 }; | |
813 | |
814 struct TComSEIMasteringDisplay | |
815 { | |
816 Bool colourVolumeSEIEnabled; | |
817 UInt maxLuminance; | |
818 UInt minLuminance; | |
819 UShort primaries[3][2]; | |
820 UShort whitePoint[2]; | |
821 }; | |
822 //! \} | |
823 | |
824 #endif | |
825 | |
826 |