////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All rights reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: Parameter Parser V7.4.1 (8cca6579792b9fcef3bc725ff070c5ec453c7c85)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afpdlibelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "afpdlibelements.h"
#include "parametersetmanager.h"

AFPDLIBELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SetValue/GetValue Functions
/// Gets or sets the requested value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool FallbackControlEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)ROIType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "widthRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)widthRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "heightRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)heightRatio, __value, __size);
        __result = true;
    }

    return __result;
}

bool FallbackControlEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIType = (chromatixPDLibROIType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "widthRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            widthRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "heightRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            heightRatio = (float)dblValue; 
        }
    }

    return __result;
}

bool FallbackControlEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // ROIType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIType", ParameterParserDataType::Enum, (double)(UINT32)ROIType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "ROIType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)ROIType, 0));
    }

    // widthRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("widthRatio", ParameterParserDataType::Float, (double)widthRatio));
    }
    else if (PARAMETER_STRCMP(__name, "widthRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)widthRatio));
    }

    // heightRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("heightRatio", ParameterParserDataType::Float, (double)heightRatio));
    }
    else if (PARAMETER_STRCMP(__name, "heightRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)heightRatio));
    }

    return __result;
}

bool chromatixPDHWFallbackControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "controlArr") == 0)
    {
        if (__index < controlArrCount)
        {
            __result = controlArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDHWFallbackControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "controlArr") == 0)
    {
        if (__index < controlArrCount)
        {
            __result = controlArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDHWFallbackControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // controlArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("controlArr", ParameterParserDataType::Structure, true, false, controlArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "controlArr") == 0)
    {
        if (__index < controlArrCount)
        {
            __result = controlArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, controlArrCount));
        }
    }

    return __result;
}

bool chromatixMLPDControlProcess::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "useRDIPDAF") == 0)
    {
        ParameterUtils::DoubleToString((double)useRDIPDAF, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "mlpdEnabledInHWFlow") == 0)
    {
        ParameterUtils::DoubleToString((double)mlpdEnabledInHWFlow, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "alterLROrder") == 0)
    {
        ParameterUtils::DoubleToString((double)alterLROrder, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "modelNetType") == 0)
    {
        ParameterUtils::DoubleToString((double)modelNetType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gainThLow") == 0)
    {
        ParameterUtils::DoubleToString((double)gainThLow, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gainThHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)gainThHigh, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gainThMax") == 0)
    {
        ParameterUtils::DoubleToString((double)gainThMax, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThLow") == 0)
    {
        ParameterUtils::DoubleToString((double)expIndexThLow, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)expIndexThHigh, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThMax") == 0)
    {
        ParameterUtils::DoubleToString((double)expIndexThMax, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThLow") == 0)
    {
        ParameterUtils::DoubleToString((double)adrcGainThLow, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)adrcGainThHigh, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThMax") == 0)
    {
        ParameterUtils::DoubleToString((double)adrcGainThMax, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confThLow") == 0)
    {
        ParameterUtils::DoubleToString((double)confThLow, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confThHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)confThHigh, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "tradiConfTh") == 0)
    {
        ParameterUtils::DoubleToString((double)tradiConfTh, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "dccRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)dccRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "pdOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)pdOffset, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "pdMaxVarThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)pdMaxVarThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixMLPDControlProcess::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "useRDIPDAF") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            useRDIPDAF = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "mlpdEnabledInHWFlow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            mlpdEnabledInHWFlow = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "alterLROrder") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            alterLROrder = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "modelNetType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            modelNetType = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gainThLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gainThLow = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gainThHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gainThHigh = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gainThMax") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gainThMax = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            expIndexThLow = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            expIndexThHigh = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThMax") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            expIndexThMax = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            adrcGainThLow = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            adrcGainThHigh = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThMax") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            adrcGainThMax = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confThLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confThLow = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confThHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confThHigh = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "tradiConfTh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            tradiConfTh = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "dccRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            dccRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "pdOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            pdOffset = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "pdMaxVarThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            pdMaxVarThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixMLPDControlProcess::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // useRDIPDAF
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("useRDIPDAF", ParameterParserDataType::Boolean, (double)useRDIPDAF, 0));
    }
    else if (PARAMETER_STRCMP(__name, "useRDIPDAF") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)useRDIPDAF, 0));
    }

    // mlpdEnabledInHWFlow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("mlpdEnabledInHWFlow", ParameterParserDataType::Boolean, (double)mlpdEnabledInHWFlow, 0));
    }
    else if (PARAMETER_STRCMP(__name, "mlpdEnabledInHWFlow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)mlpdEnabledInHWFlow, 0));
    }

    // alterLROrder
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("alterLROrder", ParameterParserDataType::Boolean, (double)alterLROrder, 0));
    }
    else if (PARAMETER_STRCMP(__name, "alterLROrder") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)alterLROrder, 0));
    }

    // modelNetType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("modelNetType", ParameterParserDataType::Int32, (double)modelNetType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "modelNetType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)modelNetType, 0));
    }

    // gainThLow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gainThLow", ParameterParserDataType::Int32, (double)gainThLow, 0));
    }
    else if (PARAMETER_STRCMP(__name, "gainThLow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)gainThLow, 0));
    }

    // gainThHigh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gainThHigh", ParameterParserDataType::Int32, (double)gainThHigh, 0));
    }
    else if (PARAMETER_STRCMP(__name, "gainThHigh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)gainThHigh, 0));
    }

    // gainThMax
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gainThMax", ParameterParserDataType::Int32, (double)gainThMax, 0));
    }
    else if (PARAMETER_STRCMP(__name, "gainThMax") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)gainThMax, 0));
    }

    // expIndexThLow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("expIndexThLow", ParameterParserDataType::Int32, (double)expIndexThLow, 0));
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThLow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)expIndexThLow, 0));
    }

    // expIndexThHigh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("expIndexThHigh", ParameterParserDataType::Int32, (double)expIndexThHigh, 0));
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThHigh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)expIndexThHigh, 0));
    }

    // expIndexThMax
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("expIndexThMax", ParameterParserDataType::Int32, (double)expIndexThMax, 0));
    }
    else if (PARAMETER_STRCMP(__name, "expIndexThMax") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)expIndexThMax, 0));
    }

    // adrcGainThLow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("adrcGainThLow", ParameterParserDataType::Float, (double)adrcGainThLow));
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThLow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)adrcGainThLow));
    }

    // adrcGainThHigh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("adrcGainThHigh", ParameterParserDataType::Float, (double)adrcGainThHigh));
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThHigh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)adrcGainThHigh));
    }

    // adrcGainThMax
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("adrcGainThMax", ParameterParserDataType::Float, (double)adrcGainThMax));
    }
    else if (PARAMETER_STRCMP(__name, "adrcGainThMax") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)adrcGainThMax));
    }

    // confThLow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confThLow", ParameterParserDataType::Int32, (double)confThLow, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confThLow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confThLow, 0));
    }

    // confThHigh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confThHigh", ParameterParserDataType::Int32, (double)confThHigh, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confThHigh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confThHigh, 0));
    }

    // tradiConfTh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tradiConfTh", ParameterParserDataType::Int32, (double)tradiConfTh, 0));
    }
    else if (PARAMETER_STRCMP(__name, "tradiConfTh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)tradiConfTh, 0));
    }

    // dccRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("dccRatio", ParameterParserDataType::Float, (double)dccRatio));
    }
    else if (PARAMETER_STRCMP(__name, "dccRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)dccRatio));
    }

    // pdOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pdOffset", ParameterParserDataType::Float, (double)pdOffset));
    }
    else if (PARAMETER_STRCMP(__name, "pdOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)pdOffset));
    }

    // pdMaxVarThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pdMaxVarThreshold", ParameterParserDataType::Float, (double)pdMaxVarThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "pdMaxVarThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)pdMaxVarThreshold));
    }

    return __result;
}

bool chromatixTuningDarkFaceOptimization::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gamma") == 0)
    {
        ParameterUtils::DoubleToString((double)gamma, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinDark") == 0)
    {
        ParameterUtils::DoubleToString((double)topRatioBinDark, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinBright") == 0)
    {
        ParameterUtils::DoubleToString((double)topRatioBinBright, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeSmall") == 0)
    {
        ParameterUtils::DoubleToString((double)thresRoiSizeSmall, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeLarge") == 0)
    {
        ParameterUtils::DoubleToString((double)thresRoiSizeLarge, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "thresDifferenceHistStats") == 0)
    {
        ParameterUtils::DoubleToString((double)thresDifferenceHistStats, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "histCeilRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)histCeilRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "histBaseRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)histBaseRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "histFilterRAD") == 0)
    {
        ParameterUtils::DoubleToString((double)histFilterRAD, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "recoverOverwritePDBuffer") == 0)
    {
        ParameterUtils::DoubleToString((double)recoverOverwritePDBuffer, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningDarkFaceOptimization::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gamma") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gamma = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinDark") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            topRatioBinDark = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinBright") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            topRatioBinBright = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeSmall") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            thresRoiSizeSmall = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeLarge") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            thresRoiSizeLarge = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "thresDifferenceHistStats") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            thresDifferenceHistStats = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "histCeilRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            histCeilRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "histBaseRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            histBaseRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "histFilterRAD") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            histFilterRAD = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "recoverOverwritePDBuffer") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            recoverOverwritePDBuffer = (BOOL)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningDarkFaceOptimization::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // gamma
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gamma", ParameterParserDataType::Float, (double)gamma));
    }
    else if (PARAMETER_STRCMP(__name, "gamma") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gamma));
    }

    // topRatioBinDark
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("topRatioBinDark", ParameterParserDataType::Float, (double)topRatioBinDark));
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinDark") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)topRatioBinDark));
    }

    // topRatioBinBright
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("topRatioBinBright", ParameterParserDataType::Float, (double)topRatioBinBright));
    }
    else if (PARAMETER_STRCMP(__name, "topRatioBinBright") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)topRatioBinBright));
    }

    // thresRoiSizeSmall
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("thresRoiSizeSmall", ParameterParserDataType::Float, (double)thresRoiSizeSmall));
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeSmall") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)thresRoiSizeSmall));
    }

    // thresRoiSizeLarge
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("thresRoiSizeLarge", ParameterParserDataType::Float, (double)thresRoiSizeLarge));
    }
    else if (PARAMETER_STRCMP(__name, "thresRoiSizeLarge") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)thresRoiSizeLarge));
    }

    // thresDifferenceHistStats
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("thresDifferenceHistStats", ParameterParserDataType::Float, (double)thresDifferenceHistStats));
    }
    else if (PARAMETER_STRCMP(__name, "thresDifferenceHistStats") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)thresDifferenceHistStats));
    }

    // histCeilRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("histCeilRatio", ParameterParserDataType::Float, (double)histCeilRatio));
    }
    else if (PARAMETER_STRCMP(__name, "histCeilRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)histCeilRatio));
    }

    // histBaseRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("histBaseRatio", ParameterParserDataType::Float, (double)histBaseRatio));
    }
    else if (PARAMETER_STRCMP(__name, "histBaseRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)histBaseRatio));
    }

    // histFilterRAD
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("histFilterRAD", ParameterParserDataType::Int32, (double)histFilterRAD, 0));
    }
    else if (PARAMETER_STRCMP(__name, "histFilterRAD") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)histFilterRAD, 0));
    }

    // recoverOverwritePDBuffer
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("recoverOverwritePDBuffer", ParameterParserDataType::Boolean, (double)recoverOverwritePDBuffer, 0));
    }
    else if (PARAMETER_STRCMP(__name, "recoverOverwritePDBuffer") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)recoverOverwritePDBuffer, 0));
    }

    return __result;
}

bool chromatixPDHWOutputControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "preprocessMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)preprocessMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "parsedMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)parsedMode, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDHWOutputControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "preprocessMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            preprocessMode = (PreprocessOutputMode)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "parsedMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            parsedMode = (ParsedOutputMode)(UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDHWOutputControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // preprocessMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("preprocessMode", ParameterParserDataType::Enum, (double)(UINT32)preprocessMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "preprocessMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)preprocessMode, 0));
    }

    // parsedMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("parsedMode", ParameterParserDataType::Enum, (double)(UINT32)parsedMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "parsedMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)parsedMode, 0));
    }

    return __result;
}

bool chromatixPDAFHardwareResamplerInstruction::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "S") == 0)
    {
        if (__index < SCount)
        {
            ParameterUtils::DoubleToString((double)S[__index], __value, __size, 0);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < SCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)S[i], &__value[__valuePos], (INT32)(__size - __valuePos), 0);
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "O") == 0)
    {
        if (__index < OCount)
        {
            ParameterUtils::DoubleToString((double)O[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < OCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)O[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool chromatixPDAFHardwareResamplerInstruction::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "S") == 0)
    {
        if (__index < SCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                S[__index] = (INT32)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < SCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    S[__index] = (INT32)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "O") == 0)
    {
        if (__index < OCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                O[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < OCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    O[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool chromatixPDAFHardwareResamplerInstruction::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // S
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("S", ParameterParserDataType::Int32, true, false, SCount));
    }

    // O
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("O", ParameterParserDataType::Float, true, false, OCount));
    }

    return __result;
}

bool chromatixPDAFHardwareResampler::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)inputBlockWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        ParameterUtils::DoubleToString((double)inputBlockHeight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)outputBlockWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        ParameterUtils::DoubleToString((double)outputBlockHeight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "instructions") == 0)
    {
        if (__index < instructionsCount)
        {
            __result = instructions[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDAFHardwareResampler::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            inputBlockWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            inputBlockHeight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputBlockWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputBlockHeight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "instructions") == 0)
    {
        if (__index < instructionsCount)
        {
            __result = instructions[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDAFHardwareResampler::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // inputBlockWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("inputBlockWidth", ParameterParserDataType::Int32, (double)inputBlockWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)inputBlockWidth, 0));
    }

    // inputBlockHeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("inputBlockHeight", ParameterParserDataType::Int32, (double)inputBlockHeight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)inputBlockHeight, 0));
    }

    // outputBlockWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputBlockWidth", ParameterParserDataType::Int32, (double)outputBlockWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputBlockWidth, 0));
    }

    // outputBlockHeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputBlockHeight", ParameterParserDataType::Int32, (double)outputBlockHeight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputBlockHeight, 0));
    }

    // instructions
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("instructions", ParameterParserDataType::Structure, true, false, instructionsCount));
    }
    else if (PARAMETER_STRCMP(__name, "instructions") == 0)
    {
        if (__index < instructionsCount)
        {
            __result = instructions[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, instructionsCount));
        }
    }

    return __result;
}

bool chromatixPDAFHardwarePixelSeparator::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)inputBlockWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        ParameterUtils::DoubleToString((double)inputBlockHeight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)outputBlockWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        ParameterUtils::DoubleToString((double)outputBlockHeight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "pixelSpan") == 0)
    {
        ParameterUtils::DoubleToString((double)pixelSpan, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "L_map") == 0)
    {
        if (__index < L_mapCount)
        {
            ParameterUtils::DoubleToString((double)L_map[__index], __value, __size, 0);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < L_mapCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)L_map[i], &__value[__valuePos], (INT32)(__size - __valuePos), 0);
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "R_map") == 0)
    {
        if (__index < R_mapCount)
        {
            ParameterUtils::DoubleToString((double)R_map[__index], __value, __size, 0);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < R_mapCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)R_map[i], &__value[__valuePos], (INT32)(__size - __valuePos), 0);
            }
            __result = true;
        }
    }

    return __result;
}

