You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
387 lines
12 KiB
387 lines
12 KiB
2 months ago
|
/* License: Apache 2.0. See LICENSE file in root directory.
|
||
|
Copyright(c) 2017 Intel Corporation. All Rights Reserved. */
|
||
|
|
||
|
#ifndef R4XX_ADVANCED_MODE_HPP
|
||
|
#define R4XX_ADVANCED_MODE_HPP
|
||
|
|
||
|
#include <cmath>
|
||
|
#include "rs.hpp"
|
||
|
#include "rs_advanced_mode.h"
|
||
|
#include "hpp/rs_serializable_device.hpp"
|
||
|
|
||
|
namespace rs400
|
||
|
{
|
||
|
class advanced_mode : public rs2::serializable_device
|
||
|
{
|
||
|
public:
|
||
|
advanced_mode(rs2::device d)
|
||
|
: rs2::serializable_device(d)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
if(_dev && rs2_is_device_extendable_to(_dev.get(), RS2_EXTENSION_ADVANCED_MODE, &e) == 0 && !e)
|
||
|
{
|
||
|
_dev = nullptr;
|
||
|
}
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
void toggle_advanced_mode(bool enable)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_toggle_advanced_mode(_dev.get(), enable, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
bool is_enabled() const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
int enabled=0;
|
||
|
rs2_is_enabled(_dev.get(), &enabled, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return !!enabled;
|
||
|
}
|
||
|
|
||
|
void set_depth_control(const STDepthControlGroup& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_depth_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STDepthControlGroup get_depth_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STDepthControlGroup group{};
|
||
|
rs2_get_depth_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_rsm(const STRsm& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_rsm(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STRsm get_rsm(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STRsm group{};
|
||
|
rs2_get_rsm(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_rau_support_vector_control(const STRauSupportVectorControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_rau_support_vector_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STRauSupportVectorControl get_rau_support_vector_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STRauSupportVectorControl group{};
|
||
|
rs2_get_rau_support_vector_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_color_control(const STColorControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_color_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STColorControl get_color_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STColorControl group{};
|
||
|
rs2_get_color_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_rau_thresholds_control(const STRauColorThresholdsControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_rau_thresholds_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STRauColorThresholdsControl get_rau_thresholds_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STRauColorThresholdsControl group{};
|
||
|
rs2_get_rau_thresholds_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_slo_color_thresholds_control(const STSloColorThresholdsControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_slo_color_thresholds_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STSloColorThresholdsControl get_slo_color_thresholds_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STSloColorThresholdsControl group{};
|
||
|
rs2_get_slo_color_thresholds_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_slo_penalty_control(const STSloPenaltyControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_slo_penalty_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STSloPenaltyControl get_slo_penalty_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STSloPenaltyControl group{};
|
||
|
rs2_get_slo_penalty_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_hdad(const STHdad& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_hdad(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STHdad get_hdad(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STHdad group{};
|
||
|
rs2_get_hdad(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_color_correction(const STColorCorrection& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_color_correction(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STColorCorrection get_color_correction(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STColorCorrection group{};
|
||
|
rs2_get_color_correction(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_depth_table(const STDepthTableControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_depth_table(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STDepthTableControl get_depth_table(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STDepthTableControl group{};
|
||
|
rs2_get_depth_table(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_ae_control(const STAEControl& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_ae_control(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STAEControl get_ae_control(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STAEControl group{};
|
||
|
rs2_get_ae_control(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_census(const STCensusRadius& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_census(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STCensusRadius get_census(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STCensusRadius group{};
|
||
|
rs2_get_census(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
|
||
|
void set_amp_factor(const STAFactor& group)
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
rs2_set_amp_factor(_dev.get(), &group, &e);
|
||
|
rs2::error::handle(e);
|
||
|
}
|
||
|
|
||
|
STAFactor get_amp_factor(int mode = 0) const
|
||
|
{
|
||
|
rs2_error* e = nullptr;
|
||
|
STAFactor group{};
|
||
|
rs2_get_amp_factor(_dev.get(), &group, mode, &e);
|
||
|
rs2::error::handle(e);
|
||
|
|
||
|
return group;
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
inline std::ostream & operator << (std::ostream & o, rs2_rs400_visual_preset preset) { return o << rs2_rs400_visual_preset_to_string(preset); }
|
||
|
|
||
|
inline bool operator==(const STDepthControlGroup& a, const STDepthControlGroup& b)
|
||
|
{
|
||
|
return (a.plusIncrement == b.plusIncrement &&
|
||
|
a.minusDecrement == b.minusDecrement &&
|
||
|
a.deepSeaMedianThreshold == b.deepSeaMedianThreshold &&
|
||
|
a.scoreThreshA == b.scoreThreshA &&
|
||
|
a.scoreThreshB == b.scoreThreshB &&
|
||
|
a.textureDifferenceThreshold == b.textureDifferenceThreshold &&
|
||
|
a.textureCountThreshold == b.textureCountThreshold &&
|
||
|
a.deepSeaSecondPeakThreshold == b.deepSeaSecondPeakThreshold &&
|
||
|
a.deepSeaNeighborThreshold == b.deepSeaNeighborThreshold &&
|
||
|
a.lrAgreeThreshold == b.lrAgreeThreshold);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STRsm& a, const STRsm& b)
|
||
|
{
|
||
|
return (a.rsmBypass == b.rsmBypass &&
|
||
|
a.diffThresh == b.diffThresh &&
|
||
|
a.sloRauDiffThresh == b.sloRauDiffThresh &&
|
||
|
a.removeThresh == b.removeThresh);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STRauSupportVectorControl& a, const STRauSupportVectorControl& b)
|
||
|
{
|
||
|
return (a.minWest == b.minWest &&
|
||
|
a.minEast == b.minEast &&
|
||
|
a.minWEsum == b.minWEsum &&
|
||
|
a.minNorth == b.minNorth &&
|
||
|
a.minSouth == b.minSouth &&
|
||
|
a.minNSsum == b.minNSsum &&
|
||
|
a.uShrink == b.uShrink &&
|
||
|
a.vShrink == b.vShrink);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STColorControl& a, const STColorControl& b)
|
||
|
{
|
||
|
return (a.disableSADColor == b.disableSADColor &&
|
||
|
a.disableRAUColor == b.disableRAUColor &&
|
||
|
a.disableSLORightColor == b.disableSLORightColor &&
|
||
|
a.disableSLOLeftColor == b.disableSLOLeftColor &&
|
||
|
a.disableSADNormalize == b.disableSADNormalize);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STRauColorThresholdsControl& a, const STRauColorThresholdsControl& b)
|
||
|
{
|
||
|
return (a.rauDiffThresholdRed == b.rauDiffThresholdRed &&
|
||
|
a.rauDiffThresholdGreen == b.rauDiffThresholdGreen &&
|
||
|
a.rauDiffThresholdBlue == b.rauDiffThresholdBlue);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STSloColorThresholdsControl& a, const STSloColorThresholdsControl& b)
|
||
|
{
|
||
|
return (a.diffThresholdRed == b.diffThresholdRed &&
|
||
|
a.diffThresholdGreen == b.diffThresholdGreen &&
|
||
|
a.diffThresholdBlue == b.diffThresholdBlue);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STSloPenaltyControl& a, const STSloPenaltyControl& b)
|
||
|
{
|
||
|
return (a.sloK1Penalty == b.sloK1Penalty &&
|
||
|
a.sloK2Penalty == b.sloK2Penalty &&
|
||
|
a.sloK1PenaltyMod1 == b.sloK1PenaltyMod1 &&
|
||
|
a.sloK2PenaltyMod1 == b.sloK2PenaltyMod1 &&
|
||
|
a.sloK1PenaltyMod2 == b.sloK1PenaltyMod2 &&
|
||
|
a.sloK2PenaltyMod2 == b.sloK2PenaltyMod2);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STHdad& a, const STHdad& b)
|
||
|
{
|
||
|
return (a.lambdaCensus == b.lambdaCensus &&
|
||
|
a.lambdaAD == b.lambdaAD &&
|
||
|
a.ignoreSAD == b.ignoreSAD);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STColorCorrection& a, const STColorCorrection& b)
|
||
|
{
|
||
|
return (a.colorCorrection1 == b.colorCorrection1 &&
|
||
|
a.colorCorrection2 == b.colorCorrection2 &&
|
||
|
a.colorCorrection3 == b.colorCorrection3 &&
|
||
|
a.colorCorrection4 == b.colorCorrection4 &&
|
||
|
a.colorCorrection5 == b.colorCorrection5 &&
|
||
|
a.colorCorrection6 == b.colorCorrection6 &&
|
||
|
a.colorCorrection7 == b.colorCorrection7 &&
|
||
|
a.colorCorrection8 == b.colorCorrection8 &&
|
||
|
a.colorCorrection9 == b.colorCorrection9 &&
|
||
|
a.colorCorrection10 == b.colorCorrection10 &&
|
||
|
a.colorCorrection11 == b.colorCorrection11 &&
|
||
|
a.colorCorrection12 == b.colorCorrection12);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STAEControl& a, const STAEControl& b)
|
||
|
{
|
||
|
return (a.meanIntensitySetPoint == b.meanIntensitySetPoint);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STDepthTableControl& a, const STDepthTableControl& b)
|
||
|
{
|
||
|
return (a.depthUnits == b.depthUnits &&
|
||
|
a.depthClampMin == b.depthClampMin &&
|
||
|
a.depthClampMax == b.depthClampMax &&
|
||
|
a.disparityMode == b.disparityMode &&
|
||
|
a.disparityShift == b.disparityShift);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STCensusRadius& a, const STCensusRadius& b)
|
||
|
{
|
||
|
return (a.uDiameter == b.uDiameter &&
|
||
|
a.vDiameter == b.vDiameter);
|
||
|
}
|
||
|
|
||
|
inline bool operator==(const STAFactor& a, const STAFactor& b)
|
||
|
{
|
||
|
return (fabs(a.amplitude - b.amplitude) < std::numeric_limits<float>::epsilon());
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif // R4XX_ADVANCED_MODE_HPP
|