API 详解 (C++)

GetVersionString 获取VCameraSDK版本

// 代码开头需要引用头文件
#include "sdk/version.h"
// 打印VCameraSDK版本
std::cout << "GetVersionString:" << GetVersionString() << std::endl;

CameraUtils类

CameraUtils 是 SDK 提供的一个静态工具类,专门用于相机设备的发现、网络配置、SDK和相机日志配置。

Init初始化相机

初始化相机通信底层库。

CameraUtils::Init(true);

DiscoverCameras发现相机设备

扫描当前可用的相机设备,返回 CameraInfo 列表(包含MAC地址、当前IP等信息)。

CameraUtils::Init();
auto devicelist = CameraUtils::DiscoverCameras();
for (auto& device : devicelist) {
    std::cout << "======Device Information======" << std::endl;
    std::cout << "   " << "serial_number : " << device.serial_number << std::endl;
    std::cout << "   " << "status : " << (int)device.state << std::endl;
    std::cout << "   " << "model : " << device.model << std::endl;
    std::cout << "   " << "vendor : " << device.vendor << std::endl;
    std::cout << "   " << "name : " << device.name << std::endl;
    std::cout << "   " << "firmware_version : " << device.firmware_version << std::endl;
    std::cout << "   " << "network_info.mac : " << device.network_info.mac << std::endl;
    std::cout << "   " << "network_info.ip : " << device.network_info.ip << std::endl;
    std::cout << "   " << "network_info.netmask : " << device.network_info.netmask << std::endl;
    std::cout << "   " << "network_info.gateway : " << device.network_info.gateway << std::endl;
    std::cout << "   " << "network_info.broadcast : " << device.network_info.broadcast << std::endl;
    std::cout << "Interface Information" << std::endl;
    std::cout << "   " << "interface_info.id : " << device.interface_info.id << std::endl;
    std::cout << "   " << "interface_type : " << (int)device.interface_info.interface_type << std::endl;
    std::cout << "   " << "interface_info.name : " << device.interface_info.name << std::endl;
    std::cout << "   " << "interface_info.network_info.broadcast : " << device.interface_info.network_info.broadcast << std::endl;
    std::cout << "   " << "interface_info.network_info.gateway : " << device.interface_info.network_info.gateway << std::endl;
    std::cout << "   " << "interface_info.network_info.ip : " << device.interface_info.network_info.ip << std::endl;
    std::cout << "   " << "interface_info.network_info.mac : " << device.interface_info.network_info.mac << std::endl;
    std::cout << "   " << "interface_info.network_info.netmask : " << device.interface_info.network_info.netmask << std::endl;
    std::cout << "   " << "usb_info.address : " << device.usb_info.address << std::endl;
    std::cout << "   " << "usb_info.bus : " << device.usb_info.bus << std::endl;
 }

SetIpAddress设置静态IP

该接口用于设置相机的静态ip。该接口有2种使用方法。

第一种,传入相机的mac地址,以及需要设置的ip、netmast、gateway。

CameraUtils::Init();
auto devicelist = CameraUtils::DiscoverCameras();
    CameraApiStatus ret = CameraUtils::SetIpAddress("06:20:FD:B6:D4:95","192.168.6.85","255.255.255.0","192.168.6.1");
    if (ret.IsSuccess()) {
        printf("Set camera static ip success!\n");
    }
    else {
        printf("Set camera static ip failed : %s\n", ret.message().c_str());
    }

第二种,传入相机的CamInfo,以及需要设置的ip、netmast、gateway。

CameraUtils::Init();
auto devicelist = CameraUtils::DiscoverCameras();
for (auto& device : devicelist) {
    if (device.network_info.mac == "06:20:FD:B6:D4:95" && device.interface_info.id == "eth-88-a4-c2-b1-35-e37f06a8c0") {
        CameraApiStatus ret = CameraUtils::SetIpAddress(device, "192.168.6.88", "255.255.255.0", "192.168.6.1");
        if (ret.IsSuccess()) {
            printf("Set camera static ip success!\n");
        }
        else {
            printf("Set camera static ip failed : %s\n", ret.message().c_str());
        }
    }
 }

