diff --git a/src/avmodel.cpp b/src/avmodel.cpp index d0ffa4c9befdc06386940d87e3defd57898cc1cd..2f0dc34d055c44ad8a21050f612cc1f9d2c20e14 100644 --- a/src/avmodel.cpp +++ b/src/avmodel.cpp @@ -404,7 +404,16 @@ AVModel::stopPreview() qWarning() << "Can't find preview renderer!"; return; } - VideoManager::instance().stopCamera(); + // If an active call does not have video muted, don't stop the camera + // stopCamera() calls switchInput(""), which disables the camera + bool previewShouldBeStopped = true; + for (auto it = pimpl_->renderers_.cbegin(); it != pimpl_->renderers_.cend(); ++it) { + if (it->second->getId() != video::PREVIEW_RENDERER_ID) + // If rendering, don't stop preview + previewShouldBeStopped &= !it->second->isRendering(); + } + if (previewShouldBeStopped) + VideoManager::instance().stopCamera(); pimpl_->renderers_[video::PREVIEW_RENDERER_ID]->stopRendering(); } diff --git a/src/private/videorenderermanager.cpp b/src/private/videorenderermanager.cpp index 9859606b5e705300e27dd240a91e2b004a843b3d..0ea7aeefb36bc2639ea0d8fef5c811a0ee7bc211 100644 --- a/src/private/videorenderermanager.cpp +++ b/src/private/videorenderermanager.cpp @@ -95,7 +95,6 @@ VideoRendererManager::deactivate() disconnect( &interface , &VideoManagerInterface::stoppedDecoding, d_ptr.data(), &VideoRendererManagerPrivate::stoppedDecoding); } - VideoRendererManager::~VideoRendererManager() { // delete d_ptr; @@ -170,9 +169,18 @@ Video::Renderer* VideoRendererManager::previewRenderer() ///Stop video preview void VideoRendererManager::stopPreview() { - VideoManager::instance().stopCamera(); + // If an active call does not have video muted, don't stop the camera + // stopCamera() calls switchInput(""), which disables the camera + bool previewShouldBeStopped = true; + for (auto it = d_ptr->m_hRenderers.begin(); it != d_ptr->m_hRenderers.end(); ++it) { + if (it.key() != PREVIEW_RENDERER_ID) + // If rendering, don't stop preview + previewShouldBeStopped &= !it.value()->isRendering(); + } + if (previewShouldBeStopped) + VideoManager::instance().stopCamera(); - d_ptr->m_PreviewState = false; + d_ptr->m_PreviewState = false; } ///Start video preview @@ -229,7 +237,6 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri #endif - QThread* t = new QThread(this); m_hThreads[r] = t;