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());
}
}
}