SetIpToDynamic设置动态IP

该接口用于设置相机的动态ip。该接口有2种使用方法。

第一种,传入相机的mac地址。

CameraUtils::Init();
auto devicelist = CameraUtils::DiscoverCameras();
    CameraApiStatus ret = CameraUtils:: SetIpToDynamic ("06:20:FD:B6:D4:95");
    if (ret.IsSuccess()) {
        printf("Set camera Dynamic ip success!\n");
    }
    else {
        printf("Set camera Dynamic ip failed : %s\n", ret.message().c_str());
}

第二种,传入相机的CamInfo。

CameraUtils::Init();
    auto devicelist = CameraUtils::DiscoverCameras();
    for (auto& device : devicelist) {
        if (device.network_info.mac == "06:20:FD:B6:D4:95" && device.interface_info.id == "eth-88-a4-c2-b1-35-e37f06a8c0") {
            CameraApiStatus ret = CameraUtils::SetIpToDynamic(device);
            if (ret.IsSuccess()) {
                printf("Set camera static ip success!\n");
            }
            else {
                printf("Set camera static ip failed : %s\n", ret.message().c_str());
            }
        }
}

CameraFactory类

CameraFactory 是 Percepio SDK 中的工厂类,专用于实例化并连接不同配置的相机设备。提供三种静态工厂方法,支持通过序列号、IP地址或预配置信息创建相机实例。

GetCameraBySerialNumber通过序列号获取相机

该接口用于通过相机序列号来创建相机实例。

Camera camera = CameraFactory::GetCameraBySerialNumber("207000159118");

GetCameraByIpAddress通过IP获取相机

该接口用于通过相机ip地址来创建相机实例。

Camera camera = CameraFactory::GetCameraByIpAddress("192.168.6.58");

GetCameraByCameraInfo通过相机信息获取相机

该接口用于通过相机的信息来创建相机实例。

Camera camera;
auto devicelist = CameraUtils::DiscoverCameras();
for (auto& list : devicelist) {
    if(list.serial_number == "207000162237")
        camera = CameraFactory::GetCameraByCameraInfo(list);
}

Camera类

核心设备控制与图像采集接口。

注解

Camera 对象使用流程:

创建 Camera 对象 → Connect() → 其他操作 → Disconnect()

GetCameraInfo获取相机信息

用于获取相机设备的信息。

CameraInfo information;
CameraApiStatus ret = camera.GetCameraInfo(information);
if (ret.IsSuccess()) {
    printf("\033[91mGetCameraInfo success\033[0m\n");
    std::cout << "Device Information" << std::endl;
    std::cout << "   " << "serial_number : " << information.serial_number << std::endl;
    std::cout << "   " << "status : " << (int)information.state << std::endl;
    std::cout << "   " << "model : " << information.model << std::endl;
    std::cout << "   " << "vendor : " << information.vendor << std::endl;
    std::cout << "   " << "name : " << information.name << std::endl;
    std::cout << "   " << "firmware_version : " << information.firmware_version << std::endl;
    std::cout << "   " << "network_info.mac : " << information.network_info.mac << std::endl;
    std::cout << "   " << "network_info.ip : " << information.network_info.ip << std::endl;
    std::cout << "   " << "network_info.netmask : " << information.network_info.netmask << std::endl;
    std::cout << "   " << "network_info.gateway : " << information.network_info.gateway << std::endl;
    std::cout << "   " << "network_info.broadcast : " << information.network_info.broadcast << std::endl;
    std::cout << "Interface Information" << std::endl;
    std::cout << "   " << "interface_info.id : " << information.interface_info.id << std::endl;
    std::cout << "   " << "interface_type : " << (int)information.interface_info.interface_type << std::endl;
    std::cout << "   " << "interface_info.name : " << information.interface_info.name << std::endl;
    std::cout << "   " << "interface_info.network_info.broadcast : " << information.interface_info.network_info.broadcast << std::endl;
    std::cout << "   " << "interface_info.network_info.gateway : " << information.interface_info.network_info.gateway << std::endl;
    std::cout << "   " << "interface_info.network_info.ip : " << information.interface_info.network_info.ip << std::endl;
    std::cout << "   " << "interface_info.network_info.mac : " << information.interface_info.network_info.mac << std::endl;
    std::cout << "   " << "interface_info.network_info.netmask : " << information.interface_info.network_info.netmask << std::endl;
    std::cout << "   " << "usb_info.address : " << information.usb_info.address << std::endl;
    std::cout << "   " << "usb_info.bus : " << information.usb_info.bus << std::endl;
}

