#ifndef _LIVOX_GEN1_PCLOUD_STIMULUS_PRODUCER_H #define _LIVOX_GEN1_PCLOUD_STIMULUS_PRODUCER_H #include #include #include #include #include #include #include #include #include "ioUringAssemblyEngine.h" #include "openClCollatingAndMeshingEngine.h" #include "meshStimulusBuffer.h" #include "pcloudIntensityStimulusBuffer.h" #include "pcloudAmbienceStimulusBuffer.h" namespace smo { namespace stim_buff { /** * PcloudStimulusProducer is a specialized StimulusProducer for point cloud data. * * This class extends StimulusProducer to handle point cloud-specific stimulus * frames, particularly those generated from LiDAR point cloud data. It * provides additional functionality for managing point cloud frame metadata * and processing. */ class PcloudStimulusProducer : public StimulusProducer { public: class PcloudFormatDesc { public: enum class Format { XYZ, XYZI, }; public: Format format; }; public: explicit PcloudStimulusProducer( const std::shared_ptr &deviceAttachmentSpec, std::shared_ptr &device, const PcloudFormatDesc& formatDesc, size_t nDgramsPerStagingBufferFrame); ~PcloudStimulusProducer() = default; // Non-copyable, movable PcloudStimulusProducer(const PcloudStimulusProducer&) = delete; PcloudStimulusProducer& operator=(const PcloudStimulusProducer&) = delete; PcloudStimulusProducer(PcloudStimulusProducer&&) = default; PcloudStimulusProducer& operator=(PcloudStimulusProducer&&) = default; // Control methods void start() override; void stop() override; std::shared_ptr getOrCreateAttachedStimulusBuffer( const std::shared_ptr &deviceAttachmentSpec) override; std::shared_ptr getAttachedStimulusBuffer( const std::shared_ptr& spec) const override; protected: void stimFrameProductionTimesliceInd() override; // Callback function type for produceFrameReq typedef std::function produceFrameReqCbFn; public: void produceFrameReq(smo::Callback callback); size_t nDgramsPerStagingBufferFrame; std::shared_ptr device; PcloudFormatDesc formatDesc; OpenClCollatingAndMeshingEngine openClCollatingAndMeshingEngine; StagingBuffer assemblyBuffer; IoUringAssemblyEngine ioUringAssemblyEngine; StagingBuffer collationBuffer; StimulusFrame tempStimulusFrame; std::shared_ptr meshStimulusBuffer; std::shared_ptr intensityStimulusBuffer; std::shared_ptr ambienceStimulusBuffer; private: class ProduceFrameReq; }; } // namespace stim_buff } // namespace smo #endif // _LIVOX_GEN1_PCLOUD_STIMULUS_PRODUCER_H