Files
salmanoff/stimBuffApis/livoxGen1/pcloudAmbienceQualeIfaceApi.h
T

101 lines
2.4 KiB
C++
Raw Normal View History

#ifndef _LIVOX_GEN1_PCLOUD_AMBIENCE_QUALE_IFACE_API_H
#define _LIVOX_GEN1_PCLOUD_AMBIENCE_QUALE_IFACE_API_H
#include <cstdint>
#include <memory>
2026-04-04 00:44:48 -04:00
#include <optional>
#include <stdexcept>
2026-04-12 04:06:47 -04:00
#include <string>
#include <user/deviceAttachmentSpec.h>
2026-04-12 04:06:47 -04:00
#include <vector>
namespace smo {
namespace stim_buff {
2026-04-12 04:06:47 -04:00
inline std::string parseRequiredFromStimbuffQualeIfaceName(
const std::vector<std::pair<std::string, std::string>>& params)
{
for (auto it = params.rbegin(); it != params.rend(); ++it)
{
if (it->first != "from-stimbuff")
{ continue; }
if (it->second.empty())
{
throw std::runtime_error(
"'from-stimbuff' must name a non-empty sensory qualeIfaceApi");
}
return it->second;
}
throw std::runtime_error(
"internal: 'from-stimbuff' missing after intrin policy validation");
}
enum ParamComparatorOp
{
OP_CMP_GT,
OP_CMP_LT,
};
struct ParamComparator
{
ParamComparatorOp op;
uint32_t value;
2026-04-12 04:06:47 -04:00
bool operator()(float passbandMetricVal) const
{
switch (op)
{
case OP_CMP_GT:
2026-04-12 04:06:47 -04:00
return passbandMetricVal > static_cast<float>(value);
case OP_CMP_LT:
2026-04-12 04:06:47 -04:00
return passbandMetricVal < static_cast<float>(value);
}
throw std::runtime_error("Unsupported ParamComparatorOp");
}
};
2026-04-04 00:44:48 -04:00
inline std::optional<ParamComparator> parseOptionalPcloudAmbienceParamComparator(
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec)
{
const auto& params = deviceAttachmentSpec->qualeIfaceApiParams;
constexpr int kParamNotSpecified = -1;
const int gtVal = device::DeviceAttachmentSpec::parseOptionalParamAsInt(
2026-04-12 04:06:47 -04:00
params, "passband-count-gt-val", kParamNotSpecified);
const int ltVal = device::DeviceAttachmentSpec::parseOptionalParamAsInt(
2026-04-12 04:06:47 -04:00
params, "passband-count-lt-val", kParamNotSpecified);
if (gtVal != kParamNotSpecified && ltVal != kParamNotSpecified)
{
throw std::runtime_error(
2026-04-12 04:06:47 -04:00
"Only one of 'passband-count-gt-val' or 'passband-count-lt-val' "
"may be specified for a PcloudAmbience intrinsic pipeline");
}
if (gtVal != kParamNotSpecified)
{
2026-04-04 00:44:48 -04:00
return std::optional<ParamComparator>(ParamComparator{
.op = OP_CMP_GT,
.value = static_cast<uint32_t>(gtVal),
2026-04-04 00:44:48 -04:00
});
}
if (ltVal != kParamNotSpecified)
{
2026-04-04 00:44:48 -04:00
return std::optional<ParamComparator>(ParamComparator{
.op = OP_CMP_LT,
.value = static_cast<uint32_t>(ltVal),
2026-04-04 00:44:48 -04:00
});
}
2026-04-04 00:44:48 -04:00
return std::nullopt;
}
} // namespace stim_buff
} // namespace smo
#endif // _LIVOX_GEN1_PCLOUD_AMBIENCE_QUALE_IFACE_API_H