#ifndef _LG1_PCLOUD_AMBIENCE_STENCIL_H #define _LG1_PCLOUD_AMBIENCE_STENCIL_H #include "livoxGen1.h" #include #include #include namespace smo { namespace stim_buff { /** * LG1PcloudAmbienceStencil represents Livox Gen1-specific stencils for * ambience data. The StagingBuffer is sized to handle the worst-case scenario * where every ambience body spot requires its own descriptor * (nDgramsPerFrame slots). */ class LG1PcloudAmbienceStencil : public PcloudAmbienceStencil { public: // Common IOEngineConstraints for stencil buffer (used for both input and output) static const StagingBuffer::IOEngineConstraints stencilBufferConstraints; /** * Constructor * @param nDgramsPerFrame Number of datagrams per frame, used to size the * stencil buffer for worst-case scenario (one descriptor per dgram) */ explicit LG1PcloudAmbienceStencil(size_t nDgramsPerFrame) : PcloudAmbienceStencil(), stencilBuffer( stencilBufferConstraints, // Input constraints stencilBufferConstraints, // Output constraints (same as input) nDgramsPerFrame), nRangeDescriptors(0) {} ~LG1PcloudAmbienceStencil() = default; // Implement pure virtual functions from Stencil bool hasData() const override { return nRangeDescriptors > 0; } size_t getRelevantCount() const override { // TODO: Implement based on range descriptors return 0; } bool isRelevant(size_t offset) const override { // TODO: Implement based on range descriptors (void)offset; return false; } size_t getNRangeDescriptors() const override { return nRangeDescriptors; } bool buildStencilMetadata() override { // TODO: Implement stencil metadata building return true; } public: StagingBuffer stencilBuffer; size_t nRangeDescriptors; }; } // namespace stim_buff } // namespace smo #endif // _LG1_PCLOUD_AMBIENCE_STENCIL_H