1 /* 2 * Copyright (c) 2017, Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included 12 * in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 #ifndef CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_ 23 #define CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_ 24 25 #include "cm_include.h" 26 #include "cm_def_os.h" 27 28 //CM runtime version returning to user 29 #define CM_1_0 100 30 #define CM_2_0 200 31 #define CM_2_1 201 32 #define CM_2_2 202 33 #define CM_2_3 203 34 #define CM_2_4 204 35 #define CM_3_0 300 36 #define CM_4_0 400 37 #define CM_5_0 500 38 #define CM_6_0 600 39 #define CM_7_0 700 40 #define CM_7_2 702 //for MDFRT API refreshment. 41 #define CURRENT_CM_VERSION (CM_7_2) 42 43 //CM DDI version in UMD layer 44 #define CM_DDI_1_0 100 45 #define CM_DDI_1_1 101 46 #define CM_DDI_1_2 102 47 #define CM_DDI_1_3 103 48 #define CM_DDI_1_4 104 49 #define CM_DDI_2_0 200 50 #define CM_DDI_2_1 201 51 #define CM_DDI_2_2 202 52 #define CM_DDI_2_3 203 53 #define CM_DDI_2_4 204 54 #define CM_DDI_3_0 300 55 #define CM_DDI_4_0 400 56 #define CM_DDI_5_0 500 57 #define CM_DDI_6_0 600 58 #define CM_DDI_7_0 700 59 #define CM_DDI_7_2 702 //for MDFRT API refreshment. 60 61 //Error code definition 62 typedef enum _CM_RETURN_CODE 63 { 64 CM_SUCCESS = 0, 65 /* 66 * RANGE -1 ~ -9999 FOR EXTERNAL ERROR CODE 67 */ 68 CM_FAILURE = -1, 69 CM_NOT_IMPLEMENTED = -2, 70 CM_SURFACE_ALLOCATION_FAILURE = -3, 71 CM_OUT_OF_HOST_MEMORY = -4, 72 CM_SURFACE_FORMAT_NOT_SUPPORTED = -5, 73 CM_EXCEED_SURFACE_AMOUNT = -6, 74 CM_EXCEED_KERNEL_ARG_AMOUNT = -7, 75 CM_EXCEED_KERNEL_ARG_SIZE_IN_BYTE = -8, 76 CM_INVALID_ARG_INDEX = -9, 77 CM_INVALID_ARG_VALUE = -10, 78 CM_INVALID_ARG_SIZE = -11, 79 CM_INVALID_THREAD_INDEX = -12, 80 CM_INVALID_WIDTH = -13, 81 CM_INVALID_HEIGHT = -14, 82 CM_INVALID_DEPTH = -15, 83 CM_INVALID_COMMON_ISA = -16, 84 CM_OPEN_VIDEO_DEVICE_FAILURE = -17, 85 CM_VIDEO_DEVICE_LOCKED = -18, // Video device is already locked. 86 CM_LOCK_VIDEO_DEVICE_FAILURE = -19, // Video device is not locked but can't be locked. 87 CM_EXCEED_SAMPLER_AMOUNT = -20, 88 CM_EXCEED_MAX_KERNEL_PER_ENQUEUE = -21, 89 CM_EXCEED_MAX_KERNEL_SIZE_IN_BYTE = -22, 90 CM_EXCEED_MAX_THREAD_AMOUNT_PER_ENQUEUE = -23, 91 CM_EXCEED_VME_STATE_G6_AMOUNT = -24, 92 CM_INVALID_THREAD_SPACE = -25, 93 CM_EXCEED_MAX_TIMEOUT = -26, 94 CM_JITDLL_LOAD_FAILURE = -27, 95 CM_JIT_COMPILE_FAILURE = -28, 96 CM_JIT_COMPILESIM_FAILURE = -29, 97 CM_INVALID_THREAD_GROUP_SPACE = -30, 98 CM_THREAD_ARG_NOT_ALLOWED = -31, 99 CM_INVALID_GLOBAL_BUFFER_INDEX = -32, 100 CM_INVALID_BUFFER_HANDLER = -33, 101 CM_EXCEED_MAX_SLM_SIZE = -34, 102 CM_JITDLL_OLDER_THAN_ISA = -35, 103 CM_INVALID_HARDWARE_THREAD_NUMBER = -36, 104 CM_GTPIN_INVOKE_FAILURE = -37, 105 CM_INVALIDE_L3_CONFIGURATION = -38, 106 CM_INVALID_TEXTURE2D_USAGE = -39, 107 CM_INTEL_GFX_NOTFOUND = -40, 108 CM_GPUCOPY_INVALID_SYSMEM = -41, 109 CM_GPUCOPY_INVALID_WIDTH = -42, 110 CM_GPUCOPY_INVALID_STRIDE = -43, 111 CM_EVENT_DRIVEN_FAILURE = -44, 112 CM_LOCK_SURFACE_FAIL = -45, // Lock surface failed 113 CM_INVALID_GENX_BINARY = -46, 114 CM_FEATURE_NOT_SUPPORTED_IN_DRIVER = -47, // driver out-of-sync 115 CM_QUERY_DLL_VERSION_FAILURE = -48, //Fail in getting DLL file version 116 CM_KERNELPAYLOAD_PERTHREADARG_MUTEX_FAIL = -49, 117 CM_KERNELPAYLOAD_PERKERNELARG_MUTEX_FAIL = -50, 118 CM_KERNELPAYLOAD_SETTING_FAILURE = -51, 119 CM_KERNELPAYLOAD_SURFACE_INVALID_BTINDEX = -52, 120 CM_NOT_SET_KERNEL_ARGUMENT = -53, 121 CM_GPUCOPY_INVALID_SURFACES = -54, 122 CM_GPUCOPY_INVALID_SIZE = -55, 123 CM_GPUCOPY_OUT_OF_RESOURCE = -56, 124 CM_INVALID_VIDEO_DEVICE = -57, 125 CM_SURFACE_DELAY_DESTROY = -58, 126 CM_INVALID_VEBOX_STATE = -59, 127 CM_INVALID_VEBOX_SURFACE = -60, 128 CM_FEATURE_NOT_SUPPORTED_BY_HARDWARE = -61, 129 CM_RESOURCE_USAGE_NOT_SUPPORT_READWRITE = -62, 130 CM_MULTIPLE_MIPLEVELS_NOT_SUPPORTED = -63, 131 CM_INVALID_UMD_CONTEXT = -64, 132 CM_INVALID_LIBVA_SURFACE = -65, 133 CM_INVALID_LIBVA_INITIALIZE = -66, 134 CM_KERNEL_THREADSPACE_NOT_SET = -67, 135 CM_INVALID_KERNEL_THREADSPACE = -68, 136 CM_KERNEL_THREADSPACE_THREADS_NOT_ASSOCIATED= -69, 137 CM_KERNEL_THREADSPACE_INTEGRITY_FAILED = -70, 138 CM_INVALID_USERPROVIDED_GENBINARY = -71, 139 CM_INVALID_PRIVATE_DATA = -72, 140 CM_INVALID_MOS_RESOURCE_HANDLE = -73, 141 CM_SURFACE_CACHED = -74, 142 CM_SURFACE_IN_USE = -75, 143 CM_INVALID_GPUCOPY_KERNEL = -76, 144 CM_INVALID_DEPENDENCY_WITH_WALKING_PATTERN = -77, 145 CM_INVALID_MEDIA_WALKING_PATTERN = -78, 146 CM_FAILED_TO_ALLOCATE_SVM_BUFFER = -79, 147 CM_EXCEED_MAX_POWER_OPTION_FOR_PLATFORM = -80, 148 CM_INVALID_KERNEL_THREADGROUPSPACE = -81, 149 CM_INVALID_KERNEL_SPILL_CODE = -82, 150 CM_UMD_DRIVER_NOT_SUPPORTED = -83, 151 CM_INVALID_GPU_FREQUENCY_VALUE = -84, 152 CM_SYSTEM_MEMORY_NOT_4KPAGE_ALIGNED = -85, 153 CM_KERNEL_ARG_SETTING_FAILED = -86, 154 CM_NO_AVAILABLE_SURFACE = -87, 155 CM_VA_SURFACE_NOT_SUPPORTED = -88, 156 CM_TOO_MUCH_THREADS = -89, 157 CM_NULL_POINTER = -90, 158 CM_EXCEED_MAX_NUM_2D_ALIASES = -91, 159 CM_INVALID_PARAM_SIZE = -92, 160 CM_GT_UNSUPPORTED = -93, 161 CM_GTPIN_FLAG_NO_LONGER_SUPPORTED = -94, 162 CM_PLATFORM_UNSUPPORTED_FOR_API = -95, 163 CM_TASK_MEDIA_RESET = -96, 164 CM_KERNELPAYLOAD_SAMPLER_INVALID_BTINDEX = -97, 165 CM_EXCEED_MAX_NUM_BUFFER_ALIASES = -98, 166 CM_SYSTEM_MEMORY_NOT_4PIXELS_ALIGNED = -99, 167 CM_FAILED_TO_CREATE_CURBE_SURFACE = -100, 168 CM_INVALID_CAP_NAME = -101, 169 CM_INVALID_PARAM_FOR_CREATE_QUEUE_EX = -102, 170 CM_INVALID_CREATE_OPTION_FOR_BUFFER_STATELESS = -103, 171 CM_INVALID_KERNEL_ARG_POINTER = -104, 172 CM_LOAD_LIBRARY_FAILED = -105, 173 CM_NO_SUPPORTED_ADAPTER = -106, 174 175 /* 176 * RANGE -10000 ~ -19999 FOR INTERNAL ERROR CODE 177 */ 178 CM_INTERNAL_ERROR_CODE_OFFSET = -10000, 179 180 /* 181 * RANGE <=-20000 AREAD FOR MOST STATUS CONVERSION 182 */ 183 CM_MOS_STATUS_CONVERTED_CODE_OFFSET = -20000 184 } CM_RETURN_CODE; 185 186 #define __CODEGEN_UNIQUE(name) _NAME_LABEL_(name, __LINE__) 187 #define BITFIELD_RANGE( startbit, endbit ) ((endbit)-(startbit)+1) 188 #define BITFIELD_BIT(bit) 1 189 190 #define CM_MIN_SURF_WIDTH 1 191 #define CM_MIN_SURF_HEIGHT 1 192 #define CM_MIN_SURF_DEPTH 2 193 #define CM_MAX_1D_SURF_WIDTH 0x80000000 // 2^31 2 GB 194 195 #define CM_MAX_3D_SURF_WIDTH 2048 196 #define CM_MAX_3D_SURF_HEIGHT 2048 197 #define CM_MAX_3D_SURF_DEPTH 2048 198 199 // hard ceiling 200 #define CM_MAX_OPTION_SIZE_IN_BYTE 512 201 #define CM_MAX_KERNEL_NAME_SIZE_IN_BYTE 256 202 #define CM_MAX_ISA_FILE_NAME_SIZE_IN_BYTE 256 203 204 #define CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM 0 205 #define CM_BUFFER_STATELESS_CREATE_OPTION_SYS_MEM 1 206 #define CM_BUFFER_STATELESS_CREATE_OPTION_DEGAULT CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM 207 208 struct CM_HAL_MAX_VALUES 209 { 210 uint32_t maxTasks; // [in] Max Tasks 211 uint32_t maxKernelsPerTask; // [in] Max kernels per task 212 uint32_t maxKernelBinarySize; // [in] Max kernel binary size 213 uint32_t maxSpillSizePerHwThread; // [in] Max spill size per thread 214 uint32_t maxSamplerTableSize; // [in] Max sampler table size 215 uint32_t maxBufferTableSize; // [in] Buffer table Size 216 uint32_t max2DSurfaceTableSize; // [in] Buffer table Size 217 uint32_t max3DSurfaceTableSize; // [in] Buffer table Size 218 uint32_t maxArgsPerKernel; // [in] Max arguments per kernel 219 uint32_t maxArgByteSizePerKernel; // [in] Max argument size in byte per kernel 220 uint32_t maxSurfacesPerKernel; // [in] Max Surfaces Per Kernel 221 uint32_t maxSamplersPerKernel; // [in] Max Samplers per kernel 222 uint32_t maxHwThreads; // [in] Max HW threads 223 uint32_t maxUserThreadsPerTask; // [in] Max user threads per task 224 uint32_t maxUserThreadsPerTaskNoThreadArg; // [in] Max user threads per task without a thread arg 225 }; 226 typedef CM_HAL_MAX_VALUES *PCM_HAL_MAX_VALUES; 227 228 //--------------------------------------------------------------------------- 229 //! HAL CM Max Values extention which has more entries which are not included 230 //! in CM_HAL_MAX_VALUES 231 //--------------------------------------------------------------------------- 232 struct CM_HAL_MAX_VALUES_EX 233 { 234 uint32_t max2DUPSurfaceTableSize; // [in] Max 2D UP surface table Size 235 uint32_t maxSampler8x8TableSize; // [in] Max sampler 8x8 table size 236 uint32_t maxCURBESizePerKernel; // [in] Max CURBE size per kernel 237 uint32_t maxCURBESizePerTask; // [in] Max CURBE size per task 238 uint32_t maxIndirectDataSizePerKernel; // [in] Max indirect data size per kernel 239 uint32_t maxUserThreadsPerMediaWalker; // [in] Max user threads per media walker 240 uint32_t maxUserThreadsPerThreadGroup; // [in] Max user threads per thread group 241 }; 242 typedef CM_HAL_MAX_VALUES_EX *PCM_HAL_MAX_VALUES_EX; 243 244 class CLock 245 { 246 public: CLock(CSync & refSync)247 CLock(CSync &refSync) : m_refSync(refSync) { Lock(); } ~CLock()248 ~CLock() { Unlock(); } 249 250 private: 251 CSync &m_refSync; // Synchronization object 252 253 CLock(const CLock &refcSource); 254 CLock &operator=(const CLock &refcSource); Lock()255 void Lock() { m_refSync.Acquire(); } Unlock()256 void Unlock() { m_refSync.Release(); } 257 }; 258 259 typedef struct _CM_SAMPLER_STATE 260 { 261 CM_TEXTURE_FILTER_TYPE minFilterType; 262 CM_TEXTURE_FILTER_TYPE magFilterType; 263 CM_TEXTURE_ADDRESS_TYPE addressU; 264 CM_TEXTURE_ADDRESS_TYPE addressV; 265 CM_TEXTURE_ADDRESS_TYPE addressW; 266 } CM_SAMPLER_STATE; 267 268 typedef enum _CM_PIXEL_TYPE 269 { 270 CM_PIXEL_UINT, 271 CM_PIXEL_SINT, 272 CM_PIXEL_OTHER 273 } CM_PIXEL_TYPE; 274 275 typedef struct _CM_SAMPLER_STATE_EX 276 { 277 CM_TEXTURE_FILTER_TYPE minFilterType; 278 CM_TEXTURE_FILTER_TYPE magFilterType; 279 CM_TEXTURE_ADDRESS_TYPE addressU; 280 CM_TEXTURE_ADDRESS_TYPE addressV; 281 CM_TEXTURE_ADDRESS_TYPE addressW; 282 283 CM_PIXEL_TYPE surfaceFormat; 284 union 285 { 286 uint32_t borderColorRedU; 287 int32_t borderColorRedS; 288 float borderColorRedF; 289 }; 290 union 291 { 292 uint32_t borderColorGreenU; 293 int32_t borderColorGreenS; 294 float borderColorGreenF; 295 }; 296 union 297 { 298 uint32_t borderColorBlueU; 299 int32_t borderColorBlueS; 300 float borderColorBlueF; 301 }; 302 union 303 { 304 uint32_t borderColorAlphaU; 305 int32_t borderColorAlphaS; 306 float borderColorAlphaF; 307 }; 308 } CM_SAMPLER_STATE_EX; 309 310 //struct used by both CmDevice and CmSampler8x8 311 typedef struct _CM_AVS_COEFF_TABLE 312 { 313 float filterCoeff_0_0; 314 float filterCoeff_0_1; 315 float filterCoeff_0_2; 316 float filterCoeff_0_3; 317 float filterCoeff_0_4; 318 float filterCoeff_0_5; 319 float filterCoeff_0_6; 320 float filterCoeff_0_7; 321 } CM_AVS_COEFF_TABLE; 322 323 #define CM_NUM_COEFF_ROWS 17 324 #define CM_NUM_COEFF_ROWS_SKL 32 325 typedef struct _CM_AVS_NONPIPLINED_STATE 326 { 327 bool bypassXAF; 328 bool bypassYAF; 329 uint8_t defaultSharpLvl; 330 uint8_t maxDerivative4Pixels; 331 uint8_t maxDerivative8Pixels; 332 uint8_t transitionArea4Pixels; 333 uint8_t transitionArea8Pixels; 334 CM_AVS_COEFF_TABLE Tbl0X[ CM_NUM_COEFF_ROWS_SKL ]; 335 CM_AVS_COEFF_TABLE Tbl0Y[ CM_NUM_COEFF_ROWS_SKL ]; 336 CM_AVS_COEFF_TABLE Tbl1X[ CM_NUM_COEFF_ROWS_SKL ]; 337 CM_AVS_COEFF_TABLE Tbl1Y[ CM_NUM_COEFF_ROWS_SKL ]; 338 bool enableRgbAdaptive; 339 bool adaptiveFilterAllChannels; 340 } CM_AVS_NONPIPLINED_STATE; 341 342 enum CM_SAMPLER_STATE_TYPE { 343 CM_SAMPLER8X8_AVS = 0, 344 CM_SAMPLER8X8_CONV = 1, 345 CM_SAMPLER8X8_MISC = 3, 346 CM_SAMPLER8X8_CONV1DH = 4, 347 CM_SAMPLER8X8_CONV1DV = 5, 348 CM_SAMPLER8X8_AVS_EX = 6, 349 CM_SAMPLER8X8_NONE 350 }; 351 352 typedef struct _CM_AVS_STATE_MSG 353 { 354 bool avsType; //true nearest, false adaptive 355 bool eightTapAFEnable; //HSW+ 356 bool bypassIEF; //ignored for BWL, moved to sampler8x8 payload. 357 bool shuffleOutputWriteback; //SKL mode only to be set when AVS msg sequence is 4x4 or 8x4 358 bool hdcDirectWriteEnable; 359 unsigned short gainFactor; 360 unsigned char globalNoiseEstm; 361 unsigned char strongEdgeThr; 362 unsigned char weakEdgeThr; 363 unsigned char strongEdgeWght; 364 unsigned char regularWght; 365 unsigned char nonEdgeWght; 366 unsigned short r3xCoefficient; 367 unsigned short r3cCoefficient; 368 unsigned short r5xCoefficient; 369 unsigned short r5cxCoefficient; 370 unsigned short r5cCoefficient; 371 //For Non-piplined states 372 unsigned short stateID; 373 CM_AVS_NONPIPLINED_STATE * avsState; 374 } CM_AVS_STATE_MSG; 375 376 //*----------------------------------------------------------------------------- 377 //| CM Convolve type for SKL+ 378 //*----------------------------------------------------------------------------- 379 typedef enum _CM_CONVOLVE_SKL_TYPE 380 { 381 CM_CONVOLVE_SKL_TYPE_2D = 0, 382 CM_CONVOLVE_SKL_TYPE_1D = 1, 383 CM_CONVOLVE_SKL_TYPE_1P = 2 384 } CM_CONVOLVE_SKL_TYPE; 385 386 typedef struct _CM_CONVOLVE_COEFF_TABLE 387 { 388 float filterCoeff_0_0; 389 float filterCoeff_0_1; 390 float filterCoeff_0_2; 391 float filterCoeff_0_3; 392 float filterCoeff_0_4; 393 float filterCoeff_0_5; 394 float filterCoeff_0_6; 395 float filterCoeff_0_7; 396 float filterCoeff_0_8; 397 float filterCoeff_0_9; 398 float filterCoeff_0_10; 399 float filterCoeff_0_11; 400 float filterCoeff_0_12; 401 float filterCoeff_0_13; 402 float filterCoeff_0_14; 403 float filterCoeff_0_15; 404 float filterCoeff_0_16; 405 float filterCoeff_0_17; 406 float filterCoeff_0_18; 407 float filterCoeff_0_19; 408 float filterCoeff_0_20; 409 float filterCoeff_0_21; 410 float filterCoeff_0_22; 411 float filterCoeff_0_23; 412 float filterCoeff_0_24; 413 float filterCoeff_0_25; 414 float filterCoeff_0_26; 415 float filterCoeff_0_27; 416 float filterCoeff_0_28; 417 float filterCoeff_0_29; 418 float filterCoeff_0_30; 419 float filterCoeff_0_31; 420 } CM_CONVOLVE_COEFF_TABLE; 421 422 #define CM_NUM_CONVOLVE_ROWS 16 423 #define CM_NUM_CONVOLVE_ROWS_SKL 32 424 typedef struct _CM_CONVOLVE_STATE_MSG 425 { 426 bool coeffSize; //true 16-bit, false 8-bit 427 int8_t sclDwnValue; //Scale down value 428 int8_t width; //Kernel Width 429 int8_t height; //Kernel Height 430 //SKL mode 431 bool isVertical32Mode; 432 bool isHorizontal32Mode; 433 CM_CONVOLVE_SKL_TYPE nConvolveType; 434 CM_CONVOLVE_COEFF_TABLE table[CM_NUM_CONVOLVE_ROWS_SKL]; 435 } CM_CONVOLVE_STATE_MSG; 436 437 struct CM_AVS_STATE_MSG_EX 438 { 439 CM_RT_API CM_AVS_STATE_MSG_EX(); 440 441 bool enableAllChannelAdaptiveFilter; // adaptive filter for all channels. validValues => [true..false] 442 bool enableRgbAdaptiveFilter; // adaptive filter for all channels. validValues => [true..false] 443 bool enable8TapAdaptiveFilter; // enable 8-tap filter. validValues => [true..false] 444 bool enableUV8TapFilter; // enable 8-tap filter on UV/RB channels. validValues => [true..false] 445 bool writebackFormat; // true sampleunorm, false standard. validValues => [true..false] 446 bool writebackMode; // true avs, false ief. validValues => [true..false] 447 uint8_t stateSelection; // 0=>first,1=>second scaler8x8 state. validValues => [0..1] 448 449 // Image enhancement filter settings. 450 bool enableIef; // image enhancement filter enable. validValues => [true..false] 451 bool iefType; // true "basic" or false "advanced". validValues => [true..false] 452 bool enableIefSmooth; // true based on 3x3, false based on 5x5 validValues => [true..false] 453 float r3cCoefficient; // smoothing coeffient. Valid values => [0.0..0.96875] 454 float r3xCoefficient; // smoothing coeffient. Valid values => [0.0..0.96875] 455 float r5cCoefficient; // smoothing coeffient. validValues => [0.0..0.96875] 456 float r5cxCoefficient; // smoothing coeffient. validValues => [0.0..0.96875] 457 float r5xCoefficient; // smoothing coeffient. validValues => [0.0..0.96875] 458 459 // Edge processing settings. 460 uint8_t strongEdgeThreshold; // validValues => [0..64] 461 uint8_t strongEdgeWeight; // Sharpening strength when a strong edge. validValues => [0..7] 462 uint8_t weakEdgeThreshold; // validValues => [0..64] 463 uint8_t regularEdgeWeight; // Sharpening strength when a weak edge. validValues => [0..7] 464 uint8_t nonEdgeWeight; // Sharpening strength when no edge. validValues => [0..7] 465 466 // Chroma key. 467 bool enableChromaKey; // Chroma keying be performed. validValues => [true..false] 468 uint8_t chromaKeyIndex; // ChromaKey Table entry. validValues => [0..3] 469 470 // Skin tone settings. 471 bool enableSkinTone; // SkinToneTunedIEF_Enable. validValues => [true..false] 472 bool enableVySkinToneDetection; // Enables STD in the VY subspace. validValues => [true..false] 473 bool skinDetailFactor; // validValues => [true..false] 474 uint8_t skinTypesMargin; // validValues => [0..255] 475 uint8_t skinTypesThreshold; // validValues => [0..255] 476 477 // Miscellaneous settings. 478 uint8_t gainFactor; // validValues => [0..63] 479 uint8_t globalNoiseEstimation; // validValues => [0..255] 480 bool mrBoost; // validValues => [true..false] 481 uint8_t mrSmoothThreshold; // validValues => [0..3] 482 uint8_t mrThreshold; 483 bool steepnessBoost; // validValues => [true..false] 484 uint8_t steepnessThreshold; // validValues => [0..15] 485 bool textureCoordinateMode; // true: clamp, false: mirror. validValues => [true..false] 486 uint8_t maxHue; // Rectangle half width. validValued => [0..63] 487 uint8_t maxSaturation; // Rectangle half length. validValued => [0..63] 488 int angles; // validValued => [0..360] 489 uint8_t diamondMargin ; // validValues => [0..7] 490 char diamondDu; // Rhombus center shift in the sat-direction. validValues => [-64..63] 491 char diamondDv; // Rhombus center shift in the hue-direction. validValues => [-64..63] 492 float diamondAlpha; // validValues => [0.0..4.0] 493 uint8_t diamondThreshold; // validValues => [0..63] 494 uint8_t rectangleMargin; // validValues => [0..7] 495 uint8_t rectangleMidpoint[2]; // validValues => [[0..255, 0..255]] 496 float vyInverseMargin[2]; // validValues => [[0.0..1.0, 0.0..1.0]] 497 498 // Piecewise linear function settings. 499 uint8_t piecewiseLinearYPoints[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]] 500 float piecewiseLinearYSlopes[2]; // validValues => [[-4.0...4.0, -4.0...4.0]] 501 uint8_t piecewiseLinearPointsLower[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]] 502 uint8_t piecewiseLinearPointsUpper[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]] 503 float piecewiseLinearSlopesLower[4]; // validValues => [[-4.0...4.0, -4.0...4.0, -4.0...4.0, -4.0...4.0]] 504 float piecewiseLinearSlopesUpper[4]; // validValues => [[-4.0...4.0, -4.0...4.0, -4.0...4.0, -4.0...4.0]] 505 uint8_t piecewiseLinearBiasesLower[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]] 506 uint8_t piecewiseLinearBiasesUpper[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]] 507 508 // AVS non-pipelined states. 509 uint8_t defaultSharpnessLevel; // default coefficient between smooth and sharp filtering. validValues => [0..255] 510 bool enableXAdaptiveFilter; // validValues => [true, false] 511 bool enableYAdaptiveFilter; // validValues => [true, false] 512 uint8_t maxDerivative4Pixels; // lower boundary of the smooth 4 pixel area. validValues => [0..255] 513 uint8_t maxDerivative8Pixels; // lower boundary of the smooth 8 pixel area. validValues => [0..255] 514 uint8_t transitionArea4Pixels; // used in adaptive filtering to specify the width of the transition area for the 4 pixel calculation. validValues => [0..8] 515 uint8_t transitionArea8Pixels; // Used in adaptive filtering to specify the width of the transition area for the 8 pixel calculation. validValues => [0..8] 516 CM_AVS_COEFF_TABLE table0X[CM_NUM_COEFF_ROWS_SKL]; 517 CM_AVS_COEFF_TABLE table0Y[CM_NUM_COEFF_ROWS_SKL]; 518 CM_AVS_COEFF_TABLE table1X[CM_NUM_COEFF_ROWS_SKL]; 519 CM_AVS_COEFF_TABLE table1Y[CM_NUM_COEFF_ROWS_SKL]; 520 }; 521 522 /* 523 * MISC SAMPLER8x8 State 524 */ 525 typedef struct _CM_MISC_STATE 526 { 527 //uint32_t 1 528 union 529 { 530 struct 531 { 532 uint32_t Row0 : 16; 533 uint32_t Reserved : 8; 534 uint32_t Width : 4; 535 uint32_t Height : 4; 536 }; 537 struct 538 { 539 uint32_t value; 540 }; 541 } DW0; 542 543 //uint32_t 1 544 union 545 { 546 struct 547 { 548 uint32_t Row1 : 16; 549 uint32_t Row2 : 16; 550 }; 551 struct 552 { 553 uint32_t value; 554 }; 555 } DW1; 556 557 //uint32_t 2 558 union 559 { 560 struct 561 { 562 uint32_t Row3 : 16; 563 uint32_t Row4 : 16; 564 }; 565 struct 566 { 567 uint32_t value; 568 }; 569 } DW2; 570 571 //uint32_t 3 572 union 573 { 574 struct 575 { 576 uint32_t Row5 : 16; 577 uint32_t Row6 : 16; 578 }; 579 struct 580 { 581 uint32_t value; 582 }; 583 } DW3; 584 585 //uint32_t 4 586 union 587 { 588 struct 589 { 590 uint32_t Row7 : 16; 591 uint32_t Row8 : 16; 592 }; 593 struct 594 { 595 uint32_t value; 596 }; 597 } DW4; 598 599 //uint32_t 5 600 union 601 { 602 struct 603 { 604 uint32_t Row9 : 16; 605 uint32_t Row10 : 16; 606 }; 607 struct 608 { 609 uint32_t value; 610 }; 611 } DW5; 612 613 //uint32_t 6 614 union 615 { 616 struct 617 { 618 uint32_t Row11 : 16; 619 uint32_t Row12 : 16; 620 }; 621 struct 622 { 623 uint32_t value; 624 }; 625 } DW6; 626 627 //uint32_t 7 628 union 629 { 630 struct 631 { 632 uint32_t Row13 : 16; 633 uint32_t Row14 : 16; 634 }; 635 struct 636 { 637 uint32_t value; 638 }; 639 } DW7; 640 } CM_MISC_STATE; 641 642 /* 643 * CONVOLVE STATE DATA STRUCTURES 644 */ 645 typedef struct _CM_MISC_STATE_MSG 646 { 647 //uint32_t 0 648 union 649 { 650 struct 651 { 652 uint32_t Row0 : 16; 653 uint32_t Reserved : 8; 654 uint32_t Width : 4; 655 uint32_t Height : 4; 656 }; 657 struct 658 { 659 uint32_t value; 660 }; 661 }DW0; 662 663 //uint32_t 1 664 union 665 { 666 struct 667 { 668 uint32_t Row1 : 16; 669 uint32_t Row2 : 16; 670 }; 671 struct 672 { 673 uint32_t value; 674 }; 675 } DW1; 676 677 //uint32_t 2 678 union 679 { 680 struct 681 { 682 uint32_t Row3 : 16; 683 uint32_t Row4 : 16; 684 }; 685 struct 686 { 687 uint32_t value; 688 }; 689 } DW2; 690 691 //uint32_t 3 692 union 693 { 694 struct 695 { 696 uint32_t Row5 : 16; 697 uint32_t Row6 : 16; 698 }; 699 struct 700 { 701 uint32_t value; 702 }; 703 } DW3; 704 705 //uint32_t 4 706 union 707 { 708 struct 709 { 710 uint32_t Row7 : 16; 711 uint32_t Row8 : 16; 712 }; 713 struct 714 { 715 uint32_t value; 716 }; 717 } DW4; 718 719 //uint32_t 5 720 union 721 { 722 struct 723 { 724 uint32_t Row9 : 16; 725 uint32_t Row10 : 16; 726 }; 727 struct 728 { 729 uint32_t value; 730 }; 731 } DW5; 732 733 //uint32_t 6 734 union 735 { 736 struct 737 { 738 uint32_t Row11 : 16; 739 uint32_t Row12 : 16; 740 }; 741 struct 742 { 743 uint32_t value; 744 }; 745 } DW6; 746 747 //uint32_t 7 748 union 749 { 750 struct 751 { 752 uint32_t Row13 : 16; 753 uint32_t Row14 : 16; 754 }; 755 struct 756 { 757 uint32_t value; 758 }; 759 } DW7; 760 } CM_MISC_STATE_MSG; 761 762 struct CM_SAMPLER_8X8_DESCR 763 { 764 CM_SAMPLER_STATE_TYPE stateType; 765 union 766 { 767 CM_AVS_STATE_MSG *avs; 768 CM_AVS_STATE_MSG_EX *avsEx; 769 CM_CONVOLVE_STATE_MSG *conv; 770 CM_MISC_STATE_MSG *misc; //ERODE/DILATE/MINMAX 771 }; 772 }; 773 #endif // #ifndef CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_ 774