Connect连接设备

用于连接设备。

camera.Connect();

Disconnect断连设备

用于断连设备。

camera.Disconnect();

GetCameraState获取相机状态

用于获取相机状态。

CameraState camerastate;
CameraApiStatus ret = camera.GetCameraState(camerastate);
if (ret.IsSuccess()) {
    printf("\033[96mCameraState %d\033[0m\n", camerastate);
}
else {
    printf("\033[91mGetCameraState failed :%s\033[0m\n", ret.message().c_str());
}

相机有以下几种状态:0 对应 NotFound,6 对应 Error。

enum class CAMERA_API_EXPORT CameraState : int32_t {
NotFound,
Occupied,
Opened,
Closed,
Capturing,
Offlined,
Error,
};

StartCapture开始采集图像

用于控制相机开始采集图像。

camera.StartCapture();

StopCapture停止采集图像

用于控制相机停止采集图像。

camera.StopCapture();

GetFeature获取待设置的参数

用于获取待设置的参数。

重要

SDK 支持设置的属性列表见 {SDK 安装路径}\Percipio_SDK\doc\feature_list.txt

Feature feature;
CameraApiStatus ret = camera.GetFeature("AcquisitionMode", feature);
if (!ret.IsSuccess()) {
    printf("\033[91mGetFeature failed :%s\033[0m\n", ret.message().c_str());
}

GetAllFeatures获取所有参数

用于获取所有参数。

std::vector<percipio::Feature> features;
status = camera.GetAllFeatures(features);

FireSoftwareTrigger发送软触发采图信号

用于为工作在软触发模式下的相机发送软触发采图信号。

CameraApiStatus status = camera.FireSoftwareTrigger();
std::cout << "FireSoftwareTrigger status= " << status.message() << std::endl;

GetImageModes获取图像格式和分辨率

用于获取指定传感器支持设置的图像格式和分辨率。

std::vector<ImageMode> image_mode;
CameraApiStatus ret = camera.GetImageModes(SensorType::Depth, image_mode);

if (!ret.IsSuccess()) {
    printf("\033[91mGetImageModes failed :%s\033[0m\n", ret.message().c_str());
}
else {
    for (auto& mode : image_mode) {
        printf("ImageModePixelFormat : %d , ImageModeWidth :%d ,ImageModeHeight :%d\n ", mode.pixel_format , mode.width, mode.height);
    }
}

GetCurrentImageMode获取当前的图像格式和分辨率

用于获取指定传感器当前的图像格式和分辨率。

ImageMode image_mode;
camera.GetCurrentImageMode(SensorType::Depth, image_mode);
printf("CurrentImageModePixelFormat : %d , ImageModeWidth :%d ,ImageModeHeight :%d\n ", image_mode.pixel_format , image_mode.width, image_mode.height);

SetImageMode设置图像格式和分辨率

用于设置指定传感器的图像格式和分辨率。

