diff --git a/src/libclient/avmodel.cpp b/src/libclient/avmodel.cpp index 7939563df4f95c0132ee2112f2efecacfcb709dc..50a6b330f58ab1153f75179a79560a354ff4d901 100644 --- a/src/libclient/avmodel.cpp +++ b/src/libclient/avmodel.cpp @@ -942,15 +942,12 @@ createRenderer(const QString& id, const QSize& res, const QString& shmPath = {}) void AVModelPimpl::addRenderer(const QString& id, const QSize& res, const QString& shmPath) { - // First remove the existing renderer. - renderers_.erase(id); + { + std::lock_guard<std::mutex> lk(renderers_mtx_); + renderers_[id] = createRenderer(id, res, shmPath); + } - // Create a new one and add it. - auto renderer = createRenderer(id, res, shmPath); - std::lock_guard<std::mutex> lk(renderers_mtx_); auto& r = renderers_[id]; - r = std::move(renderer); - renderers_mtx_.unlock(); // Listen and forward id-bound signals upwards. connect( @@ -965,12 +962,14 @@ AVModelPimpl::addRenderer(const QString& id, const QSize& res, const QString& sh this, [this, id](const QSize& size) { Q_EMIT linked_.rendererStarted(id, size); }, Qt::DirectConnection); +#ifdef ENABLE_LIBWRAP connect( r.get(), &Renderer::frameBufferRequested, this, [this, id](AVFrame* frame) { Q_EMIT linked_.frameBufferRequested(id, frame); }, Qt::DirectConnection); +#endif connect( r.get(), &Renderer::frameUpdated,