#ifndef _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H #define _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H #include #include #include #include #include #include #include #include #include #include #include "lg1PcloudAmbienceStencil.h" namespace smo { namespace stim_buff { inline intrin::ParsedThresholdParam parsePostrinInterestParam( const std::shared_ptr& deviceAttachmentSpec) { return intrin::parseOptionalThresholdParam( deviceAttachmentSpec->qualeIfaceApiParams, intrin::kPosIntPcParamNames, intrin::kPosIntThrParamNames, 90, intrin::ThresholdUnit::Percentage); } // Forward declaration class StimulusProducer; /** * PcloudAmbienceStimulusBuffer is a specialized StimulusBuffer for ambience point cloud data. */ class PcloudAmbienceStimulusBuffer : public StimulusBuffer { public: explicit PcloudAmbienceStimulusBuffer( StimulusProducer& parent, const std::shared_ptr& deviceAttachmentSpec, int histbuffMs, const StagingBuffer::IOEngineConstraints& inputEngineConstraints, const StagingBuffer::IOEngineConstraints& outputEngineConstraints, const SmoCallbacks& callbacks, cl_mem_flags flags, size_t nStencils_, size_t nDgramsPerFrame_) : StimulusBuffer( parent, deviceAttachmentSpec, histbuffMs, inputEngineConstraints, outputEngineConstraints, callbacks, flags), nStencils(nStencils_) { intrin::validateNoForbiddenUnitlessIntrinParams( deviceAttachmentSpec->qualeIfaceApiParams); const auto postrinInterestParam = parsePostrinInterestParam(deviceAttachmentSpec); postrinInterestPercentage = postrinInterestParam.unit == intrin::ThresholdUnit::Percentage ? static_cast(postrinInterestParam.value) : 0U; postrinInterestThreshold = intrin::resolveThresholdValue( postrinInterestParam, nDgramsPerFrame_); // Parse ambienceIntensityLowVal from qualeIfaceApiParams const std::vector ambienceIntensityLowValParamNames = { "ambience-intensity-low-val" }; ambienceIntensityLowVal = static_cast( device::DeviceAttachmentSpec::parseOptionalParamAsIntWithSynonyms( deviceAttachmentSpec->qualeIfaceApiParams, ambienceIntensityLowValParamNames, 8)); // Construct stencils and add to list (FIFO behavior) for (size_t i = 0; i < nStencils; ++i) { stencils.emplace_back(); } } ~PcloudAmbienceStimulusBuffer() = default; // Non-copyable, non-movable: inherited pinner lifetime is instance-bound PcloudAmbienceStimulusBuffer(const PcloudAmbienceStimulusBuffer&) = delete; PcloudAmbienceStimulusBuffer& operator=(const PcloudAmbienceStimulusBuffer&) = delete; PcloudAmbienceStimulusBuffer(PcloudAmbienceStimulusBuffer&&) = delete; PcloudAmbienceStimulusBuffer& operator=(PcloudAmbienceStimulusBuffer&&) = delete; public: uint32_t postrinInterestPercentage; uint32_t postrinInterestThreshold; uint32_t ambienceIntensityLowVal; size_t nStencils; std::list stencils; }; } // namespace stim_buff } // namespace smo #endif // _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H