ImageMode image_mode;
image_mode.pixel_format = RawPixelFormat::Coord3D_C16;
image_mode.width = 320;
image_mode.height = 240;
CameraApiStatus ret = camera.SetImageMode(SensorType::Depth, image_mode);
printf("\033[91mSetImageMode1 :%s\033[0m\n", ret.message().c_str());

HasSensor查询相机是否具有指定传感器

用于判断相机是否拥有指定的传感器。

bool has_sensor;
CameraApiStatus ret = camera.HasSensor(SensorType::Right, has_sensor);
if (!ret.IsSuccess()) {
    printf("\033[91mHasSensor Call  failed :%s\033[0m\n", ret.message().c_str());
}
else {
    printf("HasSensor : %s\n", has_sensor ? "true" : "false");
}

IsSensorEnabled获取传感器使能状态

用于判断相机指定的传感器是否被使能。

bool is_enable;
ret = camera.IsSensorEnabled(SensorType::Color, is_enable);
if (!ret.IsSuccess()) {
    printf("\033[91mIsSensorEnabledCallfailed:%s\033[0m\n", ret.message().c_str());
}
else {
    printf("IsSensorEnabled:%s\n", is_enable ? "true" : "false");
}

SetSensorEnabled设置传感器使能状态

用于使能或去使能指定的传感器输出图像。

CameraApiStatus ret = camera.SetSensorEnabled(SensorType::Left, true);
if (!ret.IsSuccess()) {
    printf("\033[91mSetSensorEnabled Call  failed :%s\033[0m\n", ret.message().c_str());
}

SetUndistortionEnabled启用或禁用畸变矫正

用于对指定的传感器图像进行畸变校正或去畸变校正。

CameraApiStatus ret = camera.SetUndistortionEnabled(SensorType::Left, true);
printf("\033[91mSetUndistortionEnabled:%s\033[0m\n", ret.message().c_str());

IsMapDepthToColorEnabled获取深度对齐彩色使能状态

用于查询深度图到彩色图映射(深度与彩色对齐)是否启用。

bool isEnabled = false;
status = camera.IsMapDepthToColorEnabled(isEnabled);
if (!status.IsSuccess()) {
    std::cout << "Failed to check depth-to-color mapping status: " << status.message() << std::endl;
    return -1;
}
std::cout << "Current depth-to-color mapping status: " << (isEnabled ? "Enabled" : "Disabled") << std::endl;

SetMapDepthToColorEnabled启用或禁用深度对齐彩色

启用或禁用深度图到彩色图的映射(深度图与彩色图对齐)。

status = camera.SetMapDepthToColorEnabled(true);
if (!status.IsSuccess()) {
  std::cout << "enable MapDepthToColor err " << status.message() << std::endl;
  return -1;
}

具体使用方法请参见示例程序 Percipio_SDK/API/cpp/example/DepthToColorRegistration.cpp

RegisterFrameSetCallback图像回调函数

图像回调函数。

camera.RegisterFrameSetCallback([](const FrameSet& frameset){
    cout << "FrameSetCallback" << endl;
    Image image = frameset.GetImage(SensorType::Depth);
    if(image.IsValid()){
        cout << "Image: width:" << image.width() << " " << "height:" << image.height() << endl;
        cout << "Image: frame index:" << image.frame_index() << endl;
        cout << "Image: timestamp:" << image.time_stamp() << endl;
        cout << "Image: sensor:" << image.sensor() << endl;
        cout << "Image: sensor type:" <<(int)image.pixel_format() << endl;
        cout << "Image: scale_unit:" << image.scale_unit() << endl;
        cout << "Image: distortion:";for(float f : image.calib_info().distortion.data) cout << f << " "; cout << endl;
        cout << "Image: intrinsic:";for(float f : image.calib_info().intrinsic.data) cout << f << " "; cout << endl;
        cout << "Image: extrinsic:";for(float f : image.calib_info().extrinsic.data) cout << f << " "; cout << endl;
    }
});