bool chromatixPDAFHardwarePixelSeparator::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            inputBlockWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            inputBlockHeight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputBlockWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputBlockHeight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "pixelSpan") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            pixelSpan = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "L_map") == 0)
    {
        if (__index < L_mapCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                L_map[__index] = (INT32)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < L_mapCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    L_map[__index] = (INT32)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "R_map") == 0)
    {
        if (__index < R_mapCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                R_map[__index] = (INT32)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < R_mapCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    R_map[__index] = (INT32)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool chromatixPDAFHardwarePixelSeparator::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // inputBlockWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("inputBlockWidth", ParameterParserDataType::Int32, (double)inputBlockWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)inputBlockWidth, 0));
    }

    // inputBlockHeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("inputBlockHeight", ParameterParserDataType::Int32, (double)inputBlockHeight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "inputBlockHeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)inputBlockHeight, 0));
    }

    // outputBlockWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputBlockWidth", ParameterParserDataType::Int32, (double)outputBlockWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputBlockWidth, 0));
    }

    // outputBlockHeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputBlockHeight", ParameterParserDataType::Int32, (double)outputBlockHeight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputBlockHeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputBlockHeight, 0));
    }

    // pixelSpan
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pixelSpan", ParameterParserDataType::Int32, (double)pixelSpan, 0));
    }
    else if (PARAMETER_STRCMP(__name, "pixelSpan") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)pixelSpan, 0));
    }

    // L_map
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("L_map", ParameterParserDataType::Int32, true, false, L_mapCount));
    }

    // R_map
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("R_map", ParameterParserDataType::Int32, true, false, R_mapCount));
    }

    return __result;
}

bool chromatixPDAFHardwareLineExtractor::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "XOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)XOffset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "YOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)YOffset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "HalfLine") == 0)
    {
        ParameterUtils::DoubleToString((double)HalfLine, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDAFHardwareLineExtractor::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "XOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            XOffset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "YOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            YOffset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "HalfLine") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            HalfLine = (BOOL)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDAFHardwareLineExtractor::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // XOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("XOffset", ParameterParserDataType::Int32, (double)XOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "XOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)XOffset, 0));
    }

    // YOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("YOffset", ParameterParserDataType::Int32, (double)YOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "YOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)YOffset, 0));
    }

    // HalfLine
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HalfLine", ParameterParserDataType::Boolean, (double)HalfLine, 0));
    }
    else if (PARAMETER_STRCMP(__name, "HalfLine") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)HalfLine, 0));
    }

    return __result;
}

bool chromatixPDAFHardwarePixelExtractor::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)outputWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outputHeight") == 0)
    {
        ParameterUtils::DoubleToString((double)outputHeight, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDAFHardwarePixelExtractor::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outputHeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outputHeight = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDAFHardwarePixelExtractor::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // outputWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputWidth", ParameterParserDataType::Int32, (double)outputWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputWidth, 0));
    }

    // outputHeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outputHeight", ParameterParserDataType::Int32, (double)outputHeight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "outputHeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)outputHeight, 0));
    }

    return __result;
}

bool chromatixTuningHardwarePattern::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "pixelExtractor") == 0)
    {
        __result = pixelExtractor.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "lineExtractor") == 0)
    {
        if (__index < lineExtractorCount)
        {
            __result = lineExtractor[__index].GetValue(&__path[__pos], __value, __size);
        }
    }
    else if (PARAMETER_STRCMP(__name, "pixelSeparator") == 0)
    {
        __result = pixelSeparator.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "resampler") == 0)
    {
        __result = resampler.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "gridWidthScaleRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)gridWidthScaleRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gridHeightScaleRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)gridHeightScaleRatio, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixTuningHardwarePattern::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "pixelExtractor") == 0)
    {
        __result = pixelExtractor.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "lineExtractor") == 0)
    {
        if (__index < lineExtractorCount)
        {
            __result = lineExtractor[__index].SetValue(&__path[__pos], __value);
        }
    }
    else if (PARAMETER_STRCMP(__name, "pixelSeparator") == 0)
    {
        __result = pixelSeparator.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "resampler") == 0)
    {
        __result = resampler.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "gridWidthScaleRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gridWidthScaleRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gridHeightScaleRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gridHeightScaleRatio = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningHardwarePattern::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // pixelExtractor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pixelExtractor", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "pixelExtractor") == 0)
    {
        __result = pixelExtractor.GetInfo(&__path[__pos], __info);
    }

    // lineExtractor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lineExtractor", ParameterParserDataType::Structure, true, false, lineExtractorCount));
    }
    else if (PARAMETER_STRCMP(__name, "lineExtractor") == 0)
    {
        if (__index < lineExtractorCount)
        {
            __result = lineExtractor[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, lineExtractorCount));
        }
    }

    // pixelSeparator
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pixelSeparator", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "pixelSeparator") == 0)
    {
        __result = pixelSeparator.GetInfo(&__path[__pos], __info);
    }

    // resampler
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("resampler", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "resampler") == 0)
    {
        __result = resampler.GetInfo(&__path[__pos], __info);
    }

    // gridWidthScaleRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gridWidthScaleRatio", ParameterParserDataType::Float, (double)gridWidthScaleRatio));
    }
    else if (PARAMETER_STRCMP(__name, "gridWidthScaleRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gridWidthScaleRatio));
    }

    // gridHeightScaleRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gridHeightScaleRatio", ParameterParserDataType::Float, (double)gridHeightScaleRatio));
    }
    else if (PARAMETER_STRCMP(__name, "gridHeightScaleRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gridHeightScaleRatio));
    }

    return __result;
}

bool chromatixTuningHardwareGeometry::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enabldHardwarePDModule") == 0)
    {
        ParameterUtils::DoubleToString((double)enabldHardwarePDModule, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableOverlap") == 0)
    {
        ParameterUtils::DoubleToString((double)enableOverlap, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "numOfHoriGrids") == 0)
    {
        ParameterUtils::DoubleToString((double)numOfHoriGrids, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "numOfVertGrids") == 0)
    {
        ParameterUtils::DoubleToString((double)numOfVertGrids, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRGNInGridUnit") == 0)
    {
        ParameterUtils::DoubleToString((double)horiNumOfRGNInGridUnit, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRGNInGridUnit") == 0)
    {
        ParameterUtils::DoubleToString((double)vertNumOfRGNInGridUnit, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horiRegionOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)horiRegionOffset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "vertRegionOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)vertRegionOffset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "widhtOfRegion") == 0)
    {
        ParameterUtils::DoubleToString((double)widhtOfRegion, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "heightOfRegion") == 0)
    {
        ParameterUtils::DoubleToString((double)heightOfRegion, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRegion") == 0)
    {
        ParameterUtils::DoubleToString((double)horiNumOfRegion, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRegion") == 0)
    {
        ParameterUtils::DoubleToString((double)vertNumOfRegion, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningHardwareGeometry::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enabldHardwarePDModule") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enabldHardwarePDModule = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableOverlap") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableOverlap = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "numOfHoriGrids") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            numOfHoriGrids = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "numOfVertGrids") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            numOfVertGrids = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRGNInGridUnit") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horiNumOfRGNInGridUnit = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRGNInGridUnit") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            vertNumOfRGNInGridUnit = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horiRegionOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horiRegionOffset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "vertRegionOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            vertRegionOffset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "widhtOfRegion") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            widhtOfRegion = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "heightOfRegion") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            heightOfRegion = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRegion") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horiNumOfRegion = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRegion") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            vertNumOfRegion = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningHardwareGeometry::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enabldHardwarePDModule
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enabldHardwarePDModule", ParameterParserDataType::Int32, (double)enabldHardwarePDModule, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enabldHardwarePDModule") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enabldHardwarePDModule, 0));
    }

    // enableOverlap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableOverlap", ParameterParserDataType::Int32, (double)enableOverlap, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableOverlap") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enableOverlap, 0));
    }

    // numOfHoriGrids
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("numOfHoriGrids", ParameterParserDataType::Int32, (double)numOfHoriGrids, 0));
    }
    else if (PARAMETER_STRCMP(__name, "numOfHoriGrids") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)numOfHoriGrids, 0));
    }

    // numOfVertGrids
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("numOfVertGrids", ParameterParserDataType::Int32, (double)numOfVertGrids, 0));
    }
    else if (PARAMETER_STRCMP(__name, "numOfVertGrids") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)numOfVertGrids, 0));
    }

    // horiNumOfRGNInGridUnit
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horiNumOfRGNInGridUnit", ParameterParserDataType::Int32, (double)horiNumOfRGNInGridUnit, 0));
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRGNInGridUnit") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)horiNumOfRGNInGridUnit, 0));
    }

    // vertNumOfRGNInGridUnit
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("vertNumOfRGNInGridUnit", ParameterParserDataType::Int32, (double)vertNumOfRGNInGridUnit, 0));
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRGNInGridUnit") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)vertNumOfRGNInGridUnit, 0));
    }

    // horiRegionOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horiRegionOffset", ParameterParserDataType::Int32, (double)horiRegionOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "horiRegionOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)horiRegionOffset, 0));
    }

    // vertRegionOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("vertRegionOffset", ParameterParserDataType::Int32, (double)vertRegionOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "vertRegionOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)vertRegionOffset, 0));
    }

    // widhtOfRegion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("widhtOfRegion", ParameterParserDataType::Int32, (double)widhtOfRegion, 0));
    }
    else if (PARAMETER_STRCMP(__name, "widhtOfRegion") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)widhtOfRegion, 0));
    }

    // heightOfRegion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("heightOfRegion", ParameterParserDataType::Int32, (double)heightOfRegion, 0));
    }
    else if (PARAMETER_STRCMP(__name, "heightOfRegion") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)heightOfRegion, 0));
    }

    // horiNumOfRegion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horiNumOfRegion", ParameterParserDataType::Int32, (double)horiNumOfRegion, 0));
    }
    else if (PARAMETER_STRCMP(__name, "horiNumOfRegion") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)horiNumOfRegion, 0));
    }

    // vertNumOfRegion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("vertNumOfRegion", ParameterParserDataType::Int32, (double)vertNumOfRegion, 0));
    }
    else if (PARAMETER_STRCMP(__name, "vertNumOfRegion") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)vertNumOfRegion, 0));
    }

    return __result;
}

bool HDRStatsEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        ParameterUtils::DoubleToString((double)value, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        ParameterUtils::DoubleToString((double)weight, __value, __size);
        __result = true;
    }

    return __result;
}

bool HDRStatsEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            value = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weight = (float)dblValue; 
        }
    }

    return __result;
}

bool HDRStatsEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // value
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("value", ParameterParserDataType::Float, (double)value));
    }
    else if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)value));
    }

    // weight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weight", ParameterParserDataType::Float, (double)weight));
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)weight));
    }

    return __result;
}

bool HDRProcessingTypeGrid::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)StatsTypeArr, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool HDRProcessingTypeGrid::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            StatsTypeArr = (HDRStatsTypeGrid)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool HDRProcessingTypeGrid::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsTypeArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsTypeArr", ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }
    else if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)StatsTypeArr, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            StatsTypeArr = (HDRStatsTypeGlobal)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsTypeArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsTypeArr", ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }
    else if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool HDRBiasEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)biasType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        ParameterUtils::DoubleToString((double)weight, __value, __size);
        __result = true;
    }

    return __result;
}

bool HDRBiasEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            biasType = (BiasExposureType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weight = (float)dblValue; 
        }
    }

    return __result;
}

bool HDRBiasEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // biasType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("biasType", ParameterParserDataType::Enum, (double)(UINT32)biasType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)biasType, 0));
    }

    // weight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weight", ParameterParserDataType::Float, (double)weight));
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)weight));
    }

    return __result;
}

bool chromatixPDLibHDRControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)modeSelect, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixPDLibHDRControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            modeSelect = (HDRStatsSelectionType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixPDLibHDRControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // modeSelect
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("modeSelect", ParameterParserDataType::Enum, (double)(UINT32)modeSelect, 0));
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)modeSelect, 0));
    }

    // bias
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bias", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.GetInfo(&__path[__pos], __info);
    }

    // statsTypeGlobal
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsTypeGlobal", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.GetInfo(&__path[__pos], __info);
    }

    // statsTypeGrid
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsTypeGrid", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixPDLibHDRControl::biasStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::biasStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::biasStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGlobalStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGlobalStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGlobalStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsControlArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsControlArr", ParameterParserDataType::Structure, true, false, StatsControlArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, StatsControlArrCount));
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGridStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGridStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDLibHDRControl::statsTypeGridStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsControlArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsControlArr", ParameterParserDataType::Structure, true, false, StatsControlArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, StatsControlArrCount));
        }
    }

    return __result;
}

bool chromatixTuningSkipControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "staticFrameCountThres") == 0)
    {
        ParameterUtils::DoubleToString((double)staticFrameCountThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxFrameRate") == 0)
    {
        ParameterUtils::DoubleToString((double)maxFrameRate, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningSkipControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "staticFrameCountThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            staticFrameCountThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxFrameRate") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxFrameRate = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningSkipControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // staticFrameCountThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("staticFrameCountThres", ParameterParserDataType::Int32, (double)staticFrameCountThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "staticFrameCountThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)staticFrameCountThres, 0));
    }

    // maxFrameRate
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxFrameRate", ParameterParserDataType::Int32, (double)maxFrameRate, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxFrameRate") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxFrameRate, 0));
    }

    return __result;
}

bool chromatixHVConfWeight::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        ParameterUtils::DoubleToString((double)weight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)confThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixHVConfWeight::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixHVConfWeight::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // weight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weight", ParameterParserDataType::Float, (double)weight));
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)weight));
    }

    // confThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confThreshold", ParameterParserDataType::Int32, (double)confThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confThreshold, 0));
    }

    return __result;
}

bool chromatixHVControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "PDProcessingAxis") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)PDProcessingAxis, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horizontalConfWeightTuning") == 0)
    {
        if (__index < horizontalConfWeightTuningCount)
        {
            __result = horizontalConfWeightTuning[__index].GetValue(&__path[__pos], __value, __size);
        }
    }
    else if (PARAMETER_STRCMP(__name, "verticalConfWeightTuning") == 0)
    {
        if (__index < verticalConfWeightTuningCount)
        {
            __result = verticalConfWeightTuning[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixHVControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "PDProcessingAxis") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            PDProcessingAxis = (chromatixPDAxisControl)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horizontalConfWeightTuning") == 0)
    {
        if (__index < horizontalConfWeightTuningCount)
        {
            __result = horizontalConfWeightTuning[__index].SetValue(&__path[__pos], __value);
        }
    }
    else if (PARAMETER_STRCMP(__name, "verticalConfWeightTuning") == 0)
    {
        if (__index < verticalConfWeightTuningCount)
        {
            __result = verticalConfWeightTuning[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixHVControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // PDProcessingAxis
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PDProcessingAxis", ParameterParserDataType::Enum, (double)(UINT32)PDProcessingAxis, 0));
    }
    else if (PARAMETER_STRCMP(__name, "PDProcessingAxis") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)PDProcessingAxis, 0));
    }

    // horizontalConfWeightTuning
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horizontalConfWeightTuning", ParameterParserDataType::Structure, true, false, horizontalConfWeightTuningCount));
    }
    else if (PARAMETER_STRCMP(__name, "horizontalConfWeightTuning") == 0)
    {
        if (__index < horizontalConfWeightTuningCount)
        {
            __result = horizontalConfWeightTuning[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, horizontalConfWeightTuningCount));
        }
    }

    // verticalConfWeightTuning
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("verticalConfWeightTuning", ParameterParserDataType::Structure, true, false, verticalConfWeightTuningCount));
    }
    else if (PARAMETER_STRCMP(__name, "verticalConfWeightTuning") == 0)
    {
        if (__index < verticalConfWeightTuningCount)
        {
            __result = verticalConfWeightTuning[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, verticalConfWeightTuningCount));
        }
    }

    return __result;
}

