diff --git a/src/media/localrecorder.cpp b/src/media/localrecorder.cpp index 4a995e9c16e470e841babafd6d841fd85d2af259..67b54eb5fed6d3e0e0903299d52c0e3f3b3a9967 100644 --- a/src/media/localrecorder.cpp +++ b/src/media/localrecorder.cpp @@ -36,6 +36,12 @@ LocalRecorder::LocalRecorder(const bool& audioOnly) recorder_->audioOnly(audioOnly); } +LocalRecorder::~LocalRecorder() +{ + if (isRecording()) + stopRecording(); +} + void LocalRecorder::setPath(const std::string& path) { @@ -94,15 +100,14 @@ LocalRecorder::startRecording() void LocalRecorder::stopRecording() { - Recordable::stopRecording(); - Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID); if (auto ob = recorder_->getStream(audioInput_->getInfo().name)) audioInput_->detach(ob); if (videoInput_) if (auto ob = recorder_->getStream(videoInput_->getInfo().name)) videoInput_->detach(ob); - audioInput_.reset(); - videoInput_.reset(); + Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID); + // NOTE stopRecording should be last call to avoid data races + Recordable::stopRecording(); } } // namespace ring diff --git a/src/media/localrecorder.h b/src/media/localrecorder.h index 26a7864812643f77df3686c52cf19402301df419..1514a565ec4f3e96de884c3be98fa3b753c08306 100644 --- a/src/media/localrecorder.h +++ b/src/media/localrecorder.h @@ -40,13 +40,8 @@ namespace ring { class LocalRecorder : public Recordable { public: - /** - * Constructor of a LocalRecorder. - * Passed VideoInput pointer will be used for recording. - * If input pointer in null, video recording will be disabled on this - * recorder. - */ LocalRecorder(const bool& audioOnly); + ~LocalRecorder(); /** * Start local recording. Return true if recording was successfully @@ -54,6 +49,9 @@ class LocalRecorder : public Recordable { */ bool startRecording(); + /** + * Stops recording. + */ void stopRecording(); /**