RegisterCameraEventCallback相机事件回调函数

相机事件回调函数。

camera.RegisterCameraEventCallback(
    [](CameraEventCode event_code, int error_code) {
        switch (event_code) {
        case CameraEventCode::Offlined:
            printf("\033[93mWaiting for reconnecting ... ...\033[0m\n");
            break;
        case CameraEventCode::Started:
            printf("\033[93mCamera Started ... ...\033[0m\n");
            break;
        case CameraEventCode::Opened:
            printf("\033[93mCamera Opened ... ...\033[0m\n");
            break;
        case CameraEventCode::Stopped:
            printf("\033[93mCamera Stopped ... ...\033[0m\n");
            break;
        case CameraEventCode::Closed:
            printf("\033[93mCamera Closed ... ...\033[0m\n");
            break;
        case CameraEventCode::Error:
            printf("\033[93mCamera Error ... ...\033[0m\n");
            break;
        }
    }
);

UserSetManager类

GetAllUserSets获取所有用户设置

用于获取相机的所有用户设置(UserSet)。

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
for (auto usersets : usersetall) {
    std::cout << usersets.sid << "   " << usersets.name << std::endl;
}

其中,

  • sid:唯一编号,不可更改,内容为 Default0-7,UserSet0-7。

  • name: 名称

SaveToUserSet保存到用户设置

用于保存用户设置(UserSet),该接口有2种使用方式。

第一种:使用 UserSet 名称保存

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
ret = usersetmanager.SaveToUserSet("123");
    if (ret.IsSuccess()) {
        printf("\033[92mSaveToUserSet success\033[0m\n");
    }

第二种:使用 UserSet 对象保存

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
if (ret.IsSuccess()) {
    for (auto usersets : usersetall) {
        std::cout << usersets.name << "   " << usersets.sid << std::endl;
        if (usersets.name == "789") {
            ret = usersetmanager.SaveToUserSet(usersets);
            if(ret.IsSuccess()){
                printf("\033[92mSaveToUserSet %s(sid: %s) success\033[0m\n", usersets.name.c_str(), usersets.sid.c_str());
            }
        }
    }
 }

SaveToUserSetWithNewName重命名用户设置并保存

该接口用于重命名用户设置(UserSet)并执行保存动作。传入的第一个参数为旧名称,第二个参数为新名称。

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
ret = usersetmanager.SaveToUserSetWithNewName("123","Peace");
if (ret.IsSuccess()) {
    printf("\033[92mSaveToUserSetWithNewName success\033[0m\n");
}
else {
    printf("\033[91mSaveToUserSetWithNewName failed : %s\033[0m\n", ret.message().c_str());
}

LoadUserSet加载用户设置

该接口用于加载所需的用户设置(UserSet),调用时传入需要加载的 UserSet 名称即可,代码如下:

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
ret = usersetmanager.LoadUserSet("standard_ObstacleAvoidance");
if (ret.IsSuccess()) {
  printf("\033[92mLoadUserSet success\033[0m\n");
 }
 else {
     printf("\033[91mLoadUserSet failed : %s\033[0m\n", ret.message().c_str());
 }

CurrentUserSet读取当前用户设置

该接口用于读取当前使用的用户设置(UserSet)名称。

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
std::string CurrentUserSetName;
ret = usersetmanager.CurrentUserSet(CurrentUserSetName);
if (ret.IsSuccess()) {
    printf("\033[95mCurrentUserSet : %s\033[0m\n", CurrentUserSetName.c_str());
}

GetPowerOnUserSet读取相机上电时的用户设置

该接口用于读取相机上电时的默认用户设置(UserSet)的名称。

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
std::string PowerOnUserSetName;
ret = usersetmanager.GetPowerOnUserSet(PowerOnUserSetName);
if (ret.IsSuccess()) {
    printf("\033[95mPowerOnUserSet : %s\033[0m\n", PowerOnUserSetName.c_str());
}