bool chromatixTuningProcessLevel::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "processingMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)processingMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "dynamicLevel") == 0)
    {
        ParameterUtils::DoubleToString((double)dynamicLevel, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "staticLevel") == 0)
    {
        ParameterUtils::DoubleToString((double)staticLevel, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningProcessLevel::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "processingMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            processingMode = (chromatixPDProcessingMode)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "dynamicLevel") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            dynamicLevel = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "staticLevel") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            staticLevel = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningProcessLevel::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // processingMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("processingMode", ParameterParserDataType::Enum, (double)(UINT32)processingMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "processingMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)processingMode, 0));
    }

    // dynamicLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("dynamicLevel", ParameterParserDataType::Int32, (double)dynamicLevel, 0));
    }
    else if (PARAMETER_STRCMP(__name, "dynamicLevel") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)dynamicLevel, 0));
    }

    // staticLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("staticLevel", ParameterParserDataType::Int32, (double)staticLevel, 0));
    }
    else if (PARAMETER_STRCMP(__name, "staticLevel") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)staticLevel, 0));
    }

    return __result;
}

bool chromatixTuningAdaptiveK::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "timeoutFrameCntThres") == 0)
    {
        ParameterUtils::DoubleToString((double)timeoutFrameCntThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "filterSize") == 0)
    {
        ParameterUtils::DoubleToString((double)filterSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state0StableCntThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state0StableCntThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state1StableCntThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state1StableCntThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minimumLensPosDelta") == 0)
    {
        ParameterUtils::DoubleToString((double)minimumLensPosDelta, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state0ConfThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state0ConfThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state1ConfThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state1ConfThres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state0PhaseDiffThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state0PhaseDiffThres, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "state1PhaseDiffThres") == 0)
    {
        ParameterUtils::DoubleToString((double)state1PhaseDiffThres, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetUpperBound") == 0)
    {
        ParameterUtils::DoubleToString((double)tolNearTargetUpperBound, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetLowerBound") == 0)
    {
        ParameterUtils::DoubleToString((double)tolNearTargetLowerBound, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetUpperBound") == 0)
    {
        ParameterUtils::DoubleToString((double)tolFarTargetUpperBound, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetLowerBound") == 0)
    {
        ParameterUtils::DoubleToString((double)tolFarTargetLowerBound, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixTuningAdaptiveK::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "timeoutFrameCntThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            timeoutFrameCntThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "filterSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            filterSize = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state0StableCntThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state0StableCntThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state1StableCntThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state1StableCntThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minimumLensPosDelta") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minimumLensPosDelta = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state0ConfThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state0ConfThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state1ConfThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state1ConfThres = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state0PhaseDiffThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state0PhaseDiffThres = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "state1PhaseDiffThres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            state1PhaseDiffThres = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetUpperBound") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            tolNearTargetUpperBound = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetLowerBound") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            tolNearTargetLowerBound = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetUpperBound") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            tolFarTargetUpperBound = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetLowerBound") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            tolFarTargetLowerBound = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningAdaptiveK::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // timeoutFrameCntThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("timeoutFrameCntThres", ParameterParserDataType::Int32, (double)timeoutFrameCntThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "timeoutFrameCntThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)timeoutFrameCntThres, 0));
    }

    // filterSize
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("filterSize", ParameterParserDataType::Int32, (double)filterSize, 0));
    }
    else if (PARAMETER_STRCMP(__name, "filterSize") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)filterSize, 0));
    }

    // state0StableCntThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state0StableCntThres", ParameterParserDataType::Int32, (double)state0StableCntThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "state0StableCntThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)state0StableCntThres, 0));
    }

    // state1StableCntThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state1StableCntThres", ParameterParserDataType::Int32, (double)state1StableCntThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "state1StableCntThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)state1StableCntThres, 0));
    }

    // minimumLensPosDelta
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minimumLensPosDelta", ParameterParserDataType::Int32, (double)minimumLensPosDelta, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minimumLensPosDelta") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minimumLensPosDelta, 0));
    }

    // state0ConfThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state0ConfThres", ParameterParserDataType::Int32, (double)state0ConfThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "state0ConfThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)state0ConfThres, 0));
    }

    // state1ConfThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state1ConfThres", ParameterParserDataType::Int32, (double)state1ConfThres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "state1ConfThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)state1ConfThres, 0));
    }

    // state0PhaseDiffThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state0PhaseDiffThres", ParameterParserDataType::Float, (double)state0PhaseDiffThres));
    }
    else if (PARAMETER_STRCMP(__name, "state0PhaseDiffThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)state0PhaseDiffThres));
    }

    // state1PhaseDiffThres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("state1PhaseDiffThres", ParameterParserDataType::Float, (double)state1PhaseDiffThres));
    }
    else if (PARAMETER_STRCMP(__name, "state1PhaseDiffThres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)state1PhaseDiffThres));
    }

    // tolNearTargetUpperBound
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tolNearTargetUpperBound", ParameterParserDataType::Float, (double)tolNearTargetUpperBound));
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetUpperBound") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)tolNearTargetUpperBound));
    }

    // tolNearTargetLowerBound
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tolNearTargetLowerBound", ParameterParserDataType::Float, (double)tolNearTargetLowerBound));
    }
    else if (PARAMETER_STRCMP(__name, "tolNearTargetLowerBound") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)tolNearTargetLowerBound));
    }

    // tolFarTargetUpperBound
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tolFarTargetUpperBound", ParameterParserDataType::Float, (double)tolFarTargetUpperBound));
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetUpperBound") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)tolFarTargetUpperBound));
    }

    // tolFarTargetLowerBound
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tolFarTargetLowerBound", ParameterParserDataType::Float, (double)tolFarTargetLowerBound));
    }
    else if (PARAMETER_STRCMP(__name, "tolFarTargetLowerBound") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)tolFarTargetLowerBound));
    }

    return __result;
}

bool chromatixPDLibRepeatPatternDetect::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxRevCnt") == 0)
    {
        ParameterUtils::DoubleToString((double)maxRevCnt, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "changeRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)changeRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "revDisTol") == 0)
    {
        ParameterUtils::DoubleToString((double)revDisTol, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)confThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixPDLibRepeatPatternDetect::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxRevCnt") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxRevCnt = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "changeRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            changeRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "revDisTol") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            revDisTol = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDLibRepeatPatternDetect::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // maxRevCnt
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxRevCnt", ParameterParserDataType::Int32, (double)maxRevCnt, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxRevCnt") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxRevCnt, 0));
    }

    // changeRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("changeRatio", ParameterParserDataType::Float, (double)changeRatio));
    }
    else if (PARAMETER_STRCMP(__name, "changeRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)changeRatio));
    }

    // revDisTol
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("revDisTol", ParameterParserDataType::Float, (double)revDisTol));
    }
    else if (PARAMETER_STRCMP(__name, "revDisTol") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)revDisTol));
    }

    // confThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confThreshold", ParameterParserDataType::Float, (double)confThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "confThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)confThreshold));
    }

    return __result;
}

bool chromatixPDLIBPostprocessingTemporalFilterSetting::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "dynamicWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)dynamicWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "staticWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)staticWeight, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixPDLIBPostprocessingTemporalFilterSetting::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "dynamicWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            dynamicWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "staticWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            staticWeight = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDLIBPostprocessingTemporalFilterSetting::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // AECTrigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("AECTrigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.GetInfo(&__path[__pos], __info);
    }

    // dynamicWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("dynamicWeight", ParameterParserDataType::Float, (double)dynamicWeight));
    }
    else if (PARAMETER_STRCMP(__name, "dynamicWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)dynamicWeight));
    }

    // staticWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("staticWeight", ParameterParserDataType::Float, (double)staticWeight));
    }
    else if (PARAMETER_STRCMP(__name, "staticWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)staticWeight));
    }

    return __result;
}

bool chromatixTemporalFilterTrigger::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "temporalFilterSet") == 0)
    {
        if (__index < temporalFilterSetFixedCount)
        {
            __result = temporalFilterSet[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixTemporalFilterTrigger::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "temporalFilterSet") == 0)
    {
        if (__index < temporalFilterSetFixedCount)
        {
            __result = temporalFilterSet[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixTemporalFilterTrigger::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // temporalFilterSet
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("temporalFilterSet", ParameterParserDataType::Structure, true, false, temporalFilterSetFixedCount));
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterSet") == 0)
    {
        if (__index < temporalFilterSetFixedCount)
        {
            __result = temporalFilterSet[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, temporalFilterSetFixedCount));
        }
    }

    return __result;
}

bool chromatixTuningPostProcess::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasVectorStrength") == 0)
    {
        ParameterUtils::DoubleToString((double)biasVectorStrength, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterStaticWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)temporalFilterStaticWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterDynamicWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)temporalFilterDynamicWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterTrigger") == 0)
    {
        __result = temporalFilterTrigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "enableGridOverlap") == 0)
    {
        ParameterUtils::DoubleToString((double)enableGridOverlap, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMapGridOverlap") == 0)
    {
        ParameterUtils::DoubleToString((double)enableFocusMapGridOverlap, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confIntegralWidth") == 0)
    {
        ParameterUtils::DoubleToString((double)confIntegralWidth, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "repeatPatternDetect") == 0)
    {
        __result = repeatPatternDetect.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixTuningPostProcess::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasVectorStrength") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            biasVectorStrength = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterStaticWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            temporalFilterStaticWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterDynamicWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            temporalFilterDynamicWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterTrigger") == 0)
    {
        __result = temporalFilterTrigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "enableGridOverlap") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableGridOverlap = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMapGridOverlap") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableFocusMapGridOverlap = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confIntegralWidth") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confIntegralWidth = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "repeatPatternDetect") == 0)
    {
        __result = repeatPatternDetect.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixTuningPostProcess::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // biasVectorStrength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("biasVectorStrength", ParameterParserDataType::Float, (double)biasVectorStrength));
    }
    else if (PARAMETER_STRCMP(__name, "biasVectorStrength") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)biasVectorStrength));
    }

    // temporalFilterStaticWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("temporalFilterStaticWeight", ParameterParserDataType::Float, (double)temporalFilterStaticWeight));
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterStaticWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)temporalFilterStaticWeight));
    }

    // temporalFilterDynamicWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("temporalFilterDynamicWeight", ParameterParserDataType::Float, (double)temporalFilterDynamicWeight));
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterDynamicWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)temporalFilterDynamicWeight));
    }

    // temporalFilterTrigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("temporalFilterTrigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "temporalFilterTrigger") == 0)
    {
        __result = temporalFilterTrigger.GetInfo(&__path[__pos], __info);
    }

    // enableGridOverlap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableGridOverlap", ParameterParserDataType::Int32, (double)enableGridOverlap, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableGridOverlap") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enableGridOverlap, 0));
    }

    // enableFocusMapGridOverlap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableFocusMapGridOverlap", ParameterParserDataType::Int32, (double)enableFocusMapGridOverlap, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMapGridOverlap") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enableFocusMapGridOverlap, 0));
    }

    // confIntegralWidth
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confIntegralWidth", ParameterParserDataType::Int32, (double)confIntegralWidth, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confIntegralWidth") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confIntegralWidth, 0));
    }

    // repeatPatternDetect
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("repeatPatternDetect", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "repeatPatternDetect") == 0)
    {
        __result = repeatPatternDetect.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixPDRange::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "from") == 0)
    {
        ParameterUtils::DoubleToString((double)from, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "to") == 0)
    {
        ParameterUtils::DoubleToString((double)to, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDRange::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "from") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            from = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "to") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            to = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDRange::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // from
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("from", ParameterParserDataType::Int32, (double)from, 0));
    }
    else if (PARAMETER_STRCMP(__name, "from") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)from, 0));
    }

    // to
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("to", ParameterParserDataType::Int32, (double)to, 0));
    }
    else if (PARAMETER_STRCMP(__name, "to") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)to, 0));
    }

    return __result;
}

bool chromatixTuningCorrelation::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minimumConfidenceLevel") == 0)
    {
        ParameterUtils::DoubleToString((double)minimumConfidenceLevel, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "defocusConfidenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)defocusConfidenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "PDRangeControl") == 0)
    {
        ParameterUtils::DoubleToString((double)PDRangeControl, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "searchRange") == 0)
    {
        __result = searchRange.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "lcrSearchRange") == 0)
    {
        __result = lcrSearchRange.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdLow") == 0)
    {
        ParameterUtils::DoubleToString((double)lcrConfidenceThresholdLow, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)lcrConfidenceThresholdHigh, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "advanceSparseProcMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)advanceSparseProcMode, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningCorrelation::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minimumConfidenceLevel") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minimumConfidenceLevel = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "defocusConfidenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            defocusConfidenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "PDRangeControl") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            PDRangeControl = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "searchRange") == 0)
    {
        __result = searchRange.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "lcrSearchRange") == 0)
    {
        __result = lcrSearchRange.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrConfidenceThresholdLow = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrConfidenceThresholdHigh = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "advanceSparseProcMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            advanceSparseProcMode = (chromatixAdvanceSparseProcMode)(UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningCorrelation::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minimumConfidenceLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minimumConfidenceLevel", ParameterParserDataType::Float, (double)minimumConfidenceLevel));
    }
    else if (PARAMETER_STRCMP(__name, "minimumConfidenceLevel") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minimumConfidenceLevel));
    }

    // defocusConfidenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("defocusConfidenceThreshold", ParameterParserDataType::Float, (double)defocusConfidenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "defocusConfidenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)defocusConfidenceThreshold));
    }

    // PDRangeControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PDRangeControl", ParameterParserDataType::Float, (double)PDRangeControl));
    }
    else if (PARAMETER_STRCMP(__name, "PDRangeControl") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)PDRangeControl));
    }

    // searchRange
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("searchRange", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "searchRange") == 0)
    {
        __result = searchRange.GetInfo(&__path[__pos], __info);
    }

    // lcrSearchRange
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrSearchRange", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "lcrSearchRange") == 0)
    {
        __result = lcrSearchRange.GetInfo(&__path[__pos], __info);
    }

    // lcrConfidenceThresholdLow
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrConfidenceThresholdLow", ParameterParserDataType::Int32, (double)lcrConfidenceThresholdLow, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdLow") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)lcrConfidenceThresholdLow, 0));
    }

    // lcrConfidenceThresholdHigh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrConfidenceThresholdHigh", ParameterParserDataType::Int32, (double)lcrConfidenceThresholdHigh, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrConfidenceThresholdHigh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)lcrConfidenceThresholdHigh, 0));
    }

    // advanceSparseProcMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("advanceSparseProcMode", ParameterParserDataType::Enum, (double)(UINT32)advanceSparseProcMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "advanceSparseProcMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)advanceSparseProcMode, 0));
    }

    return __result;
}

bool chromatixPDLIBPreprocessingFilterSettings::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "verticalMode") == 0)
    {
        ParameterUtils::DoubleToString((double)verticalMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horizontalMode") == 0)
    {
        ParameterUtils::DoubleToString((double)horizontalMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        ParameterUtils::DoubleToString((double)boxFilterLength, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)antiAliasFilterThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDLIBPreprocessingFilterSettings::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "verticalMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            verticalMode = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horizontalMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horizontalMode = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            boxFilterLength = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            antiAliasFilterThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDLIBPreprocessingFilterSettings::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // AECTrigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("AECTrigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "AECTrigger") == 0)
    {
        __result = AECTrigger.GetInfo(&__path[__pos], __info);
    }

    // verticalMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("verticalMode", ParameterParserDataType::Int32, (double)verticalMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "verticalMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)verticalMode, 0));
    }

    // horizontalMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horizontalMode", ParameterParserDataType::Int32, (double)horizontalMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "horizontalMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)horizontalMode, 0));
    }

    // boxFilterLength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("boxFilterLength", ParameterParserDataType::Int32, (double)boxFilterLength, 0));
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)boxFilterLength, 0));
    }

    // antiAliasFilterThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("antiAliasFilterThreshold", ParameterParserDataType::Int32, (double)antiAliasFilterThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)antiAliasFilterThreshold, 0));
    }

    return __result;
}

