livoxGen1: Add StimBuffs to PcloudStimProd

* PcloudStimulusProducer now has member sh_ptr<StimulusBuffer>s.
* StimulusProducer now has a vector<sh_ptr<StimulusBuffer>s.

Created new stimbuff-type-specific
Pcloud[Xyz|I|Ambience]StimulusBuffer classes for representing each
stim feature exposed by livoxGen1's PcloudStimulusProducer.
This commit is contained in:
2025-11-14 23:19:32 -04:00
parent 8a7dc10892
commit 98a493a8a1
7 changed files with 159 additions and 2 deletions
@@ -0,0 +1,41 @@
#ifndef _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H
#define _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H
#include <memory>
#include <user/stimulusBuffer.h>
namespace smo {
namespace stim_buff {
// Forward declaration
class StimulusProducer;
/**
* PcloudAmbienceStimulusBuffer is a specialized StimulusBuffer for ambience point cloud data.
*/
class PcloudAmbienceStimulusBuffer
: public StimulusBuffer
{
public:
explicit PcloudAmbienceStimulusBuffer(
std::shared_ptr<StimulusProducer>& producer,
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
int histbuffMs,
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
: StimulusBuffer(
producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
{}
~PcloudAmbienceStimulusBuffer() = default;
// Non-copyable, movable
PcloudAmbienceStimulusBuffer(const PcloudAmbienceStimulusBuffer&) = delete;
PcloudAmbienceStimulusBuffer& operator=(const PcloudAmbienceStimulusBuffer&) = delete;
PcloudAmbienceStimulusBuffer(PcloudAmbienceStimulusBuffer&&) = default;
PcloudAmbienceStimulusBuffer& operator=(PcloudAmbienceStimulusBuffer&&) = default;
};
} // namespace stim_buff
} // namespace smo
#endif // _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H
+7 -1
View File
@@ -11,6 +11,9 @@
#include "stagingBuffer.h"
#include "ioUringAssemblyEngine.h"
#include "openClCollatingAndMeshingEngine.h"
#include "pcloudXyzStimulusBuffer.h"
#include "pcloudIStimulusBuffer.h"
#include "pcloudAmbienceStimulusBuffer.h"
namespace smo {
namespace stim_buff {
@@ -74,9 +77,12 @@ public:
StagingBuffer assemblyBuffer;
IoUringAssemblyEngine ioUringAssemblyEngine;
StagingBuffer collationBuffer;
std::atomic<size_t> nAttachedStimBuffs{0};
StimulusFrame tempStimulusFrame;
std::shared_ptr<PcloudXyzStimulusBuffer> xyzStimulusBuffer;
std::shared_ptr<PcloudIStimulusBuffer> iStimulusBuffer;
std::shared_ptr<PcloudAmbienceStimulusBuffer> ambienceStimulusBuffer;
private:
class ProduceFrameReq;
};
@@ -0,0 +1,41 @@
#ifndef _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H
#define _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H
#include <memory>
#include <user/stimulusBuffer.h>
namespace smo {
namespace stim_buff {
// Forward declaration
class StimulusProducer;
/**
* PcloudIStimulusBuffer is a specialized StimulusBuffer for intensity point cloud data.
*/
class PcloudIStimulusBuffer
: public StimulusBuffer
{
public:
explicit PcloudIStimulusBuffer(
std::shared_ptr<StimulusProducer>& producer,
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
int histbuffMs,
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
: StimulusBuffer(
producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
{}
~PcloudIStimulusBuffer() = default;
// Non-copyable, movable
PcloudIStimulusBuffer(const PcloudIStimulusBuffer&) = delete;
PcloudIStimulusBuffer& operator=(const PcloudIStimulusBuffer&) = delete;
PcloudIStimulusBuffer(PcloudIStimulusBuffer&&) = default;
PcloudIStimulusBuffer& operator=(PcloudIStimulusBuffer&&) = default;
};
} // namespace stim_buff
} // namespace smo
#endif // _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H
@@ -0,0 +1,41 @@
#ifndef _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H
#define _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H
#include <memory>
#include <user/stimulusBuffer.h>
namespace smo {
namespace stim_buff {
// Forward declaration
class StimulusProducer;
/**
* PcloudXyzStimulusBuffer is a specialized StimulusBuffer for XYZ point cloud data.
*/
class PcloudXyzStimulusBuffer
: public StimulusBuffer
{
public:
explicit PcloudXyzStimulusBuffer(
std::shared_ptr<StimulusProducer>& producer,
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
int histbuffMs,
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
: StimulusBuffer(
producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
{}
~PcloudXyzStimulusBuffer() = default;
// Non-copyable, movable
PcloudXyzStimulusBuffer(const PcloudXyzStimulusBuffer&) = delete;
PcloudXyzStimulusBuffer& operator=(const PcloudXyzStimulusBuffer&) = delete;
PcloudXyzStimulusBuffer(PcloudXyzStimulusBuffer&&) = default;
PcloudXyzStimulusBuffer& operator=(PcloudXyzStimulusBuffer&&) = default;
};
} // namespace stim_buff
} // namespace smo
#endif // _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H