diff --git a/commonLibs/attachmentSupport/stimulusProducer.cpp b/commonLibs/attachmentSupport/stimulusProducer.cpp index 530e0c7..cf18607 100644 --- a/commonLibs/attachmentSupport/stimulusProducer.cpp +++ b/commonLibs/attachmentSupport/stimulusProducer.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -51,6 +52,21 @@ bool StimulusProducer::hasBufferWithQualeIfaceApi( return false; } +void StimulusProducer::destroyAttachedStimulusBuffer( + const std::shared_ptr& buffer) +{ + if (!buffer) { return; } + + auto it = std::find( + attachedStimulusBuffers.begin(), + attachedStimulusBuffers.end(), + buffer); + + if (it != attachedStimulusBuffers.end()) { + attachedStimulusBuffers.erase(it); + } +} + void StimulusProducer::stop() { { diff --git a/include/user/stimulusProducer.h b/include/user/stimulusProducer.h index 7f7e57e..e104710 100644 --- a/include/user/stimulusProducer.h +++ b/include/user/stimulusProducer.h @@ -76,6 +76,9 @@ public: const std::shared_ptr &deviceAttachmentSpec) = 0; + virtual void destroyAttachedStimulusBuffer( + const std::shared_ptr& buffer); + // Check if any attached buffer has the specified qualeIfaceApi bool hasBufferWithQualeIfaceApi(const std::string& qualeIfaceApi) const; diff --git a/stimBuffApis/livoxGen1/livoxGen1.cpp b/stimBuffApis/livoxGen1/livoxGen1.cpp index 7e2d22d..e7b9062 100644 --- a/stimBuffApis/livoxGen1/livoxGen1.cpp +++ b/stimBuffApis/livoxGen1/livoxGen1.cpp @@ -463,22 +463,7 @@ public: auto& stimProducer = dynamic_cast( context->stimBuffer->parent); - auto it = std::find( - stimProducer.attachedStimulusBuffers.begin(), - stimProducer.attachedStimulusBuffers.end(), - context->stimBuffer); - if (it != stimProducer.attachedStimulusBuffers.end()) - { - stimProducer.attachedStimulusBuffers.erase(it); - } - - // Clear specialized buffer members if they match - if (stimProducer.meshStimulusBuffer == context->stimBuffer) - { stimProducer.meshStimulusBuffer.reset(); } - if (stimProducer.intensityStimulusBuffer == context->stimBuffer) - { stimProducer.intensityStimulusBuffer.reset(); } - if (stimProducer.ambienceStimulusBuffer == context->stimBuffer) - { stimProducer.ambienceStimulusBuffer.reset(); } + stimProducer.destroyAttachedStimulusBuffer(context->stimBuffer); // Check if StimProducer has other buffers if (!stimProducer.attachedStimulusBuffers.empty()) diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index 5517e49..85e1aac 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -205,6 +205,23 @@ PcloudStimulusProducer::getAttachedStimulusBuffer( return nullptr; } +void PcloudStimulusProducer::destroyAttachedStimulusBuffer( + const std::shared_ptr& buffer) +{ + if (!buffer) { return; } + + // Clear specialized buffer pointers if they match + if (meshStimulusBuffer == buffer) + { meshStimulusBuffer.reset(); } + if (intensityStimulusBuffer == buffer) + { intensityStimulusBuffer.reset(); } + if (ambienceStimulusBuffer == buffer) + { ambienceStimulusBuffer.reset(); } + + // Call base class implementation to remove from attachedStimulusBuffers + StimulusProducer::destroyAttachedStimulusBuffer(buffer); +} + std::shared_ptr PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer( const std::shared_ptr& deviceAttachmentSpec diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.h b/stimBuffApis/livoxGen1/pcloudStimulusProducer.h index f564953..3940210 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.h +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.h @@ -70,6 +70,9 @@ public: const std::shared_ptr& spec) const override; + void destroyAttachedStimulusBuffer( + const std::shared_ptr& buffer) override; + protected: void stimFrameProductionTimesliceInd() override;