blob: c3847cb56158f75d9ce8cc9e06e14c82c1f8b867 [file] [log] [blame]
/*
* Copyright (c) 2017, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_
#define CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_
#include "cm_include.h"
#include "cm_def_os.h"
//CM runtime version returning to user
#define CM_1_0 100
#define CM_2_0 200
#define CM_2_1 201
#define CM_2_2 202
#define CM_2_3 203
#define CM_2_4 204
#define CM_3_0 300
#define CM_4_0 400
#define CM_5_0 500
#define CM_6_0 600
#define CM_7_0 700
#define CM_7_2 702 //for MDFRT API refreshment.
#define CURRENT_CM_VERSION (CM_7_2)
//CM DDI version in UMD layer
#define CM_DDI_1_0 100
#define CM_DDI_1_1 101
#define CM_DDI_1_2 102
#define CM_DDI_1_3 103
#define CM_DDI_1_4 104
#define CM_DDI_2_0 200
#define CM_DDI_2_1 201
#define CM_DDI_2_2 202
#define CM_DDI_2_3 203
#define CM_DDI_2_4 204
#define CM_DDI_3_0 300
#define CM_DDI_4_0 400
#define CM_DDI_5_0 500
#define CM_DDI_6_0 600
#define CM_DDI_7_0 700
#define CM_DDI_7_2 702 //for MDFRT API refreshment.
//Error code definition
typedef enum _CM_RETURN_CODE
{
CM_SUCCESS = 0,
/*
* RANGE -1 ~ -9999 FOR EXTERNAL ERROR CODE
*/
CM_FAILURE = -1,
CM_NOT_IMPLEMENTED = -2,
CM_SURFACE_ALLOCATION_FAILURE = -3,
CM_OUT_OF_HOST_MEMORY = -4,
CM_SURFACE_FORMAT_NOT_SUPPORTED = -5,
CM_EXCEED_SURFACE_AMOUNT = -6,
CM_EXCEED_KERNEL_ARG_AMOUNT = -7,
CM_EXCEED_KERNEL_ARG_SIZE_IN_BYTE = -8,
CM_INVALID_ARG_INDEX = -9,
CM_INVALID_ARG_VALUE = -10,
CM_INVALID_ARG_SIZE = -11,
CM_INVALID_THREAD_INDEX = -12,
CM_INVALID_WIDTH = -13,
CM_INVALID_HEIGHT = -14,
CM_INVALID_DEPTH = -15,
CM_INVALID_COMMON_ISA = -16,
CM_OPEN_VIDEO_DEVICE_FAILURE = -17,
CM_VIDEO_DEVICE_LOCKED = -18, // Video device is already locked.
CM_LOCK_VIDEO_DEVICE_FAILURE = -19, // Video device is not locked but can't be locked.
CM_EXCEED_SAMPLER_AMOUNT = -20,
CM_EXCEED_MAX_KERNEL_PER_ENQUEUE = -21,
CM_EXCEED_MAX_KERNEL_SIZE_IN_BYTE = -22,
CM_EXCEED_MAX_THREAD_AMOUNT_PER_ENQUEUE = -23,
CM_EXCEED_VME_STATE_G6_AMOUNT = -24,
CM_INVALID_THREAD_SPACE = -25,
CM_EXCEED_MAX_TIMEOUT = -26,
CM_JITDLL_LOAD_FAILURE = -27,
CM_JIT_COMPILE_FAILURE = -28,
CM_JIT_COMPILESIM_FAILURE = -29,
CM_INVALID_THREAD_GROUP_SPACE = -30,
CM_THREAD_ARG_NOT_ALLOWED = -31,
CM_INVALID_GLOBAL_BUFFER_INDEX = -32,
CM_INVALID_BUFFER_HANDLER = -33,
CM_EXCEED_MAX_SLM_SIZE = -34,
CM_JITDLL_OLDER_THAN_ISA = -35,
CM_INVALID_HARDWARE_THREAD_NUMBER = -36,
CM_GTPIN_INVOKE_FAILURE = -37,
CM_INVALIDE_L3_CONFIGURATION = -38,
CM_INVALID_TEXTURE2D_USAGE = -39,
CM_INTEL_GFX_NOTFOUND = -40,
CM_GPUCOPY_INVALID_SYSMEM = -41,
CM_GPUCOPY_INVALID_WIDTH = -42,
CM_GPUCOPY_INVALID_STRIDE = -43,
CM_EVENT_DRIVEN_FAILURE = -44,
CM_LOCK_SURFACE_FAIL = -45, // Lock surface failed
CM_INVALID_GENX_BINARY = -46,
CM_FEATURE_NOT_SUPPORTED_IN_DRIVER = -47, // driver out-of-sync
CM_QUERY_DLL_VERSION_FAILURE = -48, //Fail in getting DLL file version
CM_KERNELPAYLOAD_PERTHREADARG_MUTEX_FAIL = -49,
CM_KERNELPAYLOAD_PERKERNELARG_MUTEX_FAIL = -50,
CM_KERNELPAYLOAD_SETTING_FAILURE = -51,
CM_KERNELPAYLOAD_SURFACE_INVALID_BTINDEX = -52,
CM_NOT_SET_KERNEL_ARGUMENT = -53,
CM_GPUCOPY_INVALID_SURFACES = -54,
CM_GPUCOPY_INVALID_SIZE = -55,
CM_GPUCOPY_OUT_OF_RESOURCE = -56,
CM_INVALID_VIDEO_DEVICE = -57,
CM_SURFACE_DELAY_DESTROY = -58,
CM_INVALID_VEBOX_STATE = -59,
CM_INVALID_VEBOX_SURFACE = -60,
CM_FEATURE_NOT_SUPPORTED_BY_HARDWARE = -61,
CM_RESOURCE_USAGE_NOT_SUPPORT_READWRITE = -62,
CM_MULTIPLE_MIPLEVELS_NOT_SUPPORTED = -63,
CM_INVALID_UMD_CONTEXT = -64,
CM_INVALID_LIBVA_SURFACE = -65,
CM_INVALID_LIBVA_INITIALIZE = -66,
CM_KERNEL_THREADSPACE_NOT_SET = -67,
CM_INVALID_KERNEL_THREADSPACE = -68,
CM_KERNEL_THREADSPACE_THREADS_NOT_ASSOCIATED= -69,
CM_KERNEL_THREADSPACE_INTEGRITY_FAILED = -70,
CM_INVALID_USERPROVIDED_GENBINARY = -71,
CM_INVALID_PRIVATE_DATA = -72,
CM_INVALID_MOS_RESOURCE_HANDLE = -73,
CM_SURFACE_CACHED = -74,
CM_SURFACE_IN_USE = -75,
CM_INVALID_GPUCOPY_KERNEL = -76,
CM_INVALID_DEPENDENCY_WITH_WALKING_PATTERN = -77,
CM_INVALID_MEDIA_WALKING_PATTERN = -78,
CM_FAILED_TO_ALLOCATE_SVM_BUFFER = -79,
CM_EXCEED_MAX_POWER_OPTION_FOR_PLATFORM = -80,
CM_INVALID_KERNEL_THREADGROUPSPACE = -81,
CM_INVALID_KERNEL_SPILL_CODE = -82,
CM_UMD_DRIVER_NOT_SUPPORTED = -83,
CM_INVALID_GPU_FREQUENCY_VALUE = -84,
CM_SYSTEM_MEMORY_NOT_4KPAGE_ALIGNED = -85,
CM_KERNEL_ARG_SETTING_FAILED = -86,
CM_NO_AVAILABLE_SURFACE = -87,
CM_VA_SURFACE_NOT_SUPPORTED = -88,
CM_TOO_MUCH_THREADS = -89,
CM_NULL_POINTER = -90,
CM_EXCEED_MAX_NUM_2D_ALIASES = -91,
CM_INVALID_PARAM_SIZE = -92,
CM_GT_UNSUPPORTED = -93,
CM_GTPIN_FLAG_NO_LONGER_SUPPORTED = -94,
CM_PLATFORM_UNSUPPORTED_FOR_API = -95,
CM_TASK_MEDIA_RESET = -96,
CM_KERNELPAYLOAD_SAMPLER_INVALID_BTINDEX = -97,
CM_EXCEED_MAX_NUM_BUFFER_ALIASES = -98,
CM_SYSTEM_MEMORY_NOT_4PIXELS_ALIGNED = -99,
CM_FAILED_TO_CREATE_CURBE_SURFACE = -100,
CM_INVALID_CAP_NAME = -101,
CM_INVALID_PARAM_FOR_CREATE_QUEUE_EX = -102,
CM_INVALID_CREATE_OPTION_FOR_BUFFER_STATELESS = -103,
CM_INVALID_KERNEL_ARG_POINTER = -104,
CM_LOAD_LIBRARY_FAILED = -105,
CM_NO_SUPPORTED_ADAPTER = -106,
/*
* RANGE -10000 ~ -19999 FOR INTERNAL ERROR CODE
*/
CM_INTERNAL_ERROR_CODE_OFFSET = -10000,
/*
* RANGE <=-20000 AREAD FOR MOST STATUS CONVERSION
*/
CM_MOS_STATUS_CONVERTED_CODE_OFFSET = -20000
} CM_RETURN_CODE;
#define __CODEGEN_UNIQUE(name) _NAME_LABEL_(name, __LINE__)
#define BITFIELD_RANGE( startbit, endbit ) ((endbit)-(startbit)+1)
#define BITFIELD_BIT(bit) 1
#define CM_MIN_SURF_WIDTH 1
#define CM_MIN_SURF_HEIGHT 1
#define CM_MIN_SURF_DEPTH 2
#define CM_MAX_1D_SURF_WIDTH 0x80000000 // 2^31 2 GB
#define CM_MAX_3D_SURF_WIDTH 2048
#define CM_MAX_3D_SURF_HEIGHT 2048
#define CM_MAX_3D_SURF_DEPTH 2048
// hard ceiling
#define CM_MAX_OPTION_SIZE_IN_BYTE 512
#define CM_MAX_KERNEL_NAME_SIZE_IN_BYTE 256
#define CM_MAX_ISA_FILE_NAME_SIZE_IN_BYTE 256
#define CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM 0
#define CM_BUFFER_STATELESS_CREATE_OPTION_SYS_MEM 1
#define CM_BUFFER_STATELESS_CREATE_OPTION_DEGAULT CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM
struct CM_HAL_MAX_VALUES
{
uint32_t maxTasks; // [in] Max Tasks
uint32_t maxKernelsPerTask; // [in] Max kernels per task
uint32_t maxKernelBinarySize; // [in] Max kernel binary size
uint32_t maxSpillSizePerHwThread; // [in] Max spill size per thread
uint32_t maxSamplerTableSize; // [in] Max sampler table size
uint32_t maxBufferTableSize; // [in] Buffer table Size
uint32_t max2DSurfaceTableSize; // [in] Buffer table Size
uint32_t max3DSurfaceTableSize; // [in] Buffer table Size
uint32_t maxArgsPerKernel; // [in] Max arguments per kernel
uint32_t maxArgByteSizePerKernel; // [in] Max argument size in byte per kernel
uint32_t maxSurfacesPerKernel; // [in] Max Surfaces Per Kernel
uint32_t maxSamplersPerKernel; // [in] Max Samplers per kernel
uint32_t maxHwThreads; // [in] Max HW threads
uint32_t maxUserThreadsPerTask; // [in] Max user threads per task
uint32_t maxUserThreadsPerTaskNoThreadArg; // [in] Max user threads per task without a thread arg
};
typedef CM_HAL_MAX_VALUES *PCM_HAL_MAX_VALUES;
//---------------------------------------------------------------------------
//! HAL CM Max Values extention which has more entries which are not included
//! in CM_HAL_MAX_VALUES
//---------------------------------------------------------------------------
struct CM_HAL_MAX_VALUES_EX
{
uint32_t max2DUPSurfaceTableSize; // [in] Max 2D UP surface table Size
uint32_t maxSampler8x8TableSize; // [in] Max sampler 8x8 table size
uint32_t maxCURBESizePerKernel; // [in] Max CURBE size per kernel
uint32_t maxCURBESizePerTask; // [in] Max CURBE size per task
uint32_t maxIndirectDataSizePerKernel; // [in] Max indirect data size per kernel
uint32_t maxUserThreadsPerMediaWalker; // [in] Max user threads per media walker
uint32_t maxUserThreadsPerThreadGroup; // [in] Max user threads per thread group
};
typedef CM_HAL_MAX_VALUES_EX *PCM_HAL_MAX_VALUES_EX;
class CLock
{
public:
CLock(CSync &refSync) : m_refSync(refSync) { Lock(); }
~CLock() { Unlock(); }
private:
CSync &m_refSync; // Synchronization object
CLock(const CLock &refcSource);
CLock &operator=(const CLock &refcSource);
void Lock() { m_refSync.Acquire(); }
void Unlock() { m_refSync.Release(); }
};
typedef struct _CM_SAMPLER_STATE
{
CM_TEXTURE_FILTER_TYPE minFilterType;
CM_TEXTURE_FILTER_TYPE magFilterType;
CM_TEXTURE_ADDRESS_TYPE addressU;
CM_TEXTURE_ADDRESS_TYPE addressV;
CM_TEXTURE_ADDRESS_TYPE addressW;
} CM_SAMPLER_STATE;
typedef enum _CM_PIXEL_TYPE
{
CM_PIXEL_UINT,
CM_PIXEL_SINT,
CM_PIXEL_OTHER
} CM_PIXEL_TYPE;
typedef struct _CM_SAMPLER_STATE_EX
{
CM_TEXTURE_FILTER_TYPE minFilterType;
CM_TEXTURE_FILTER_TYPE magFilterType;
CM_TEXTURE_ADDRESS_TYPE addressU;
CM_TEXTURE_ADDRESS_TYPE addressV;
CM_TEXTURE_ADDRESS_TYPE addressW;
CM_PIXEL_TYPE surfaceFormat;
union
{
uint32_t borderColorRedU;
int32_t borderColorRedS;
float borderColorRedF;
};
union
{
uint32_t borderColorGreenU;
int32_t borderColorGreenS;
float borderColorGreenF;
};
union
{
uint32_t borderColorBlueU;
int32_t borderColorBlueS;
float borderColorBlueF;
};
union
{
uint32_t borderColorAlphaU;
int32_t borderColorAlphaS;
float borderColorAlphaF;
};
} CM_SAMPLER_STATE_EX;
//struct used by both CmDevice and CmSampler8x8
typedef struct _CM_AVS_COEFF_TABLE
{
float filterCoeff_0_0;
float filterCoeff_0_1;
float filterCoeff_0_2;
float filterCoeff_0_3;
float filterCoeff_0_4;
float filterCoeff_0_5;
float filterCoeff_0_6;
float filterCoeff_0_7;
} CM_AVS_COEFF_TABLE;
#define CM_NUM_COEFF_ROWS 17
#define CM_NUM_COEFF_ROWS_SKL 32
typedef struct _CM_AVS_NONPIPLINED_STATE
{
bool bypassXAF;
bool bypassYAF;
uint8_t defaultSharpLvl;
uint8_t maxDerivative4Pixels;
uint8_t maxDerivative8Pixels;
uint8_t transitionArea4Pixels;
uint8_t transitionArea8Pixels;
CM_AVS_COEFF_TABLE Tbl0X[ CM_NUM_COEFF_ROWS_SKL ];
CM_AVS_COEFF_TABLE Tbl0Y[ CM_NUM_COEFF_ROWS_SKL ];
CM_AVS_COEFF_TABLE Tbl1X[ CM_NUM_COEFF_ROWS_SKL ];
CM_AVS_COEFF_TABLE Tbl1Y[ CM_NUM_COEFF_ROWS_SKL ];
bool enableRgbAdaptive;
bool adaptiveFilterAllChannels;
} CM_AVS_NONPIPLINED_STATE;
enum CM_SAMPLER_STATE_TYPE {
CM_SAMPLER8X8_AVS = 0,
CM_SAMPLER8X8_CONV = 1,
CM_SAMPLER8X8_MISC = 3,
CM_SAMPLER8X8_CONV1DH = 4,
CM_SAMPLER8X8_CONV1DV = 5,
CM_SAMPLER8X8_AVS_EX = 6,
CM_SAMPLER8X8_NONE
};
typedef struct _CM_AVS_STATE_MSG
{
bool avsType; //true nearest, false adaptive
bool eightTapAFEnable; //HSW+
bool bypassIEF; //ignored for BWL, moved to sampler8x8 payload.
bool shuffleOutputWriteback; //SKL mode only to be set when AVS msg sequence is 4x4 or 8x4
bool hdcDirectWriteEnable;
unsigned short gainFactor;
unsigned char globalNoiseEstm;
unsigned char strongEdgeThr;
unsigned char weakEdgeThr;
unsigned char strongEdgeWght;
unsigned char regularWght;
unsigned char nonEdgeWght;
unsigned short r3xCoefficient;
unsigned short r3cCoefficient;
unsigned short r5xCoefficient;
unsigned short r5cxCoefficient;
unsigned short r5cCoefficient;
//For Non-piplined states
unsigned short stateID;
CM_AVS_NONPIPLINED_STATE * avsState;
} CM_AVS_STATE_MSG;
//*-----------------------------------------------------------------------------
//| CM Convolve type for SKL+
//*-----------------------------------------------------------------------------
typedef enum _CM_CONVOLVE_SKL_TYPE
{
CM_CONVOLVE_SKL_TYPE_2D = 0,
CM_CONVOLVE_SKL_TYPE_1D = 1,
CM_CONVOLVE_SKL_TYPE_1P = 2
} CM_CONVOLVE_SKL_TYPE;
typedef struct _CM_CONVOLVE_COEFF_TABLE
{
float filterCoeff_0_0;
float filterCoeff_0_1;
float filterCoeff_0_2;
float filterCoeff_0_3;
float filterCoeff_0_4;
float filterCoeff_0_5;
float filterCoeff_0_6;
float filterCoeff_0_7;
float filterCoeff_0_8;
float filterCoeff_0_9;
float filterCoeff_0_10;
float filterCoeff_0_11;
float filterCoeff_0_12;
float filterCoeff_0_13;
float filterCoeff_0_14;
float filterCoeff_0_15;
float filterCoeff_0_16;
float filterCoeff_0_17;
float filterCoeff_0_18;
float filterCoeff_0_19;
float filterCoeff_0_20;
float filterCoeff_0_21;
float filterCoeff_0_22;
float filterCoeff_0_23;
float filterCoeff_0_24;
float filterCoeff_0_25;
float filterCoeff_0_26;
float filterCoeff_0_27;
float filterCoeff_0_28;
float filterCoeff_0_29;
float filterCoeff_0_30;
float filterCoeff_0_31;
} CM_CONVOLVE_COEFF_TABLE;
#define CM_NUM_CONVOLVE_ROWS 16
#define CM_NUM_CONVOLVE_ROWS_SKL 32
typedef struct _CM_CONVOLVE_STATE_MSG
{
bool coeffSize; //true 16-bit, false 8-bit
int8_t sclDwnValue; //Scale down value
int8_t width; //Kernel Width
int8_t height; //Kernel Height
//SKL mode
bool isVertical32Mode;
bool isHorizontal32Mode;
CM_CONVOLVE_SKL_TYPE nConvolveType;
CM_CONVOLVE_COEFF_TABLE table[CM_NUM_CONVOLVE_ROWS_SKL];
} CM_CONVOLVE_STATE_MSG;
struct CM_AVS_STATE_MSG_EX
{
CM_RT_API CM_AVS_STATE_MSG_EX();
bool enableAllChannelAdaptiveFilter; // adaptive filter for all channels. validValues => [true..false]
bool enableRgbAdaptiveFilter; // adaptive filter for all channels. validValues => [true..false]
bool enable8TapAdaptiveFilter; // enable 8-tap filter. validValues => [true..false]
bool enableUV8TapFilter; // enable 8-tap filter on UV/RB channels. validValues => [true..false]
bool writebackFormat; // true sampleunorm, false standard. validValues => [true..false]
bool writebackMode; // true avs, false ief. validValues => [true..false]
uint8_t stateSelection; // 0=>first,1=>second scaler8x8 state. validValues => [0..1]
// Image enhancement filter settings.
bool enableIef; // image enhancement filter enable. validValues => [true..false]
bool iefType; // true "basic" or false "advanced". validValues => [true..false]
bool enableIefSmooth; // true based on 3x3, false based on 5x5 validValues => [true..false]
float r3cCoefficient; // smoothing coeffient. Valid values => [0.0..0.96875]
float r3xCoefficient; // smoothing coeffient. Valid values => [0.0..0.96875]
float r5cCoefficient; // smoothing coeffient. validValues => [0.0..0.96875]
float r5cxCoefficient; // smoothing coeffient. validValues => [0.0..0.96875]
float r5xCoefficient; // smoothing coeffient. validValues => [0.0..0.96875]
// Edge processing settings.
uint8_t strongEdgeThreshold; // validValues => [0..64]
uint8_t strongEdgeWeight; // Sharpening strength when a strong edge. validValues => [0..7]
uint8_t weakEdgeThreshold; // validValues => [0..64]
uint8_t regularEdgeWeight; // Sharpening strength when a weak edge. validValues => [0..7]
uint8_t nonEdgeWeight; // Sharpening strength when no edge. validValues => [0..7]
// Chroma key.
bool enableChromaKey; // Chroma keying be performed. validValues => [true..false]
uint8_t chromaKeyIndex; // ChromaKey Table entry. validValues => [0..3]
// Skin tone settings.
bool enableSkinTone; // SkinToneTunedIEF_Enable. validValues => [true..false]
bool enableVySkinToneDetection; // Enables STD in the VY subspace. validValues => [true..false]
bool skinDetailFactor; // validValues => [true..false]
uint8_t skinTypesMargin; // validValues => [0..255]
uint8_t skinTypesThreshold; // validValues => [0..255]
// Miscellaneous settings.
uint8_t gainFactor; // validValues => [0..63]
uint8_t globalNoiseEstimation; // validValues => [0..255]
bool mrBoost; // validValues => [true..false]
uint8_t mrSmoothThreshold; // validValues => [0..3]
uint8_t mrThreshold;
bool steepnessBoost; // validValues => [true..false]
uint8_t steepnessThreshold; // validValues => [0..15]
bool textureCoordinateMode; // true: clamp, false: mirror. validValues => [true..false]
uint8_t maxHue; // Rectangle half width. validValued => [0..63]
uint8_t maxSaturation; // Rectangle half length. validValued => [0..63]
int angles; // validValued => [0..360]
uint8_t diamondMargin ; // validValues => [0..7]
char diamondDu; // Rhombus center shift in the sat-direction. validValues => [-64..63]
char diamondDv; // Rhombus center shift in the hue-direction. validValues => [-64..63]
float diamondAlpha; // validValues => [0.0..4.0]
uint8_t diamondThreshold; // validValues => [0..63]
uint8_t rectangleMargin; // validValues => [0..7]
uint8_t rectangleMidpoint[2]; // validValues => [[0..255, 0..255]]
float vyInverseMargin[2]; // validValues => [[0.0..1.0, 0.0..1.0]]
// Piecewise linear function settings.
uint8_t piecewiseLinearYPoints[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]]
float piecewiseLinearYSlopes[2]; // validValues => [[-4.0...4.0, -4.0...4.0]]
uint8_t piecewiseLinearPointsLower[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]]
uint8_t piecewiseLinearPointsUpper[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]]
float piecewiseLinearSlopesLower[4]; // validValues => [[-4.0...4.0, -4.0...4.0, -4.0...4.0, -4.0...4.0]]
float piecewiseLinearSlopesUpper[4]; // validValues => [[-4.0...4.0, -4.0...4.0, -4.0...4.0, -4.0...4.0]]
uint8_t piecewiseLinearBiasesLower[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]]
uint8_t piecewiseLinearBiasesUpper[4]; // validValues => [[0..255, 0..255, 0..255, 0..255]]
// AVS non-pipelined states.
uint8_t defaultSharpnessLevel; // default coefficient between smooth and sharp filtering. validValues => [0..255]
bool enableXAdaptiveFilter; // validValues => [true, false]
bool enableYAdaptiveFilter; // validValues => [true, false]
uint8_t maxDerivative4Pixels; // lower boundary of the smooth 4 pixel area. validValues => [0..255]
uint8_t maxDerivative8Pixels; // lower boundary of the smooth 8 pixel area. validValues => [0..255]
uint8_t transitionArea4Pixels; // used in adaptive filtering to specify the width of the transition area for the 4 pixel calculation. validValues => [0..8]
uint8_t transitionArea8Pixels; // Used in adaptive filtering to specify the width of the transition area for the 8 pixel calculation. validValues => [0..8]
CM_AVS_COEFF_TABLE table0X[CM_NUM_COEFF_ROWS_SKL];
CM_AVS_COEFF_TABLE table0Y[CM_NUM_COEFF_ROWS_SKL];
CM_AVS_COEFF_TABLE table1X[CM_NUM_COEFF_ROWS_SKL];
CM_AVS_COEFF_TABLE table1Y[CM_NUM_COEFF_ROWS_SKL];
};
/*
* MISC SAMPLER8x8 State
*/
typedef struct _CM_MISC_STATE
{
//uint32_t 1
union
{
struct
{
uint32_t Row0 : 16;
uint32_t Reserved : 8;
uint32_t Width : 4;
uint32_t Height : 4;
};
struct
{
uint32_t value;
};
} DW0;
//uint32_t 1
union
{
struct
{
uint32_t Row1 : 16;
uint32_t Row2 : 16;
};
struct
{
uint32_t value;
};
} DW1;
//uint32_t 2
union
{
struct
{
uint32_t Row3 : 16;
uint32_t Row4 : 16;
};
struct
{
uint32_t value;
};
} DW2;
//uint32_t 3
union
{
struct
{
uint32_t Row5 : 16;
uint32_t Row6 : 16;
};
struct
{
uint32_t value;
};
} DW3;
//uint32_t 4
union
{
struct
{
uint32_t Row7 : 16;
uint32_t Row8 : 16;
};
struct
{
uint32_t value;
};
} DW4;
//uint32_t 5
union
{
struct
{
uint32_t Row9 : 16;
uint32_t Row10 : 16;
};
struct
{
uint32_t value;
};
} DW5;
//uint32_t 6
union
{
struct
{
uint32_t Row11 : 16;
uint32_t Row12 : 16;
};
struct
{
uint32_t value;
};
} DW6;
//uint32_t 7
union
{
struct
{
uint32_t Row13 : 16;
uint32_t Row14 : 16;
};
struct
{
uint32_t value;
};
} DW7;
} CM_MISC_STATE;
/*
* CONVOLVE STATE DATA STRUCTURES
*/
typedef struct _CM_MISC_STATE_MSG
{
//uint32_t 0
union
{
struct
{
uint32_t Row0 : 16;
uint32_t Reserved : 8;
uint32_t Width : 4;
uint32_t Height : 4;
};
struct
{
uint32_t value;
};
}DW0;
//uint32_t 1
union
{
struct
{
uint32_t Row1 : 16;
uint32_t Row2 : 16;
};
struct
{
uint32_t value;
};
} DW1;
//uint32_t 2
union
{
struct
{
uint32_t Row3 : 16;
uint32_t Row4 : 16;
};
struct
{
uint32_t value;
};
} DW2;
//uint32_t 3
union
{
struct
{
uint32_t Row5 : 16;
uint32_t Row6 : 16;
};
struct
{
uint32_t value;
};
} DW3;
//uint32_t 4
union
{
struct
{
uint32_t Row7 : 16;
uint32_t Row8 : 16;
};
struct
{
uint32_t value;
};
} DW4;
//uint32_t 5
union
{
struct
{
uint32_t Row9 : 16;
uint32_t Row10 : 16;
};
struct
{
uint32_t value;
};
} DW5;
//uint32_t 6
union
{
struct
{
uint32_t Row11 : 16;
uint32_t Row12 : 16;
};
struct
{
uint32_t value;
};
} DW6;
//uint32_t 7
union
{
struct
{
uint32_t Row13 : 16;
uint32_t Row14 : 16;
};
struct
{
uint32_t value;
};
} DW7;
} CM_MISC_STATE_MSG;
struct CM_SAMPLER_8X8_DESCR
{
CM_SAMPLER_STATE_TYPE stateType;
union
{
CM_AVS_STATE_MSG *avs;
CM_AVS_STATE_MSG_EX *avsEx;
CM_CONVOLVE_STATE_MSG *conv;
CM_MISC_STATE_MSG *misc; //ERODE/DILATE/MINMAX
};
};
#endif // #ifndef CMRTLIB_AGNOSTIC_SHARE_CM_DEF_H_