SetPowerOnUserSet设置相机上电时的用户设置

该接口用于设置相机上电时的用户设置(UserSet)。调用时传入UserSet的名称即可。

vector<UserSet> usersetall;
UserSetManager& usersetmanager = camera.GetUserSetManager();
CameraApiStatus ret = usersetmanager.GetAllUserSets(usersetall);
ret = usersetmanager.SetPowerOnUserSet("HelloWorld");
if (ret.IsSuccess()) {
    printf("\033[92mSetPowerOnUserSet success\033[0m\n");
}
else {
    printf("\033[91mSetPowerOnUserSet failed : %s\033[0m\n",ret.message().c_str());
}

CameraApiStatusCode(API状态码)

Success,
Failure,
ArrayInfoInvalid,
ArrayInvalid,
CalibrationInfoInvalid,
CameraInvalid,
ComponentInvalid,
DeviceInvalid,
DeviceError,
DeviceIdle,
DeviceBusy,
DeviceLost,
DeviceInterfaceInvalid,
DeviceInterfaceTypeError,
DeviceInfoInvalid,
FeatureInvalid,
FeatureInfoInvalid,
FeatureTypeError,
FrameInvalid,
FrameMetadataInvalid,
FrameBufferInvalid,
FrameBufferConsumerInvalid,
FrameSetInvalid,
FrameSetStreamInvalid,
FrameSetConsumerInvalid,
TriggerModeError,
NotExist,
NotImplemented,
NotPermitted,
NotSupported,
OutOfMemory,
OutOfIndexRange,
OutOfValueRange,
ParameterInvalid,
StructureInfoInvalid,
StructureInvalid,
Timeout,
ValueInvalid,
ValueTypeError,
ValueInfoInvalid,
NullCameraHandle,
UserSetIsFull,

设置/读取相机属性

IsValid检查属性是否有效

判断该相机是否支持该属性。

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthRangeMax", feature);
bool isValid = ret.IsSuccess();
if isValid {
    printf("\033[92m Feature is valid and available\033[0m\n");
}
else {
    printf("\033[91m Error: %s (code: %d)\033[0m\n", ret.message().c_str(), (int)ret.code());
}

GetName获取属性名称

Feature feature;
CameraApiStatus ret = camera.GetFeature("LightController0/LightBrightness", feature);
cout << feature.GetName() << endl;

GetAccessMode读取相机属性权限

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthRangeMax", feature);
AccessMode access_mode;
ret = feature.GetAccessMode(access_mode);
if (ret.IsSuccess()) {
    printf("\033[92mDepthRangeMax AccessMode :%d\033[0m\n", access_mode);
 }

VCameraSDK中,属性的权限共有如下四种:

  • 0:表示该相机不支持此属性或当前状态不支持此属性(如开启AEC后,曝光时间不支持)。

  • 1:表示该相机此属性为只读。

  • 2:表示该相机此属性为只写。

  • 3:表示该相机此属性为可读可写。

GetType获取相机属性类型

Feature feature;
camera.GetFeature("Depth/PixelFormat", feature);
FeatureType type = feature.GetType();
printf("\033[91mFeatureType is %d  \033[0m\n", type);

VCameraSDK中,属性的类型共有如下八种:

enum class CAMERA_API_EXPORT FeatureType : int32_t {
        Undefined,
        Bool,
        Int64,
        Float64,
        Enumeration,
        String,
        ByteArray,
        Dictionary,
};

Int64类

读取参数值