bool chromatixLCRFilterTrigger::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixLCRFilterTrigger::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixLCRFilterTrigger::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // filterSet
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("filterSet", ParameterParserDataType::Structure, true, false, filterSetFixedCount));
    }
    else if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, filterSetFixedCount));
        }
    }

    return __result;
}

bool chromatixDPDFilterTrigger::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixDPDFilterTrigger::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixDPDFilterTrigger::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // filterSet
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("filterSet", ParameterParserDataType::Structure, true, false, filterSetFixedCount));
    }
    else if (PARAMETER_STRCMP(__name, "filterSet") == 0)
    {
        if (__index < filterSetFixedCount)
        {
            __result = filterSet[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, filterSetFixedCount));
        }
    }

    return __result;
}

bool chromatixTuningSpotLight::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "mode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)mode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sequenceCntThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)sequenceCntThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "pixelValThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)pixelValThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixTuningSpotLight::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "mode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            mode = (chromatixSpotlightDetectionMode)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sequenceCntThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sequenceCntThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "pixelValThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            pixelValThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningSpotLight::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // mode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("mode", ParameterParserDataType::Enum, (double)(UINT32)mode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "mode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)mode, 0));
    }

    // sequenceCntThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sequenceCntThreshold", ParameterParserDataType::Int32, (double)sequenceCntThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "sequenceCntThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)sequenceCntThreshold, 0));
    }

    // pixelValThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pixelValThreshold", ParameterParserDataType::Float, (double)pixelValThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "pixelValThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)pixelValThreshold));
    }

    return __result;
}

bool chromatixTuningHDRCfg::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "channelSelection") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)channelSelection, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "longThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)longThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningHDRCfg::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "channelSelection") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            channelSelection = (chromatixHDRChannelSelection)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "longThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            longThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningHDRCfg::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // channelSelection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("channelSelection", ParameterParserDataType::Enum, (double)(UINT32)channelSelection, 0));
    }
    else if (PARAMETER_STRCMP(__name, "channelSelection") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)channelSelection, 0));
    }

    // longThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("longThreshold", ParameterParserDataType::Int32, (double)longThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "longThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)longThreshold, 0));
    }

    return __result;
}

bool chromatixTuningPreProcess::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "sparseProcessingMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)sparseProcessingMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "HDR") == 0)
    {
        __result = HDR.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        ParameterUtils::DoubleToString((double)boxFilterLength, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)antiAliasFilterThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "saturationThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)saturationThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotLightCompensation") == 0)
    {
        __result = spotLightCompensation.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "filterTrigger") == 0)
    {
        __result = filterTrigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "lcrFilterTrigger") == 0)
    {
        __result = lcrFilterTrigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannel") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)lcrChannel, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrBinningMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)lcrBinningMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrRawType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)lcrRawType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrMaxBinningNum") == 0)
    {
        ParameterUtils::DoubleToString((double)lcrMaxBinningNum, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannelSeparated") == 0)
    {
        ParameterUtils::DoubleToString((double)lcrChannelSeparated, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lcrXCFAType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)lcrXCFAType, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTuningPreProcess::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "sparseProcessingMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sparseProcessingMode = (chromatixSparsePDProcMode)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "HDR") == 0)
    {
        __result = HDR.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            boxFilterLength = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            antiAliasFilterThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "saturationThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            saturationThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotLightCompensation") == 0)
    {
        __result = spotLightCompensation.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "filterTrigger") == 0)
    {
        __result = filterTrigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "lcrFilterTrigger") == 0)
    {
        __result = lcrFilterTrigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannel") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrChannel = (chromatixLCRChannel)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrBinningMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrBinningMode = (chromatixLCRBinningMode)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrRawType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrRawType = (chromatixLCRRawType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrMaxBinningNum") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrMaxBinningNum = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannelSeparated") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrChannelSeparated = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lcrXCFAType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lcrXCFAType = (chromatixLCRXCFAType)(UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTuningPreProcess::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // sparseProcessingMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sparseProcessingMode", ParameterParserDataType::Enum, (double)(UINT32)sparseProcessingMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "sparseProcessingMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)sparseProcessingMode, 0));
    }

    // HDR
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HDR", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HDR") == 0)
    {
        __result = HDR.GetInfo(&__path[__pos], __info);
    }

    // boxFilterLength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("boxFilterLength", ParameterParserDataType::Int32, (double)boxFilterLength, 0));
    }
    else if (PARAMETER_STRCMP(__name, "boxFilterLength") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)boxFilterLength, 0));
    }

    // antiAliasFilterThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("antiAliasFilterThreshold", ParameterParserDataType::Int32, (double)antiAliasFilterThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "antiAliasFilterThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)antiAliasFilterThreshold, 0));
    }

    // saturationThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("saturationThreshold", ParameterParserDataType::Int32, (double)saturationThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "saturationThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)saturationThreshold, 0));
    }

    // spotLightCompensation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotLightCompensation", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "spotLightCompensation") == 0)
    {
        __result = spotLightCompensation.GetInfo(&__path[__pos], __info);
    }

    // filterTrigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("filterTrigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "filterTrigger") == 0)
    {
        __result = filterTrigger.GetInfo(&__path[__pos], __info);
    }

    // lcrFilterTrigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrFilterTrigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "lcrFilterTrigger") == 0)
    {
        __result = lcrFilterTrigger.GetInfo(&__path[__pos], __info);
    }

    // lcrChannel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrChannel", ParameterParserDataType::Enum, (double)(UINT32)lcrChannel, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannel") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)lcrChannel, 0));
    }

    // lcrBinningMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrBinningMode", ParameterParserDataType::Enum, (double)(UINT32)lcrBinningMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrBinningMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)lcrBinningMode, 0));
    }

    // lcrRawType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrRawType", ParameterParserDataType::Enum, (double)(UINT32)lcrRawType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrRawType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)lcrRawType, 0));
    }

    // lcrMaxBinningNum
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrMaxBinningNum", ParameterParserDataType::Int32, (double)lcrMaxBinningNum, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrMaxBinningNum") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)lcrMaxBinningNum, 0));
    }

    // lcrChannelSeparated
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrChannelSeparated", ParameterParserDataType::Boolean, (double)lcrChannelSeparated, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrChannelSeparated") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)lcrChannelSeparated, 0));
    }

    // lcrXCFAType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lcrXCFAType", ParameterParserDataType::Enum, (double)(UINT32)lcrXCFAType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lcrXCFAType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)lcrXCFAType, 0));
    }

    return __result;
}

bool chromatixPDLibType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "preProcess") == 0)
    {
        __result = preProcess.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "preProcessVertical") == 0)
    {
        __result = preProcessVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "correlation") == 0)
    {
        __result = correlation.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "correlationVertical") == 0)
    {
        __result = correlationVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "postProcess") == 0)
    {
        __result = postProcess.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "postProcessVertical") == 0)
    {
        __result = postProcessVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveK") == 0)
    {
        __result = adaptiveK.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "enablePeripheralWindows") == 0)
    {
        ParameterUtils::DoubleToString((double)enablePeripheralWindows, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevel") == 0)
    {
        __result = singleWindowProcessingLevel.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevelVertical") == 0)
    {
        __result = singleWindowProcessingLevelVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevel") == 0)
    {
        __result = gridProcessingLevel.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevelVertical") == 0)
    {
        __result = gridProcessingLevelVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessing") == 0)
    {
        __result = PeripheralProcessing.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessingVertical") == 0)
    {
        __result = PeripheralProcessingVertical.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "LFMProcessingLevel") == 0)
    {
        __result = LFMProcessingLevel.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "HVControl") == 0)
    {
        __result = HVControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "skipControl") == 0)
    {
        __result = skipControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "hardwareGeometry") == 0)
    {
        __result = hardwareGeometry.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "hardwarePattern") == 0)
    {
        if (__index < hardwarePatternCount)
        {
            __result = hardwarePattern[__index].GetValue(&__path[__pos], __value, __size);
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMaps") == 0)
    {
        ParameterUtils::DoubleToString((double)enableFocusMaps, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FocusMapInterrupt") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)FocusMapInterrupt, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LFMCorrectionRange") == 0)
    {
        if (__index < LFMCorrectionRangeFixedCount)
        {
            ParameterUtils::DoubleToString((double)LFMCorrectionRange[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < LFMCorrectionRangeFixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)LFMCorrectionRange[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "PDHWOutputControl") == 0)
    {
        __result = PDHWOutputControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "darkFaceOptimization") == 0)
    {
        __result = darkFaceOptimization.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "mlpdControlProcess") == 0)
    {
        __result = mlpdControlProcess.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "PDHWFallbackControl") == 0)
    {
        __result = PDHWFallbackControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "extensionParam") == 0)
    {
        if (__index < extensionParamCount)
        {
            __result = extensionParam[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixPDLibType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "preProcess") == 0)
    {
        __result = preProcess.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "preProcessVertical") == 0)
    {
        __result = preProcessVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "correlation") == 0)
    {
        __result = correlation.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "correlationVertical") == 0)
    {
        __result = correlationVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "postProcess") == 0)
    {
        __result = postProcess.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "postProcessVertical") == 0)
    {
        __result = postProcessVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveK") == 0)
    {
        __result = adaptiveK.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "enablePeripheralWindows") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enablePeripheralWindows = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevel") == 0)
    {
        __result = singleWindowProcessingLevel.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevelVertical") == 0)
    {
        __result = singleWindowProcessingLevelVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevel") == 0)
    {
        __result = gridProcessingLevel.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevelVertical") == 0)
    {
        __result = gridProcessingLevelVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessing") == 0)
    {
        __result = PeripheralProcessing.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessingVertical") == 0)
    {
        __result = PeripheralProcessingVertical.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "LFMProcessingLevel") == 0)
    {
        __result = LFMProcessingLevel.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "HVControl") == 0)
    {
        __result = HVControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "skipControl") == 0)
    {
        __result = skipControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "hardwareGeometry") == 0)
    {
        __result = hardwareGeometry.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "hardwarePattern") == 0)
    {
        if (__index < hardwarePatternCount)
        {
            __result = hardwarePattern[__index].SetValue(&__path[__pos], __value);
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMaps") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableFocusMaps = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FocusMapInterrupt") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            FocusMapInterrupt = (chromatixPDLibProcessInterrupt)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LFMCorrectionRange") == 0)
    {
        if (__index < LFMCorrectionRangeFixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                LFMCorrectionRange[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < LFMCorrectionRangeFixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    LFMCorrectionRange[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "PDHWOutputControl") == 0)
    {
        __result = PDHWOutputControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "darkFaceOptimization") == 0)
    {
        __result = darkFaceOptimization.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "mlpdControlProcess") == 0)
    {
        __result = mlpdControlProcess.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "PDHWFallbackControl") == 0)
    {
        __result = PDHWFallbackControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "extensionParam") == 0)
    {
        if (__index < extensionParamCount)
        {
            __result = extensionParam[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixPDLibType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // module_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("module_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetInfo(&__path[__pos], __info);
    }

    // parameter_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("parameter_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetInfo(&__path[__pos], __info);
    }

    // preProcess
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("preProcess", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "preProcess") == 0)
    {
        __result = preProcess.GetInfo(&__path[__pos], __info);
    }

    // preProcessVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("preProcessVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "preProcessVertical") == 0)
    {
        __result = preProcessVertical.GetInfo(&__path[__pos], __info);
    }

    // correlation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("correlation", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "correlation") == 0)
    {
        __result = correlation.GetInfo(&__path[__pos], __info);
    }

    // correlationVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("correlationVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "correlationVertical") == 0)
    {
        __result = correlationVertical.GetInfo(&__path[__pos], __info);
    }

    // postProcess
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("postProcess", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "postProcess") == 0)
    {
        __result = postProcess.GetInfo(&__path[__pos], __info);
    }

    // postProcessVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("postProcessVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "postProcessVertical") == 0)
    {
        __result = postProcessVertical.GetInfo(&__path[__pos], __info);
    }

    // adaptiveK
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("adaptiveK", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveK") == 0)
    {
        __result = adaptiveK.GetInfo(&__path[__pos], __info);
    }

    // enablePeripheralWindows
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enablePeripheralWindows", ParameterParserDataType::Int32, (double)enablePeripheralWindows, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enablePeripheralWindows") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enablePeripheralWindows, 0));
    }

    // singleWindowProcessingLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("singleWindowProcessingLevel", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevel") == 0)
    {
        __result = singleWindowProcessingLevel.GetInfo(&__path[__pos], __info);
    }

    // singleWindowProcessingLevelVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("singleWindowProcessingLevelVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "singleWindowProcessingLevelVertical") == 0)
    {
        __result = singleWindowProcessingLevelVertical.GetInfo(&__path[__pos], __info);
    }

    // gridProcessingLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gridProcessingLevel", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevel") == 0)
    {
        __result = gridProcessingLevel.GetInfo(&__path[__pos], __info);
    }

    // gridProcessingLevelVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gridProcessingLevelVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "gridProcessingLevelVertical") == 0)
    {
        __result = gridProcessingLevelVertical.GetInfo(&__path[__pos], __info);
    }

    // PeripheralProcessing
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PeripheralProcessing", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessing") == 0)
    {
        __result = PeripheralProcessing.GetInfo(&__path[__pos], __info);
    }

    // PeripheralProcessingVertical
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PeripheralProcessingVertical", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "PeripheralProcessingVertical") == 0)
    {
        __result = PeripheralProcessingVertical.GetInfo(&__path[__pos], __info);
    }

    // LFMProcessingLevel
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LFMProcessingLevel", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "LFMProcessingLevel") == 0)
    {
        __result = LFMProcessingLevel.GetInfo(&__path[__pos], __info);
    }

    // HVControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HVControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HVControl") == 0)
    {
        __result = HVControl.GetInfo(&__path[__pos], __info);
    }

    // skipControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("skipControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "skipControl") == 0)
    {
        __result = skipControl.GetInfo(&__path[__pos], __info);
    }

    // HDRControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HDRControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.GetInfo(&__path[__pos], __info);
    }

    // hardwareGeometry
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("hardwareGeometry", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "hardwareGeometry") == 0)
    {
        __result = hardwareGeometry.GetInfo(&__path[__pos], __info);
    }

    // hardwarePattern
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("hardwarePattern", ParameterParserDataType::Structure, true, false, hardwarePatternCount));
    }
    else if (PARAMETER_STRCMP(__name, "hardwarePattern") == 0)
    {
        if (__index < hardwarePatternCount)
        {
            __result = hardwarePattern[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, hardwarePatternCount));
        }
    }

    // enableFocusMaps
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableFocusMaps", ParameterParserDataType::Int32, (double)enableFocusMaps, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableFocusMaps") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enableFocusMaps, 0));
    }

    // FocusMapInterrupt
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FocusMapInterrupt", ParameterParserDataType::Enum, (double)(UINT32)FocusMapInterrupt, 0));
    }
    else if (PARAMETER_STRCMP(__name, "FocusMapInterrupt") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)FocusMapInterrupt, 0));
    }

    // LFMCorrectionRange
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LFMCorrectionRange", ParameterParserDataType::Float, true, false, LFMCorrectionRangeFixedCount));
    }

    // PDHWOutputControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PDHWOutputControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "PDHWOutputControl") == 0)
    {
        __result = PDHWOutputControl.GetInfo(&__path[__pos], __info);
    }

    // darkFaceOptimization
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("darkFaceOptimization", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "darkFaceOptimization") == 0)
    {
        __result = darkFaceOptimization.GetInfo(&__path[__pos], __info);
    }

    // mlpdControlProcess
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("mlpdControlProcess", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "mlpdControlProcess") == 0)
    {
        __result = mlpdControlProcess.GetInfo(&__path[__pos], __info);
    }

    // PDHWFallbackControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("PDHWFallbackControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "PDHWFallbackControl") == 0)
    {
        __result = PDHWFallbackControl.GetInfo(&__path[__pos], __info);
    }

    // extensionParam
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("extensionParam", ParameterParserDataType::Structure, true, false, extensionParamCount));
    }
    else if (PARAMETER_STRCMP(__name, "extensionParam") == 0)
    {
        if (__index < extensionParamCount)
        {
            __result = extensionParam[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, extensionParamCount));
        }
    }

    return __result;
}

