diff --git a/commonLibs/attachmentSupport/stimulusProducer.cpp b/commonLibs/attachmentSupport/stimulusProducer.cpp index cf18607..95b2a11 100644 --- a/commonLibs/attachmentSupport/stimulusProducer.cpp +++ b/commonLibs/attachmentSupport/stimulusProducer.cpp @@ -52,6 +52,28 @@ bool StimulusProducer::hasBufferWithQualeIfaceApi( return false; } +bool StimulusProducer::addAttachedStimulusBufferIfNotExists( + const std::shared_ptr& buffer) +{ + if (!buffer) { return false; } + + auto it = std::find_if( + attachedStimulusBuffers.begin(), + attachedStimulusBuffers.end(), + [&](const std::shared_ptr& buf) { + return buf && buffer && + buf->deviceAttachmentSpec && buffer->deviceAttachmentSpec && + *(buf->deviceAttachmentSpec) == *(buffer->deviceAttachmentSpec); + }); + + if (it != attachedStimulusBuffers.end()) { + return false; + } + + attachedStimulusBuffers.push_back(buffer); + return true; +} + void StimulusProducer::destroyAttachedStimulusBuffer( const std::shared_ptr& buffer) { diff --git a/include/user/stimulusProducer.h b/include/user/stimulusProducer.h index e104710..2513182 100644 --- a/include/user/stimulusProducer.h +++ b/include/user/stimulusProducer.h @@ -76,6 +76,9 @@ public: const std::shared_ptr &deviceAttachmentSpec) = 0; + bool addAttachedStimulusBufferIfNotExists( + const std::shared_ptr& buffer); + virtual void destroyAttachedStimulusBuffer( const std::shared_ptr& buffer); diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index 34c3100..1b9e4ed 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -265,8 +265,8 @@ std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl; this->stop(); + addAttachedStimulusBufferIfNotExists(meshBuffer); meshStimulusBuffer = meshBuffer; - attachedStimulusBuffers.push_back(meshBuffer); this->start(); return meshBuffer; } @@ -288,8 +288,8 @@ std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << s std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl; this->stop(); + addAttachedStimulusBufferIfNotExists(intensityBuffer); intensityStimulusBuffer = intensityBuffer; - attachedStimulusBuffers.push_back(intensityBuffer); this->start(); return intensityBuffer; } @@ -321,8 +321,8 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl; this->stop(); + addAttachedStimulusBufferIfNotExists(ambienceBuffer); ambienceStimulusBuffer = ambienceBuffer; - attachedStimulusBuffers.push_back(ambienceBuffer); this->start(); return ambienceBuffer; }