Feature feature;
Value value;
CameraApiStatus ret = camera.GetFeature("DeviceStreamChannelSelector", feature);
ret = feature.GetValue(value);
if (ret.IsSuccess()) {
  printf("\033[92mGetValue success : %lld\033[0m\n", (int64_t)value);

判断参数类型

Feature feature;
Value value;
CameraApiStatus ret = camera.GetFeature("DeviceStreamChannelSelector", feature);
feature.GetValue(value);
if (value.IsInt64()) {
    printf("\033[92mValueType is true\033[0m\n");
}
else {
    printf("\033[91mValueType is wrong. ValueType:%d\033[0m\n", value.GetType());
}

读取参数范围

Feature feature;
CameraApiStatus ret = camera.GetFeature("LightController0/LightBrightness", feature);
Int64Range range;
ret = feature.GetRange(range);
if (ret.IsSuccess()) {
    printf("\033[92mGetRange success : [%lld ,%lld], step : %lld\033[0m\n", range.minValue, range.maxValue, range.step);
                }

设置参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("LightController0/LightBrightness", feature);
ret = feature.SetValue(Value((int64_t)10));
if (ret.IsSuccess()) {
    printf("\033[92mSetValue success\033[0m\n");
}
else {
    printf("\033[91mSetValue call failed : %s\033[0m\n", ret.message().c_str());
}

完整示例

Feature feature;
AccessMode access_mode;
Int64Range range;
Value value;
CameraApiStatus ret = camera.GetFeature("LightController0/LightBrightness", feature);
ret = feature.GetAccessMode(access_mode);
printf("\033[95mDepthRangeMax AccessMode:%d\033[0m\n", access_mode);
ret = feature.GetValue(value);
printf("\033[95mValueType:%d\033[0m\n",value.GetType());
ret = feature.GetRange(range);
printf("\033[95mCurretnValue : %lld , Range : [%lld ,%lld] , Step : %lld\033[0m\n", (int64_t)value, range.minValue, range.maxValue, range.step);
ret = feature.SetValue(Value((int64_t)80));
//ret = feature.SetValue(Value(range.minValue));
//ret = feature.SetValue(Value(range.maxValue));

Bool类

读取参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("Texture/ExposureAuto", feature);
Value value;
ret = feature.GetValue(value);
if (ret.IsSuccess()) {
printf("\033[92mGetValue success : %s\033[0m\n", value?"true":"false");
}

判断参数类型

Feature feature;
CameraApiStatus ret = camera.GetFeature("Texture/ExposureAuto", feature);
Value value;
feature.GetValue(value);
if (value.IsBool()) {
        printf("\033[92mValueType is Bool\033[0m\n");
    }
    else {
        printf("\033[91mValueType is not Bool\033[0m\n");
}

设置参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("Texture/ExposureAuto", feature);
Value value;
    ret = feature.SetValue(Value(false));
    if (ret.IsSuccess()) {
        printf("\033[92mSetValue success\033[0m\n");
    }
    else {
        printf("\033[91mSetValue call failed : %s\033[0m\n", ret.message().c_str());
}

完整示例

Feature feature;
AccessMode access_mode;
Value value;
CameraApiStatus ret = camera.GetFeature("Texture/ExposureAuto", feature);
ret = feature.GetAccessMode(access_mode);
printf("\033[95mTexture/ExposureAuto AccessMode:%d\033[0m\n", access_mode);
ret = feature.GetValue(value);
printf("\033[95mValueType:%d\033[0m\n", value.GetType());
printf("\033[95mCurretnValue : %s\033[0m\n", value?"true":"false");
ret = feature.SetValue(Value(true));

Float64类

读取参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthScaleUnit", feature);
Value value;
ret = feature.GetValue(value);
if (ret.IsSuccess()) {
    printf("\033[92mGetValue success : %f\033[0m\n", (double)value);
}

判断参数类型

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthScaleUnit", feature);
Value value;
feature.GetValue(value);
if (value.IsDouble()) {
    printf("\033[92mValueType is float\033[0m\n");
}
else {
    printf("\033[91mValueType is not float\033[0m\n");
}

读取参数范围

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthScaleUnit", feature);
Float64Range range;
ret = feature.GetRange(range);
if (ret.IsSuccess()) {
    printf("\033[92mGetRange success : [%f , %f]\033[0m\n", range.minValue, range.maxValue);
}

设置参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("DepthScaleUnit", feature);
Value value;
ret = feature.SetValue(Value((double)(0.25)));
if (ret.IsSuccess()) {
    printf("\033[92mSetValue success\033[0m\n");
}
else {
    printf("\033[91mSetValue call failed : %s\033[0m\n", ret.message().c_str());
}

完整示例

Feature feature;
AccessMode access_mode;
Float64Range range;
Value value;
CameraApiStatus ret = camera.GetFeature("DepthScaleUnit", feature);
ret = feature.GetAccessMode(access_mode);
printf("\033[95mDepthScaleUnit AccessMode:%d\033[0m\n", access_mode);
ret = feature.GetValue(value);
printf("\033[95mValueType:%d\033[0m\n", value.GetType());
ret = feature.GetRange(range);
printf("\033[95mCurretnValue : %f , Range : [%f ,%f] , Step : %f\033[0m\n", (double)value, range.minValue, range.maxValue, range.step);
ret = feature.SetValue(Value((double)0.25));
//ret = feature.SetValue(Value(range.minValue));
//ret = feature.SetValue(Value(range.minValue));

Enumeration类

读取参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("Texture/BinningHorizontal", feature);
Value value;
ret = feature.GetValue(value);
if (ret.IsSuccess()) {
    printf("\033[92mGetValue success : %d\033[0m\n", (int32_t)value);
}

判断参数类型

Feature feature;
CameraApiStatus ret = camera.GetFeature("DeviceTimeSyncMode", feature);
Value value;
feature.GetValue(value);
if (value.IsInt32()) {
    printf("\033[92mValueType is Enum\033[0m\n");
}
else {
    printf("\033[91mValueType is not Enum\033[0m\n");
}

读取列表

Feature feature;
CameraApiStatus ret = camera.GetFeature("DeviceTimeSyncMode", feature);
std::vector<EnumItem> enum_list;
ret = feature.GetEnumItems(enum_list);
if (ret.IsSuccess()) {
    printf("\033[92mGetEnumItems success\033[0m\n");
    for (auto& list : enum_list) {
        printf("Name : %s ,Value :%d\n", list.name.c_str(), list.value);
    }
}

设置参数值

Feature feature;
CameraApiStatus ret = camera.GetFeature("DeviceTimeSyncMode", feature);
std::vector<EnumItem> enum_list;
feature.GetEnumItems(enum_list);
ret = feature.SetValue(Value(enum_list[1].value));
if (ret.IsSuccess()) {
    printf("\033[92mSetValue success\033[0m\n");
}
else {
    printf("\033[91mSetValue Call  failed :%s\033[0m\n", ret.message().c_str());
}

完整示例

Feature feature;
AccessMode access_mode;
Value value;
CameraApiStatus ret = camera.GetFeature("DeviceTimeSyncMode", feature);
ret = feature.GetAccessMode(access_mode);
printf("\033[95mDeviceTimeSyncMode AccessMode:%d\033[0m\n", access_mode);
ret = feature.GetValue(value);
printf("\033[95mValueType:%d\033[0m\n", value.GetType());
printf("\033[95mCurretnValue : %d\033[0m\n", (int32_t)value);
std::vector<EnumItem> enum_list;
ret = feature.GetEnumItems(enum_list);
if (ret.IsSuccess()) {
    printf("\033[92mGetEnumItems success\033[0m\n");
    for (auto& list : enum_list) {
        printf("Name : %s ,Value :%d\n", list.name.c_str(), list.value);
        //Set
        ret = feature.SetValue(Value(list.value));
        if (ret.IsSuccess()) {
            printf("\033[92mSetValue success\033[0m\n");
        }
        else {
            printf("\033[91mSetValue Call  failed :%s\033[0m\n", ret.message().c_str());
        }
    }
}