bool chromatixPDLibType::module_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)major_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)minor_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)incr_revision, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixPDLibType::module_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            major_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minor_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            incr_revision = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixPDLibType::module_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // major_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("major_revision", ParameterParserDataType::Int32, (double)major_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)major_revision, 0));
    }

    // minor_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minor_revision", ParameterParserDataType::Int32, (double)minor_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minor_revision, 0));
    }

    // incr_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("incr_revision", ParameterParserDataType::Int32, (double)incr_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)incr_revision, 0));
    }

    return __result;
}

bool chromatixPDLibType::parameter_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        PARAMETER_STRCPY(__value, __size, revision);
        __result = true;
    }

    return __result;
}

bool chromatixPDLibType::parameter_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const /*__value*/)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        // Cannot modify strings, risk of memory leaks or corruption
    }

    return __result;
}

bool chromatixPDLibType::parameter_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("revision", ParameterParserDataType::String, revision));
    }
    else if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::String, revision));
    }

    return __result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::chromatixPDLibTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, nullptr)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(preProcess);
    PARAMETER_INITIALIZE(preProcessVertical);
    PARAMETER_INITIALIZE(correlation);
    PARAMETER_INITIALIZE(correlationVertical);
    PARAMETER_INITIALIZE(postProcess);
    PARAMETER_INITIALIZE(postProcessVertical);
    PARAMETER_INITIALIZE(adaptiveK);
    PARAMETER_INITIALIZE(enablePeripheralWindows);
    PARAMETER_INITIALIZE(singleWindowProcessingLevel);
    PARAMETER_INITIALIZE(singleWindowProcessingLevelVertical);
    PARAMETER_INITIALIZE(gridProcessingLevel);
    PARAMETER_INITIALIZE(gridProcessingLevelVertical);
    PARAMETER_INITIALIZE(PeripheralProcessing);
    PARAMETER_INITIALIZE(PeripheralProcessingVertical);
    PARAMETER_INITIALIZE(LFMProcessingLevel);
    PARAMETER_INITIALIZE(HVControl);
    PARAMETER_INITIALIZE(skipControl);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(hardwareGeometry);
    PARAMETER_INITIALIZE(hardwarePatternCount);
    PARAMETER_INITIALIZE(hardwarePattern);
    PARAMETER_INITIALIZE(enableFocusMaps);
    PARAMETER_INITIALIZE(FocusMapInterrupt);
    PARAMETER_INITIALIZE(LFMCorrectionRange);
    PARAMETER_INITIALIZE(PDHWOutputControl);
    PARAMETER_INITIALIZE(darkFaceOptimization);
    PARAMETER_INITIALIZE(mlpdControlProcess);
    PARAMETER_INITIALIZE(PDHWFallbackControl);
    PARAMETER_INITIALIZE(extensionParamCount);
    PARAMETER_INITIALIZE(extensionParam);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::chromatixPDLibTypeClass(
    const CHAR*       name,
    ModuleData* const moduleData)
    : ParameterModule(name, MAJOR, MINOR, PATCH, moduleData)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(preProcess);
    PARAMETER_INITIALIZE(preProcessVertical);
    PARAMETER_INITIALIZE(correlation);
    PARAMETER_INITIALIZE(correlationVertical);
    PARAMETER_INITIALIZE(postProcess);
    PARAMETER_INITIALIZE(postProcessVertical);
    PARAMETER_INITIALIZE(adaptiveK);
    PARAMETER_INITIALIZE(enablePeripheralWindows);
    PARAMETER_INITIALIZE(singleWindowProcessingLevel);
    PARAMETER_INITIALIZE(singleWindowProcessingLevelVertical);
    PARAMETER_INITIALIZE(gridProcessingLevel);
    PARAMETER_INITIALIZE(gridProcessingLevelVertical);
    PARAMETER_INITIALIZE(PeripheralProcessing);
    PARAMETER_INITIALIZE(PeripheralProcessingVertical);
    PARAMETER_INITIALIZE(LFMProcessingLevel);
    PARAMETER_INITIALIZE(HVControl);
    PARAMETER_INITIALIZE(skipControl);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(hardwareGeometry);
    PARAMETER_INITIALIZE(hardwarePattern);
    PARAMETER_INITIALIZE(enableFocusMaps);
    PARAMETER_INITIALIZE(FocusMapInterrupt);
    PARAMETER_INITIALIZE(LFMCorrectionRange);
    PARAMETER_INITIALIZE(PDHWOutputControl);
    PARAMETER_INITIALIZE(darkFaceOptimization);
    PARAMETER_INITIALIZE(mlpdControlProcess);
    PARAMETER_INITIALIZE(PDHWFallbackControl);
    PARAMETER_INITIALIZE(extensionParam);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::~chromatixPDLibTypeClass()
{
    if (Loaded)
    {
        UnloadModule();
    }
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FallbackControlEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void FallbackControlEntryType::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(ROIType);
    PARAMETER_INITIALIZE(widthRatio);
    PARAMETER_INITIALIZE(heightRatio);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb96260c05d88052e;
        entry->ReadEnumFixedArray(&ROIType, 1, localParams);
        localParams.NameHash = 0xddb7617f69f57227;
        entry->ReadSimpleTypeFixedArray(&widthRatio, 1, localParams);
        localParams.NameHash = 0xce39b5562c7e9771;
        entry->ReadSimpleTypeFixedArray(&heightRatio, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void FallbackControlEntryType::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        FallbackControlEntryType* arrayPtr = (FallbackControlEntryType*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* FallbackControlEntryType::AllocArray(
    UINT32 __count)
{
    FallbackControlEntryType* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW FallbackControlEntryType[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDHWFallbackControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDHWFallbackControl::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(controlArrCount);
    PARAMETER_INITIALIZE(controlArr);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xe11f4c5790fa1ee1;
        entry->ReadStructureArray(controlArr, controlArrCount, controlArrID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDHWFallbackControl::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDHWFallbackControl* arrayPtr = (chromatixPDHWFallbackControl*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDHWFallbackControl::AllocArray(
    UINT32 __count)
{
    chromatixPDHWFallbackControl* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDHWFallbackControl[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixMLPDControlProcess
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixMLPDControlProcess::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(useRDIPDAF);
    PARAMETER_INITIALIZE(mlpdEnabledInHWFlow);
    PARAMETER_INITIALIZE(alterLROrder);
    PARAMETER_INITIALIZE(modelNetType);
    PARAMETER_INITIALIZE(gainThLow);
    PARAMETER_INITIALIZE(gainThHigh);
    PARAMETER_INITIALIZE(gainThMax);
    PARAMETER_INITIALIZE(expIndexThLow);
    PARAMETER_INITIALIZE(expIndexThHigh);
    PARAMETER_INITIALIZE(expIndexThMax);
    PARAMETER_INITIALIZE(adrcGainThLow);
    PARAMETER_INITIALIZE(adrcGainThHigh);
    PARAMETER_INITIALIZE(adrcGainThMax);
    PARAMETER_INITIALIZE(confThLow);
    PARAMETER_INITIALIZE(confThHigh);
    PARAMETER_INITIALIZE(tradiConfTh);
    PARAMETER_INITIALIZE(dccRatio);
    PARAMETER_INITIALIZE(pdOffset);
    PARAMETER_INITIALIZE(pdMaxVarThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0x9e7fac5dda6075c5;
        entry->ReadSimpleTypeFixedArray(&useRDIPDAF, 1, localParams);
        localParams.NameHash = 0xdd2f46bd167d6862;
        entry->ReadSimpleTypeFixedArray(&mlpdEnabledInHWFlow, 1, localParams);
        localParams.NameHash = 0xd7cd59909e928c0e;
        entry->ReadSimpleTypeFixedArray(&alterLROrder, 1, localParams);
        localParams.NameHash = 0x8aa65ca05f7de1e2;
        entry->ReadSimpleTypeFixedArray(&modelNetType, 1, localParams);
        localParams.NameHash = 0xd8956286acb3b599;
        entry->ReadSimpleTypeFixedArray(&gainThLow, 1, localParams);
        localParams.NameHash = 0xd011b5af1f237fe4;
        entry->ReadSimpleTypeFixedArray(&gainThHigh, 1, localParams);
        localParams.NameHash = 0xb4077df858219c0b;
        entry->ReadSimpleTypeFixedArray(&gainThMax, 1, localParams);
        localParams.NameHash = 0xb8d598fa80bf6be5;
        entry->ReadSimpleTypeFixedArray(&expIndexThLow, 1, localParams);
        localParams.NameHash = 0xfd7fcd4ae430a6f4;
        entry->ReadSimpleTypeFixedArray(&expIndexThHigh, 1, localParams);
        localParams.NameHash = 0xd4478784742d4277;
        entry->ReadSimpleTypeFixedArray(&expIndexThMax, 1, localParams);
        localParams.NameHash = 0x9d6eebe59b1fbc0a;
        entry->ReadSimpleTypeFixedArray(&adrcGainThLow, 1, localParams);
        localParams.NameHash = 0xb35e64324a310166;
        entry->ReadSimpleTypeFixedArray(&adrcGainThHigh, 1, localParams);
        localParams.NameHash = 0xf1fcf49b6f8d9598;
        entry->ReadSimpleTypeFixedArray(&adrcGainThMax, 1, localParams);
        localParams.NameHash = 0xd975fc01efe52dbc;
        entry->ReadSimpleTypeFixedArray(&confThLow, 1, localParams);
        localParams.NameHash = 0xa8e345235e83e2d3;
        entry->ReadSimpleTypeFixedArray(&confThHigh, 1, localParams);
        localParams.NameHash = 0xe4d3b1d69ecffffc;
        entry->ReadSimpleTypeFixedArray(&tradiConfTh, 1, localParams);
        localParams.NameHash = 0xf86353fcc9d9a3b1;
        entry->ReadSimpleTypeFixedArray(&dccRatio, 1, localParams);
        localParams.NameHash = 0xeb99a8bbed097e1b;
        entry->ReadSimpleTypeFixedArray(&pdOffset, 1, localParams);
        localParams.NameHash = 0xb492eb68da1dee44;
        entry->ReadSimpleTypeFixedArray(&pdMaxVarThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixMLPDControlProcess::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixMLPDControlProcess* arrayPtr = (chromatixMLPDControlProcess*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixMLPDControlProcess::AllocArray(
    UINT32 __count)
{
    chromatixMLPDControlProcess* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixMLPDControlProcess[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningDarkFaceOptimization
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningDarkFaceOptimization::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(gamma);
    PARAMETER_INITIALIZE(topRatioBinDark);
    PARAMETER_INITIALIZE(topRatioBinBright);
    PARAMETER_INITIALIZE(thresRoiSizeSmall);
    PARAMETER_INITIALIZE(thresRoiSizeLarge);
    PARAMETER_INITIALIZE(thresDifferenceHistStats);
    PARAMETER_INITIALIZE(histCeilRatio);
    PARAMETER_INITIALIZE(histBaseRatio);
    PARAMETER_INITIALIZE(histFilterRAD);
    PARAMETER_INITIALIZE(recoverOverwritePDBuffer);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xd4d767a2ae2e3826;
        entry->ReadSimpleTypeFixedArray(&gamma, 1, localParams);
        localParams.NameHash = 0x8666950216c83432;
        entry->ReadSimpleTypeFixedArray(&topRatioBinDark, 1, localParams);
        localParams.NameHash = 0x9c544835c91987b8;
        entry->ReadSimpleTypeFixedArray(&topRatioBinBright, 1, localParams);
        localParams.NameHash = 0x93fbc372e566604e;
        entry->ReadSimpleTypeFixedArray(&thresRoiSizeSmall, 1, localParams);
        localParams.NameHash = 0xa893594b9278c418;
        entry->ReadSimpleTypeFixedArray(&thresRoiSizeLarge, 1, localParams);
        localParams.NameHash = 0xde7b91eab2f40ffd;
        entry->ReadSimpleTypeFixedArray(&thresDifferenceHistStats, 1, localParams);
        localParams.NameHash = 0xb1a77f1fce24cf0a;
        entry->ReadSimpleTypeFixedArray(&histCeilRatio, 1, localParams);
        localParams.NameHash = 0x93230641b3bcefc2;
        entry->ReadSimpleTypeFixedArray(&histBaseRatio, 1, localParams);
        localParams.NameHash = 0xdf2132276ad243e1;
        entry->ReadSimpleTypeFixedArray(&histFilterRAD, 1, localParams);
        localParams.NameHash = 0x8aaf6927ffb82cf6;
        entry->ReadSimpleTypeFixedArray(&recoverOverwritePDBuffer, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningDarkFaceOptimization::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningDarkFaceOptimization* arrayPtr = (chromatixTuningDarkFaceOptimization*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningDarkFaceOptimization::AllocArray(
    UINT32 __count)
{
    chromatixTuningDarkFaceOptimization* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningDarkFaceOptimization[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDHWOutputControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDHWOutputControl::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(preprocessMode);
    PARAMETER_INITIALIZE(parsedMode);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa1283bfeefd24946;
        entry->ReadEnumFixedArray(&preprocessMode, 1, localParams);
        localParams.NameHash = 0xda4947a65d986f94;
        entry->ReadEnumFixedArray(&parsedMode, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDHWOutputControl::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDHWOutputControl* arrayPtr = (chromatixPDHWOutputControl*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDHWOutputControl::AllocArray(
    UINT32 __count)
{
    chromatixPDHWOutputControl* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDHWOutputControl[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDAFHardwareResamplerInstruction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwareResamplerInstruction::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(SCount);
    PARAMETER_INITIALIZE(S);
    PARAMETER_INITIALIZE(OCount);
    PARAMETER_INITIALIZE(O);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xe041b0f32e0c13a5;
        entry->ReadSimpleTypeArray(S, SCount, SID, 1,
            localParams, __COUNTER__);
        localParams.NameHash = 0xd8d32c0df4008586;
        entry->ReadSimpleTypeArray(O, OCount, OID, 1,
            localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDAFHardwareResamplerInstruction::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDAFHardwareResamplerInstruction* arrayPtr = (chromatixPDAFHardwareResamplerInstruction*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDAFHardwareResamplerInstruction::AllocArray(
    UINT32 __count)
{
    chromatixPDAFHardwareResamplerInstruction* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDAFHardwareResamplerInstruction[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDAFHardwareResampler
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwareResampler::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(inputBlockWidth);
    PARAMETER_INITIALIZE(inputBlockHeight);
    PARAMETER_INITIALIZE(outputBlockWidth);
    PARAMETER_INITIALIZE(outputBlockHeight);
    PARAMETER_INITIALIZE(instructionsCount);
    PARAMETER_INITIALIZE(instructions);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xeef9de68b259e86f;
        entry->ReadSimpleTypeFixedArray(&inputBlockWidth, 1, localParams);
        localParams.NameHash = 0xba8e6ca8f4983b2d;
        entry->ReadSimpleTypeFixedArray(&inputBlockHeight, 1, localParams);
        localParams.NameHash = 0x826580da1ba4f3bc;
        entry->ReadSimpleTypeFixedArray(&outputBlockWidth, 1, localParams);
        localParams.NameHash = 0x818605e7d492458a;
        entry->ReadSimpleTypeFixedArray(&outputBlockHeight, 1, localParams);
        localParams.NameHash = 0x807a7fb10c2e8c57;
        entry->ReadStructureArray(instructions, instructionsCount, instructionsID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDAFHardwareResampler::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDAFHardwareResampler* arrayPtr = (chromatixPDAFHardwareResampler*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDAFHardwareResampler::AllocArray(
    UINT32 __count)
{
    chromatixPDAFHardwareResampler* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDAFHardwareResampler[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDAFHardwarePixelSeparator
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwarePixelSeparator::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(inputBlockWidth);
    PARAMETER_INITIALIZE(inputBlockHeight);
    PARAMETER_INITIALIZE(outputBlockWidth);
    PARAMETER_INITIALIZE(outputBlockHeight);
    PARAMETER_INITIALIZE(pixelSpan);
    PARAMETER_INITIALIZE(L_mapCount);
    PARAMETER_INITIALIZE(L_map);
    PARAMETER_INITIALIZE(R_mapCount);
    PARAMETER_INITIALIZE(R_map);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xeef9de68b259e86f;
        entry->ReadSimpleTypeFixedArray(&inputBlockWidth, 1, localParams);
        localParams.NameHash = 0xba8e6ca8f4983b2d;
        entry->ReadSimpleTypeFixedArray(&inputBlockHeight, 1, localParams);
        localParams.NameHash = 0x826580da1ba4f3bc;
        entry->ReadSimpleTypeFixedArray(&outputBlockWidth, 1, localParams);
        localParams.NameHash = 0x818605e7d492458a;
        entry->ReadSimpleTypeFixedArray(&outputBlockHeight, 1, localParams);
        localParams.NameHash = 0xd8a45bba4ee8201b;
        entry->ReadSimpleTypeFixedArray(&pixelSpan, 1, localParams);
        localParams.NameHash = 0x96a15bb49fc63497;
        entry->ReadSimpleTypeArray(L_map, L_mapCount, L_mapID, 1,
            localParams, __COUNTER__);
        localParams.NameHash = 0xf4745cc2421b436e;
        entry->ReadSimpleTypeArray(R_map, R_mapCount, R_mapID, 1,
            localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDAFHardwarePixelSeparator::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDAFHardwarePixelSeparator* arrayPtr = (chromatixPDAFHardwarePixelSeparator*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDAFHardwarePixelSeparator::AllocArray(
    UINT32 __count)
{
    chromatixPDAFHardwarePixelSeparator* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDAFHardwarePixelSeparator[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDAFHardwareLineExtractor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwareLineExtractor::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(XOffset);
    PARAMETER_INITIALIZE(YOffset);
    PARAMETER_INITIALIZE(HalfLine);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x8d2d140923661e7f;
        entry->ReadSimpleTypeFixedArray(&XOffset, 1, localParams);
        localParams.NameHash = 0xa5e1c31675a5532c;
        entry->ReadSimpleTypeFixedArray(&YOffset, 1, localParams);
        localParams.NameHash = 0xb3f2e8fdd188d831;
        entry->ReadSimpleTypeFixedArray(&HalfLine, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDAFHardwareLineExtractor::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDAFHardwareLineExtractor* arrayPtr = (chromatixPDAFHardwareLineExtractor*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDAFHardwareLineExtractor::AllocArray(
    UINT32 __count)
{
    chromatixPDAFHardwareLineExtractor* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDAFHardwareLineExtractor[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDAFHardwarePixelExtractor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwarePixelExtractor::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(outputWidth);
    PARAMETER_INITIALIZE(outputHeight);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xea68b24442f374c1;
        entry->ReadSimpleTypeFixedArray(&outputWidth, 1, localParams);
        localParams.NameHash = 0xce46a5adfa61b01e;
        entry->ReadSimpleTypeFixedArray(&outputHeight, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDAFHardwarePixelExtractor::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDAFHardwarePixelExtractor* arrayPtr = (chromatixPDAFHardwarePixelExtractor*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDAFHardwarePixelExtractor::AllocArray(
    UINT32 __count)
{
    chromatixPDAFHardwarePixelExtractor* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDAFHardwarePixelExtractor[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningHardwarePattern
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningHardwarePattern::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(pixelExtractor);
    PARAMETER_INITIALIZE(lineExtractorCount);
    PARAMETER_INITIALIZE(lineExtractor);
    PARAMETER_INITIALIZE(pixelSeparator);
    PARAMETER_INITIALIZE(resampler);
    PARAMETER_INITIALIZE(gridWidthScaleRatio);
    PARAMETER_INITIALIZE(gridHeightScaleRatio);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9b136bc2c8f2fa60;
        pixelExtractor.Load(localParams);
        localParams.NameHash = 0xd8ebbe66bccd22de;
        entry->ReadStructureArray(lineExtractor, lineExtractorCount, lineExtractorID, 1, localParams, __COUNTER__);
        localParams.NameHash        = 0xb301e016101fac57;
        pixelSeparator.Load(localParams);
        localParams.NameHash        = 0x946de3304701fccf;
        resampler.Load(localParams);
        localParams.NameHash = 0xffee2445e2de6143;
        entry->ReadSimpleTypeFixedArray(&gridWidthScaleRatio, 1, localParams);
        localParams.NameHash = 0xe81f973a45fd15ed;
        entry->ReadSimpleTypeFixedArray(&gridHeightScaleRatio, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningHardwarePattern::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningHardwarePattern* arrayPtr = (chromatixTuningHardwarePattern*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningHardwarePattern::AllocArray(
    UINT32 __count)
{
    chromatixTuningHardwarePattern* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningHardwarePattern[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningHardwareGeometry
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningHardwareGeometry::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enabldHardwarePDModule);
    PARAMETER_INITIALIZE(enableOverlap);
    PARAMETER_INITIALIZE(numOfHoriGrids);
    PARAMETER_INITIALIZE(numOfVertGrids);
    PARAMETER_INITIALIZE(horiNumOfRGNInGridUnit);
    PARAMETER_INITIALIZE(vertNumOfRGNInGridUnit);
    PARAMETER_INITIALIZE(horiRegionOffset);
    PARAMETER_INITIALIZE(vertRegionOffset);
    PARAMETER_INITIALIZE(widhtOfRegion);
    PARAMETER_INITIALIZE(heightOfRegion);
    PARAMETER_INITIALIZE(horiNumOfRegion);
    PARAMETER_INITIALIZE(vertNumOfRegion);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xffa82bed331c0789;
        entry->ReadSimpleTypeFixedArray(&enabldHardwarePDModule, 1, localParams);
        localParams.NameHash = 0xe0c65e126e442a47;
        entry->ReadSimpleTypeFixedArray(&enableOverlap, 1, localParams);
        localParams.NameHash = 0xc2bc44f69aaa1012;
        entry->ReadSimpleTypeFixedArray(&numOfHoriGrids, 1, localParams);
        localParams.NameHash = 0x945a854601b9aee6;
        entry->ReadSimpleTypeFixedArray(&numOfVertGrids, 1, localParams);
        localParams.NameHash = 0xf88f91fe57ca82fe;
        entry->ReadSimpleTypeFixedArray(&horiNumOfRGNInGridUnit, 1, localParams);
        localParams.NameHash = 0xc023ad73167a3d4b;
        entry->ReadSimpleTypeFixedArray(&vertNumOfRGNInGridUnit, 1, localParams);
        localParams.NameHash = 0xfa11bcb20a126c00;
        entry->ReadSimpleTypeFixedArray(&horiRegionOffset, 1, localParams);
        localParams.NameHash = 0xd57787cff2009904;
        entry->ReadSimpleTypeFixedArray(&vertRegionOffset, 1, localParams);
        localParams.NameHash = 0xa38ded5a55013fbe;
        entry->ReadSimpleTypeFixedArray(&widhtOfRegion, 1, localParams);
        localParams.NameHash = 0xeafe1770271a4e1b;
        entry->ReadSimpleTypeFixedArray(&heightOfRegion, 1, localParams);
        localParams.NameHash = 0xff1124f8b1620877;
        entry->ReadSimpleTypeFixedArray(&horiNumOfRegion, 1, localParams);
        localParams.NameHash = 0x87cf8046ba384a63;
        entry->ReadSimpleTypeFixedArray(&vertNumOfRegion, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningHardwareGeometry::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningHardwareGeometry* arrayPtr = (chromatixTuningHardwareGeometry*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningHardwareGeometry::AllocArray(
    UINT32 __count)
{
    chromatixTuningHardwareGeometry* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningHardwareGeometry[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRStatsEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRStatsEntryType::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(value);
    PARAMETER_INITIALIZE(weight);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x99e86049a1c11b8b;
        entry->ReadSimpleTypeFixedArray(&value, 1, localParams);
        localParams.NameHash = 0xbe059318b040bcf4;
        entry->ReadSimpleTypeFixedArray(&weight, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void HDRStatsEntryType::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        HDRStatsEntryType* arrayPtr = (HDRStatsEntryType*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* HDRStatsEntryType::AllocArray(
    UINT32 __count)
{
    HDRStatsEntryType* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW HDRStatsEntryType[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRProcessingTypeGrid
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGrid::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(StatsTypeArr);
    PARAMETER_INITIALIZE(entriesCount);
    PARAMETER_INITIALIZE(entries);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xc8bef15bf8e53a8e;
        entry->ReadEnumFixedArray(&StatsTypeArr, 1, localParams);
        localParams.NameHash = 0xa11b26aede82b2a0;
        entry->ReadStructureArray(entries, entriesCount, entriesID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void HDRProcessingTypeGrid::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        HDRProcessingTypeGrid* arrayPtr = (HDRProcessingTypeGrid*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* HDRProcessingTypeGrid::AllocArray(
    UINT32 __count)
{
    HDRProcessingTypeGrid* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW HDRProcessingTypeGrid[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRProcessingTypeGlobal
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGlobal::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(StatsTypeArr);
    PARAMETER_INITIALIZE(entriesCount);
    PARAMETER_INITIALIZE(entries);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xc8bef15bf8e53a8e;
        entry->ReadEnumFixedArray(&StatsTypeArr, 1, localParams);
        localParams.NameHash = 0xa11b26aede82b2a0;
        entry->ReadStructureArray(entries, entriesCount, entriesID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void HDRProcessingTypeGlobal::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        HDRProcessingTypeGlobal* arrayPtr = (HDRProcessingTypeGlobal*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* HDRProcessingTypeGlobal::AllocArray(
    UINT32 __count)
{
    HDRProcessingTypeGlobal* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW HDRProcessingTypeGlobal[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRBiasEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRBiasEntryType::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(biasType);
    PARAMETER_INITIALIZE(weight);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x90d1e8595a964d4f;
        entry->ReadEnumFixedArray(&biasType, 1, localParams);
        localParams.NameHash = 0xbe059318b040bcf4;
        entry->ReadSimpleTypeFixedArray(&weight, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void HDRBiasEntryType::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        HDRBiasEntryType* arrayPtr = (HDRBiasEntryType*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* HDRBiasEntryType::AllocArray(
    UINT32 __count)
{
    HDRBiasEntryType* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW HDRBiasEntryType[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibHDRControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(modeSelect);
    PARAMETER_INITIALIZE(bias);
    PARAMETER_INITIALIZE(statsTypeGlobal);
    PARAMETER_INITIALIZE(statsTypeGrid);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xf83d5cd6fc72ab0f;
        entry->ReadEnumFixedArray(&modeSelect, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xdb6a8b598f18f002;
        bias.Load(localParams);
        localParams.NameHash        = 0xa698f317a8e5fa2f;
        statsTypeGlobal.Load(localParams);
        localParams.NameHash        = 0xb88035df43c335dc;
        statsTypeGrid.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibHDRControl::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDLibHDRControl* arrayPtr = (chromatixPDLibHDRControl*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibHDRControl::AllocArray(
    UINT32 __count)
{
    chromatixPDLibHDRControl* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDLibHDRControl[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibHDRControl_biasStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::biasStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(entriesCount);
    PARAMETER_INITIALIZE(entries);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa11b26aede82b2a0;
        entry->ReadStructureArray(entries, entriesCount, entriesID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibHDRControl::biasStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        biasStruct* arrayPtr = (biasStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibHDRControl::biasStruct::AllocArray(
    UINT32 __count)
{
    biasStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW biasStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibHDRControl_statsTypeGlobalStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::statsTypeGlobalStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(StatsControlArrCount);
    PARAMETER_INITIALIZE(StatsControlArr);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdf6d4b7e29594b57;
        entry->ReadStructureArray(StatsControlArr, StatsControlArrCount, StatsControlArrID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibHDRControl::statsTypeGlobalStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        statsTypeGlobalStruct* arrayPtr = (statsTypeGlobalStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibHDRControl::statsTypeGlobalStruct::AllocArray(
    UINT32 __count)
{
    statsTypeGlobalStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW statsTypeGlobalStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibHDRControl_statsTypeGridStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::statsTypeGridStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(StatsControlArrCount);
    PARAMETER_INITIALIZE(StatsControlArr);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdf6d4b7e29594b57;
        entry->ReadStructureArray(StatsControlArr, StatsControlArrCount, StatsControlArrID, 0, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibHDRControl::statsTypeGridStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        statsTypeGridStruct* arrayPtr = (statsTypeGridStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibHDRControl::statsTypeGridStruct::AllocArray(
    UINT32 __count)
{
    statsTypeGridStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW statsTypeGridStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningSkipControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningSkipControl::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(staticFrameCountThres);
    PARAMETER_INITIALIZE(maxFrameRate);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xba72d08828caa05a;
        entry->ReadSimpleTypeFixedArray(&staticFrameCountThres, 1, localParams);
        localParams.NameHash = 0x818a6fe9f7af6636;
        entry->ReadSimpleTypeFixedArray(&maxFrameRate, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningSkipControl::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningSkipControl* arrayPtr = (chromatixTuningSkipControl*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningSkipControl::AllocArray(
    UINT32 __count)
{
    chromatixTuningSkipControl* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningSkipControl[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixHVConfWeight
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixHVConfWeight::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(weight);
    PARAMETER_INITIALIZE(confThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xbe059318b040bcf4;
        entry->ReadSimpleTypeFixedArray(&weight, 1, localParams);
        localParams.NameHash = 0xff8135f1dabde2e3;
        entry->ReadSimpleTypeFixedArray(&confThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixHVConfWeight::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixHVConfWeight* arrayPtr = (chromatixHVConfWeight*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixHVConfWeight::AllocArray(
    UINT32 __count)
{
    chromatixHVConfWeight* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixHVConfWeight[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixHVControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixHVControl::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(PDProcessingAxis);
    PARAMETER_INITIALIZE(horizontalConfWeightTuningCount);
    PARAMETER_INITIALIZE(horizontalConfWeightTuning);
    PARAMETER_INITIALIZE(verticalConfWeightTuningCount);
    PARAMETER_INITIALIZE(verticalConfWeightTuning);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xfa1b2eb7ba7d7f96;
        entry->ReadEnumFixedArray(&PDProcessingAxis, 1, localParams);
        localParams.NameHash = 0xf9973b32c67f78b6;
        entry->ReadStructureArray(horizontalConfWeightTuning, horizontalConfWeightTuningCount, horizontalConfWeightTuningID, 1, localParams, __COUNTER__);
        localParams.NameHash = 0xddaa753995fa15d4;
        entry->ReadStructureArray(verticalConfWeightTuning, verticalConfWeightTuningCount, verticalConfWeightTuningID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixHVControl::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixHVControl* arrayPtr = (chromatixHVControl*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixHVControl::AllocArray(
    UINT32 __count)
{
    chromatixHVControl* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixHVControl[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningProcessLevel
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningProcessLevel::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(processingMode);
    PARAMETER_INITIALIZE(dynamicLevel);
    PARAMETER_INITIALIZE(staticLevel);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xaa5e6c2961e3a675;
        entry->ReadEnumFixedArray(&processingMode, 1, localParams);
        localParams.NameHash = 0x9094ac98670e1928;
        entry->ReadSimpleTypeFixedArray(&dynamicLevel, 1, localParams);
        localParams.NameHash = 0xab826bd9e5810299;
        entry->ReadSimpleTypeFixedArray(&staticLevel, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningProcessLevel::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningProcessLevel* arrayPtr = (chromatixTuningProcessLevel*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningProcessLevel::AllocArray(
    UINT32 __count)
{
    chromatixTuningProcessLevel* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningProcessLevel[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningAdaptiveK
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningAdaptiveK::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(timeoutFrameCntThres);
    PARAMETER_INITIALIZE(filterSize);
    PARAMETER_INITIALIZE(state0StableCntThres);
    PARAMETER_INITIALIZE(state1StableCntThres);
    PARAMETER_INITIALIZE(minimumLensPosDelta);
    PARAMETER_INITIALIZE(state0ConfThres);
    PARAMETER_INITIALIZE(state1ConfThres);
    PARAMETER_INITIALIZE(state0PhaseDiffThres);
    PARAMETER_INITIALIZE(state1PhaseDiffThres);
    PARAMETER_INITIALIZE(tolNearTargetUpperBound);
    PARAMETER_INITIALIZE(tolNearTargetLowerBound);
    PARAMETER_INITIALIZE(tolFarTargetUpperBound);
    PARAMETER_INITIALIZE(tolFarTargetLowerBound);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0x9d731c304c495a9b;
        entry->ReadSimpleTypeFixedArray(&timeoutFrameCntThres, 1, localParams);
        localParams.NameHash = 0xc9cd3faac9926a6d;
        entry->ReadSimpleTypeFixedArray(&filterSize, 1, localParams);
        localParams.NameHash = 0xdc9aeb6af73c1875;
        entry->ReadSimpleTypeFixedArray(&state0StableCntThres, 1, localParams);
        localParams.NameHash = 0x93edb41fef10155a;
        entry->ReadSimpleTypeFixedArray(&state1StableCntThres, 1, localParams);
        localParams.NameHash = 0xa7ddd1b76d3b51df;
        entry->ReadSimpleTypeFixedArray(&minimumLensPosDelta, 1, localParams);
        localParams.NameHash = 0xabe68e5b86b886f0;
        entry->ReadSimpleTypeFixedArray(&state0ConfThres, 1, localParams);
        localParams.NameHash = 0xf6473c7165af522c;
        entry->ReadSimpleTypeFixedArray(&state1ConfThres, 1, localParams);
        localParams.NameHash = 0xc4c408c1e7d4907d;
        entry->ReadSimpleTypeFixedArray(&state0PhaseDiffThres, 1, localParams);
        localParams.NameHash = 0x8bb357b4fff89d52;
        entry->ReadSimpleTypeFixedArray(&state1PhaseDiffThres, 1, localParams);
        localParams.NameHash = 0xf79ae567cfc5f276;
        entry->ReadSimpleTypeFixedArray(&tolNearTargetUpperBound, 1, localParams);
        localParams.NameHash = 0xbe6415d26d7c00b2;
        entry->ReadSimpleTypeFixedArray(&tolNearTargetLowerBound, 1, localParams);
        localParams.NameHash = 0xf9cd5874143d426a;
        entry->ReadSimpleTypeFixedArray(&tolFarTargetUpperBound, 1, localParams);
        localParams.NameHash = 0xb033a8c1b684b0ae;
        entry->ReadSimpleTypeFixedArray(&tolFarTargetLowerBound, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningAdaptiveK::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningAdaptiveK* arrayPtr = (chromatixTuningAdaptiveK*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningAdaptiveK::AllocArray(
    UINT32 __count)
{
    chromatixTuningAdaptiveK* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningAdaptiveK[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibRepeatPatternDetect
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibRepeatPatternDetect::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(maxRevCnt);
    PARAMETER_INITIALIZE(changeRatio);
    PARAMETER_INITIALIZE(revDisTol);
    PARAMETER_INITIALIZE(confThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xd78d4b29eb0d2ff4;
        entry->ReadSimpleTypeFixedArray(&maxRevCnt, 1, localParams);
        localParams.NameHash = 0x86ae12e6cc4ab342;
        entry->ReadSimpleTypeFixedArray(&changeRatio, 1, localParams);
        localParams.NameHash = 0xd8106544baae92cb;
        entry->ReadSimpleTypeFixedArray(&revDisTol, 1, localParams);
        localParams.NameHash = 0xff8135f1dabde2e3;
        entry->ReadSimpleTypeFixedArray(&confThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibRepeatPatternDetect::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDLibRepeatPatternDetect* arrayPtr = (chromatixPDLibRepeatPatternDetect*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibRepeatPatternDetect::AllocArray(
    UINT32 __count)
{
    chromatixPDLibRepeatPatternDetect* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDLibRepeatPatternDetect[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLIBPostprocessingTemporalFilterSetting
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLIBPostprocessingTemporalFilterSetting::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(AECTrigger);
    PARAMETER_INITIALIZE(dynamicWeight);
    PARAMETER_INITIALIZE(staticWeight);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x8b1babeb972c8997;
        AECTrigger.Load(localParams);
        localParams.NameHash = 0x854fed26b475afb5;
        entry->ReadSimpleTypeFixedArray(&dynamicWeight, 1, localParams);
        localParams.NameHash = 0xcac8d2e59042530b;
        entry->ReadSimpleTypeFixedArray(&staticWeight, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLIBPostprocessingTemporalFilterSetting::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDLIBPostprocessingTemporalFilterSetting* arrayPtr = (chromatixPDLIBPostprocessingTemporalFilterSetting*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLIBPostprocessingTemporalFilterSetting::AllocArray(
    UINT32 __count)
{
    chromatixPDLIBPostprocessingTemporalFilterSetting* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDLIBPostprocessingTemporalFilterSetting[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTemporalFilterTrigger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTemporalFilterTrigger::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(temporalFilterSet);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xcde83f294ad97ab9;
        entry->ReadStructureFixedArray(temporalFilterSet, temporalFilterSetFixedCount, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTemporalFilterTrigger::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTemporalFilterTrigger* arrayPtr = (chromatixTemporalFilterTrigger*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTemporalFilterTrigger::AllocArray(
    UINT32 __count)
{
    chromatixTemporalFilterTrigger* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTemporalFilterTrigger[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningPostProcess
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningPostProcess::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(biasVectorStrength);
    PARAMETER_INITIALIZE(temporalFilterStaticWeight);
    PARAMETER_INITIALIZE(temporalFilterDynamicWeight);
    PARAMETER_INITIALIZE(temporalFilterTrigger);
    PARAMETER_INITIALIZE(enableGridOverlap);
    PARAMETER_INITIALIZE(enableFocusMapGridOverlap);
    PARAMETER_INITIALIZE(confIntegralWidth);
    PARAMETER_INITIALIZE(repeatPatternDetect);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x83b89fe7e82320d3;
        entry->ReadSimpleTypeFixedArray(&biasVectorStrength, 1, localParams);
        localParams.NameHash = 0xf14d62bf023587b0;
        entry->ReadSimpleTypeFixedArray(&temporalFilterStaticWeight, 1, localParams);
        localParams.NameHash = 0xdce694fadf081ad6;
        entry->ReadSimpleTypeFixedArray(&temporalFilterDynamicWeight, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xbc9ba61bfe5eefb5;
        temporalFilterTrigger.Load(localParams);
        localParams.NameHash = 0xb0cdcfa8b3bd2d2b;
        entry->ReadSimpleTypeFixedArray(&enableGridOverlap, 1, localParams);
        localParams.NameHash = 0xc4ca885f4ec11b21;
        entry->ReadSimpleTypeFixedArray(&enableFocusMapGridOverlap, 1, localParams);
        localParams.NameHash = 0xf6bdbffb0bf66b5f;
        entry->ReadSimpleTypeFixedArray(&confIntegralWidth, 1, localParams);
        localParams.NameHash        = 0xfbfb5457fdc966b2;
        repeatPatternDetect.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningPostProcess::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningPostProcess* arrayPtr = (chromatixTuningPostProcess*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningPostProcess::AllocArray(
    UINT32 __count)
{
    chromatixTuningPostProcess* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningPostProcess[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDRange
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDRange::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(from);
    PARAMETER_INITIALIZE(to);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xde508fb88c314137;
        entry->ReadSimpleTypeFixedArray(&from, 1, localParams);
        localParams.NameHash = 0xe8e6c006e84896db;
        entry->ReadSimpleTypeFixedArray(&to, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDRange::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDRange* arrayPtr = (chromatixPDRange*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDRange::AllocArray(
    UINT32 __count)
{
    chromatixPDRange* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDRange[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningCorrelation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningCorrelation::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(minimumConfidenceLevel);
    PARAMETER_INITIALIZE(defocusConfidenceThreshold);
    PARAMETER_INITIALIZE(PDRangeControl);
    PARAMETER_INITIALIZE(searchRange);
    PARAMETER_INITIALIZE(lcrSearchRange);
    PARAMETER_INITIALIZE(lcrConfidenceThresholdLow);
    PARAMETER_INITIALIZE(lcrConfidenceThresholdHigh);
    PARAMETER_INITIALIZE(advanceSparseProcMode);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xce7b305c21e74e1c;
        entry->ReadSimpleTypeFixedArray(&minimumConfidenceLevel, 1, localParams);
        localParams.NameHash = 0x92941a576d9ee3c9;
        entry->ReadSimpleTypeFixedArray(&defocusConfidenceThreshold, 1, localParams);
        localParams.NameHash = 0xf1fb929623960cf7;
        entry->ReadSimpleTypeFixedArray(&PDRangeControl, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x8c48a9da18e958d1;
        searchRange.Load(localParams);
        localParams.NameHash        = 0xa6d954f4030e3728;
        lcrSearchRange.Load(localParams);
        localParams.NameHash = 0xbd0ea71cd353f750;
        entry->ReadSimpleTypeFixedArray(&lcrConfidenceThresholdLow, 1, localParams);
        localParams.NameHash = 0xd9b97b35f8310930;
        entry->ReadSimpleTypeFixedArray(&lcrConfidenceThresholdHigh, 1, localParams);
        localParams.NameHash = 0xce482cca06a78798;
        entry->ReadEnumFixedArray(&advanceSparseProcMode, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningCorrelation::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningCorrelation* arrayPtr = (chromatixTuningCorrelation*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningCorrelation::AllocArray(
    UINT32 __count)
{
    chromatixTuningCorrelation* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningCorrelation[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLIBPreprocessingFilterSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLIBPreprocessingFilterSettings::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(AECTrigger);
    PARAMETER_INITIALIZE(verticalMode);
    PARAMETER_INITIALIZE(horizontalMode);
    PARAMETER_INITIALIZE(boxFilterLength);
    PARAMETER_INITIALIZE(antiAliasFilterThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x8b1babeb972c8997;
        AECTrigger.Load(localParams);
        localParams.NameHash = 0x9cde836b09518319;
        entry->ReadSimpleTypeFixedArray(&verticalMode, 1, localParams);
        localParams.NameHash = 0x81ab0dfc2022e069;
        entry->ReadSimpleTypeFixedArray(&horizontalMode, 1, localParams);
        localParams.NameHash = 0x8e1831a1228dddeb;
        entry->ReadSimpleTypeFixedArray(&boxFilterLength, 1, localParams);
        localParams.NameHash = 0x8cba29081c3a1e76;
        entry->ReadSimpleTypeFixedArray(&antiAliasFilterThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLIBPreprocessingFilterSettings::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDLIBPreprocessingFilterSettings* arrayPtr = (chromatixPDLIBPreprocessingFilterSettings*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLIBPreprocessingFilterSettings::AllocArray(
    UINT32 __count)
{
    chromatixPDLIBPreprocessingFilterSettings* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDLIBPreprocessingFilterSettings[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixLCRFilterTrigger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixLCRFilterTrigger::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(filterSet);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xbe027975992496e3;
        entry->ReadStructureFixedArray(filterSet, filterSetFixedCount, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixLCRFilterTrigger::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixLCRFilterTrigger* arrayPtr = (chromatixLCRFilterTrigger*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixLCRFilterTrigger::AllocArray(
    UINT32 __count)
{
    chromatixLCRFilterTrigger* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixLCRFilterTrigger[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixDPDFilterTrigger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixDPDFilterTrigger::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(filterSet);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xbe027975992496e3;
        entry->ReadStructureFixedArray(filterSet, filterSetFixedCount, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixDPDFilterTrigger::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixDPDFilterTrigger* arrayPtr = (chromatixDPDFilterTrigger*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixDPDFilterTrigger::AllocArray(
    UINT32 __count)
{
    chromatixDPDFilterTrigger* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixDPDFilterTrigger[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningSpotLight
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningSpotLight::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(mode);
    PARAMETER_INITIALIZE(sequenceCntThreshold);
    PARAMETER_INITIALIZE(pixelValThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3c00adf8e304e57;
        entry->ReadSimpleTypeFixedArray(&enable, 1, localParams);
        localParams.NameHash = 0xf7368cb47b0f617b;
        entry->ReadEnumFixedArray(&mode, 1, localParams);
        localParams.NameHash = 0x8e6e79d1bcb76daf;
        entry->ReadSimpleTypeFixedArray(&sequenceCntThreshold, 1, localParams);
        localParams.NameHash = 0xacabadcddeff61df;
        entry->ReadSimpleTypeFixedArray(&pixelValThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningSpotLight::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningSpotLight* arrayPtr = (chromatixTuningSpotLight*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningSpotLight::AllocArray(
    UINT32 __count)
{
    chromatixTuningSpotLight* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningSpotLight[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningHDRCfg
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningHDRCfg::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(channelSelection);
    PARAMETER_INITIALIZE(longThreshold);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xb3fb3fca0d694c24;
        entry->ReadEnumFixedArray(&channelSelection, 1, localParams);
        localParams.NameHash = 0xae918b4fe896b457;
        entry->ReadSimpleTypeFixedArray(&longThreshold, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningHDRCfg::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningHDRCfg* arrayPtr = (chromatixTuningHDRCfg*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningHDRCfg::AllocArray(
    UINT32 __count)
{
    chromatixTuningHDRCfg* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningHDRCfg[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningPreProcess
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningPreProcess::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(sparseProcessingMode);
    PARAMETER_INITIALIZE(HDR);
    PARAMETER_INITIALIZE(boxFilterLength);
    PARAMETER_INITIALIZE(antiAliasFilterThreshold);
    PARAMETER_INITIALIZE(saturationThreshold);
    PARAMETER_INITIALIZE(spotLightCompensation);
    PARAMETER_INITIALIZE(filterTrigger);
    PARAMETER_INITIALIZE(lcrFilterTrigger);
    PARAMETER_INITIALIZE(lcrChannel);
    PARAMETER_INITIALIZE(lcrBinningMode);
    PARAMETER_INITIALIZE(lcrRawType);
    PARAMETER_INITIALIZE(lcrMaxBinningNum);
    PARAMETER_INITIALIZE(lcrChannelSeparated);
    PARAMETER_INITIALIZE(lcrXCFAType);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x815dfbc74065f4eb;
        entry->ReadEnumFixedArray(&sparseProcessingMode, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xf829f80e8fa587c6;
        HDR.Load(localParams);
        localParams.NameHash = 0x8e1831a1228dddeb;
        entry->ReadSimpleTypeFixedArray(&boxFilterLength, 1, localParams);
        localParams.NameHash = 0x8cba29081c3a1e76;
        entry->ReadSimpleTypeFixedArray(&antiAliasFilterThreshold, 1, localParams);
        localParams.NameHash = 0xf1d9b453dda8ff84;
        entry->ReadSimpleTypeFixedArray(&saturationThreshold, 1, localParams);
        localParams.NameHash        = 0xf47df7492629d69e;
        spotLightCompensation.Load(localParams);
        localParams.NameHash        = 0x9f752f635435e4d6;
        filterTrigger.Load(localParams);
        localParams.NameHash        = 0xda92f2645d2787db;
        lcrFilterTrigger.Load(localParams);
        localParams.NameHash = 0xaa0f3b34d9186a47;
        entry->ReadEnumFixedArray(&lcrChannel, 1, localParams);
        localParams.NameHash = 0xad4e036f926df896;
        entry->ReadEnumFixedArray(&lcrBinningMode, 1, localParams);
        localParams.NameHash = 0xd47df76012f2f5ad;
        entry->ReadEnumFixedArray(&lcrRawType, 1, localParams);
        localParams.NameHash = 0xdfbf86f29d9d8ff7;
        entry->ReadSimpleTypeFixedArray(&lcrMaxBinningNum, 1, localParams);
        localParams.NameHash = 0xfa1fd75294834c89;
        entry->ReadSimpleTypeFixedArray(&lcrChannelSeparated, 1, localParams);
        localParams.NameHash = 0xb674c88991a5bfb2;
        entry->ReadEnumFixedArray(&lcrXCFAType, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixTuningPreProcess::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixTuningPreProcess* arrayPtr = (chromatixTuningPreProcess*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixTuningPreProcess::AllocArray(
    UINT32 __count)
{
    chromatixTuningPreProcess* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixTuningPreProcess[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(preProcess);
    PARAMETER_INITIALIZE(preProcessVertical);
    PARAMETER_INITIALIZE(correlation);
    PARAMETER_INITIALIZE(correlationVertical);
    PARAMETER_INITIALIZE(postProcess);
    PARAMETER_INITIALIZE(postProcessVertical);
    PARAMETER_INITIALIZE(adaptiveK);
    PARAMETER_INITIALIZE(enablePeripheralWindows);
    PARAMETER_INITIALIZE(singleWindowProcessingLevel);
    PARAMETER_INITIALIZE(singleWindowProcessingLevelVertical);
    PARAMETER_INITIALIZE(gridProcessingLevel);
    PARAMETER_INITIALIZE(gridProcessingLevelVertical);
    PARAMETER_INITIALIZE(PeripheralProcessing);
    PARAMETER_INITIALIZE(PeripheralProcessingVertical);
    PARAMETER_INITIALIZE(LFMProcessingLevel);
    PARAMETER_INITIALIZE(HVControl);
    PARAMETER_INITIALIZE(skipControl);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(hardwareGeometry);
    PARAMETER_INITIALIZE(hardwarePatternCount);
    PARAMETER_INITIALIZE(hardwarePattern);
    PARAMETER_INITIALIZE(enableFocusMaps);
    PARAMETER_INITIALIZE(FocusMapInterrupt);
    PARAMETER_INITIALIZE(LFMCorrectionRange);
    PARAMETER_INITIALIZE(PDHWOutputControl);
    PARAMETER_INITIALIZE(darkFaceOptimization);
    PARAMETER_INITIALIZE(mlpdControlProcess);
    PARAMETER_INITIALIZE(PDHWFallbackControl);
    PARAMETER_INITIALIZE(extensionParamCount);
    PARAMETER_INITIALIZE(extensionParam);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xe11cd9f365a2599f;
        module_version.Load(localParams);
        localParams.NameHash        = 0xca3106e199a12935;
        parameter_version.Load(localParams);
        localParams.NameHash        = 0xc79b5b0cdf485a19;
        preProcess.Load(localParams);
        localParams.NameHash        = 0xcfdc29c9395a6e4a;
        preProcessVertical.Load(localParams);
        localParams.NameHash        = 0xc5044c05e7f5f30b;
        correlation.Load(localParams);
        localParams.NameHash        = 0xa3c061e2cc76cbea;
        correlationVertical.Load(localParams);
        localParams.NameHash        = 0x8ff029d36f23b360;
        postProcess.Load(localParams);
        localParams.NameHash        = 0xb55001df1351dfeb;
        postProcessVertical.Load(localParams);
        localParams.NameHash        = 0xc5213fc050a29ced;
        adaptiveK.Load(localParams);
        localParams.NameHash = 0x8ff43ac87d2b406f;
        entry->ReadSimpleTypeFixedArray(&enablePeripheralWindows, 1, localParams);
        localParams.NameHash        = 0xb1d1e3e51d762c6c;
        singleWindowProcessingLevel.Load(localParams);
        localParams.NameHash        = 0xcf22ffec013b938f;
        singleWindowProcessingLevelVertical.Load(localParams);
        localParams.NameHash        = 0x8bf0550072d5e7e2;
        gridProcessingLevel.Load(localParams);
        localParams.NameHash        = 0x8a02b03eaaafcc91;
        gridProcessingLevelVertical.Load(localParams);
        localParams.NameHash        = 0xf9eba3a5db30c430;
        PeripheralProcessing.Load(localParams);
        localParams.NameHash        = 0xb4b9b19e4c476b40;
        PeripheralProcessingVertical.Load(localParams);
        localParams.NameHash        = 0xf9be96c4d29d1706;
        LFMProcessingLevel.Load(localParams);
        localParams.NameHash        = 0xcd66d4de9c48ff19;
        HVControl.Load(localParams);
        localParams.NameHash        = 0xbc24262bf9002046;
        skipControl.Load(localParams);
        localParams.NameHash        = 0xe37e98bae04a15a8;
        HDRControl.Load(localParams);
        localParams.NameHash        = 0x9b984f46acedf865;
        hardwareGeometry.Load(localParams);
        localParams.NameHash = 0x9290c30068a0c8b5;
        entry->ReadStructureArray(hardwarePattern, hardwarePatternCount, hardwarePatternID, 0, localParams, __COUNTER__);
        localParams.NameHash = 0xd5f7644ebfa9d27f;
        entry->ReadSimpleTypeFixedArray(&enableFocusMaps, 1, localParams);
        localParams.NameHash = 0xe0ebc08da6a3ac4b;
        entry->ReadEnumFixedArray(&FocusMapInterrupt, 1, localParams);
        localParams.NameHash = 0xca9b30a575135d44;
        entry->ReadSimpleTypeFixedArray<float>(LFMCorrectionRange, LFMCorrectionRangeFixedCount,
            localParams);
        localParams.NameHash        = 0xceb0ebff9d1532bb;
        PDHWOutputControl.Load(localParams);
        localParams.NameHash        = 0x9d2acfcfeb90a549;
        darkFaceOptimization.Load(localParams);
        localParams.NameHash        = 0x9165a6a0083c3217;
        mlpdControlProcess.Load(localParams);
        localParams.NameHash        = 0xa3acb9562e2709bd;
        PDHWFallbackControl.Load(localParams);
        localParams.NameHash = 0xc99912cc5145a4aa;
        entry->ReadStructureArray(extensionParam, extensionParamCount, extensionParamID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibType::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        chromatixPDLibType* arrayPtr = (chromatixPDLibType*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibType::AllocArray(
    UINT32 __count)
{
    chromatixPDLibType* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW chromatixPDLibType[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::module_versionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(major_revision);
    PARAMETER_INITIALIZE(minor_revision);
    PARAMETER_INITIALIZE(incr_revision);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xcd66249477636693;
        entry->ReadSimpleTypeFixedArray(&major_revision, 1, localParams);
        localParams.NameHash = 0xc5497493137a9c25;
        entry->ReadSimpleTypeFixedArray(&minor_revision, 1, localParams);
        localParams.NameHash = 0xb27b8a668efb2a56;
        entry->ReadSimpleTypeFixedArray(&incr_revision, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibType::module_versionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        module_versionStruct* arrayPtr = (module_versionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibType::module_versionStruct::AllocArray(
    UINT32 __count)
{
    module_versionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW module_versionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::parameter_versionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(revision);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xd594eed07a5650c5;
        entry->ReadStringFixedArray(&revision, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void chromatixPDLibType::parameter_versionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        parameter_versionStruct* arrayPtr = (parameter_versionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* chromatixPDLibType::parameter_versionStruct::AllocArray(
    UINT32 __count)
{
    parameter_versionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW parameter_versionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDHWFallbackControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDHWFallbackControl::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, controlArr);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDAFHardwareResamplerInstruction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwareResamplerInstruction::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, S);
    ParameterFileSymbolTable::ReleaseObject(__table, O);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDAFHardwareResampler
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwareResampler::Unload(ParameterFileSymbolTable* const __table)
{
    for (UINT32 i = 0; instructions != nullptr && i < instructionsCount; i++)
    {
        instructions[i].Unload(__table);
    }
    ParameterFileSymbolTable::ReleaseObject(__table, instructions);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDAFHardwarePixelSeparator
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDAFHardwarePixelSeparator::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, L_map);
    ParameterFileSymbolTable::ReleaseObject(__table, R_map);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixTuningHardwarePattern
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTuningHardwarePattern::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, lineExtractor);
    pixelSeparator.Unload(__table);
    resampler.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload HDRProcessingTypeGrid
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGrid::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, entries);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload HDRProcessingTypeGlobal
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGlobal::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, entries);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDLibHDRControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::Unload(ParameterFileSymbolTable* const __table)
{
    bias.Unload(__table);
    statsTypeGlobal.Unload(__table);
    statsTypeGrid.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDLibHDRControl_biasStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::biasStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, entries);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDLibHDRControl_statsTypeGlobalStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::statsTypeGlobalStruct::Unload(ParameterFileSymbolTable* const __table)
{
    for (UINT32 i = 0; StatsControlArr != nullptr && i < StatsControlArrCount; i++)
    {
        StatsControlArr[i].Unload(__table);
    }
    ParameterFileSymbolTable::ReleaseObject(__table, StatsControlArr);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDLibHDRControl_statsTypeGridStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibHDRControl::statsTypeGridStruct::Unload(ParameterFileSymbolTable* const __table)
{
    for (UINT32 i = 0; StatsControlArr != nullptr && i < StatsControlArrCount; i++)
    {
        StatsControlArr[i].Unload(__table);
    }
    ParameterFileSymbolTable::ReleaseObject(__table, StatsControlArr);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixHVControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixHVControl::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, horizontalConfWeightTuning);
    ParameterFileSymbolTable::ReleaseObject(__table, verticalConfWeightTuning);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixPDLibType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::Unload(ParameterFileSymbolTable* const __table)
{
    parameter_version.Unload(__table);
    HVControl.Unload(__table);
    HDRControl.Unload(__table);
    for (UINT32 i = 0; hardwarePattern != nullptr && i < hardwarePatternCount; i++)
    {
        hardwarePattern[i].Unload(__table);
    }
    ParameterFileSymbolTable::ReleaseObject(__table, hardwarePattern);
    PDHWFallbackControl.Unload(__table);
    for (UINT32 i = 0; extensionParam != nullptr && i < extensionParamCount; i++)
    {
        extensionParam[i].Unload(__table);
    }
    ParameterFileSymbolTable::ReleaseObject(__table, extensionParam);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::parameter_versionStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, revision);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Release the ParameterModule object
/// Requires that this object was created via a ParameterSetManager::GetModule call
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibType::Release()
{
    ((chromatixPDLibTypeClass*)this)->Release();
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Returns the ParameterModule::Modified value
/// The Modified value is incremented when the module's data or pointer values change
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT32 chromatixPDLibType::GetModified()
{
    return ((chromatixPDLibTypeClass*)this)->Modified;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetModuleName: Returns ParameterModule::Name variable
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixPDLibType::GetModuleName()
{
    return ((chromatixPDLibTypeClass*)this)->Name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetModuleName: Returns ParameterModule::NameHash variable
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT64 chromatixPDLibType::GetModuleNameHash()
{
    return ((chromatixPDLibTypeClass*)this)->NameHash;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Create module, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixPDLibTypeClass::Create(
    ModuleData* const    moduleData,
    DefaultModule* const defModule) const
{
    chromatixPDLibTypeClass* cls = nullptr;

    if (IsModuleMatch(moduleData) && Version.Value == moduleData->Version.Value)
    {
        const UINT32 id = moduleData->DuplicateID > 0 ? moduleData->DuplicateID : moduleData->ID;

        ParameterModule* const module = defModule->Find(id);
        if (module != nullptr)
        {
            cls = (chromatixPDLibTypeClass*)module;
        }
        else
        {
            cls = PARAMETER_NEW chromatixPDLibTypeClass(Name, moduleData);
            cls->SymbolTableID = id;
            defModule->AddModule((ParameterModule*)cls);
        }
    }
    else if (Version.Value != moduleData->Version.Value)
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create chromatixPDLibTypeClass, binary version (%lld) does not match source version (%lld)\n",
            moduleData->Version.Value, Version.Value);
    }
    else
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create chromatixPDLibTypeClass, binary name hash (0x%016llx) does not match source name hash (0x%016llx)\n",
            moduleData->NameHash, NameHash);
    }

    return (ParameterModule*)cls;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module data, return true is successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixPDLibTypeClass::LoadModule(
    ParameterFileSymbolTable* const table)
{
    bool result = true;

#ifdef PARAMETER_USE_MUTEX
    ParameterMutexLocker lock(Mutex); // Unique LOCK
#endif

    if (!Loaded)
    {
        chromatixPDLibTypeClass* const cls = this;

        ParameterFileSymbolTableEntry  entryObj;
        ParameterFileSymbolTableEntry* const entry = &entryObj;
        // With EzTune enabled, the unused upper byte of SymbolTableID value can change, so clear it
        result = table->Find(entryObj, SymbolTableID & 0x00ffffffU);

        if (!result)
        {
            PARAMETER_LOG_ERROR(entry->Table->SetManager, "chromatixPDLibTypeClass::LoadModule Failed to find module ID (%d) in Symbol Table\n", SymbolTableID);
        }


        ParameterDefinitionElement* _element = nullptr;
        if (table->ModuleDefinitions != nullptr && !table->ModuleDefinitions->empty())
        {
            _element = table->BuildModuleElement(NameHash);
        }

        ParameterLoadParameters parentParams(entry, NameHash, true, true, _element, entry->Position, 0, ParameterFileSymbolTableEntry::LOAD_LIMIT_MAX);
        cls->Load(parentParams);
        PARAMETER_DELETE _element;
        Modified++;
        Loaded = true;
    }

    if (!result)
    {
        /// Module failed to fully load, unload it
        UnloadModule();
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload module data
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibTypeClass::UnloadModule()
{
#ifdef PARAMETER_USE_MUTEX
    ParameterMutexLocker lock(Mutex); // Unique LOCK
#endif

    if (Loaded)
    {
        if (Data != nullptr && Data->SymbolTable != nullptr)
        {
            Unload(Data->SymbolTable);
        }
        else
        {
            PARAMETER_LOG_ERROR(Data != nullptr ? Data->SetManager : nullptr, "UnloadModule %s called with nullptr "
                "Data->SymbolTable object\n", Name);
            Unload(nullptr);
        }
        Loaded = false;
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// /// Release the ParameterModule object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixPDLibTypeClass::Release()
{
    ParameterModule::Release();
}

AFPDLIBELEMENTS_NAMESPACE_END
