From 3bed65a5d09bad7f6cb6a88f8467981d54fe3348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Tue, 13 Nov 2018 09:21:58 -0500 Subject: [PATCH] avmodel: get renderers at startup Daemon 7.1.0 introduces getRenderer to allow the client to restart renderers if there is a call when starting the client. Change-Id: I7b1d685d9492780c5ffce5297c8c4214bfd27441 Reviewed-by: Philippe Gorley <philippe.gorley@savoirfairelinux.com> --- src/avmodel.cpp | 21 ++++++++++++++++++++- src/qtwrapper/videomanager_wrap.h | 5 +++++ test/mocks/videomanager_mock.h | 7 +++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/avmodel.cpp b/src/avmodel.cpp index 98c0bedd..100e267e 100644 --- a/src/avmodel.cpp +++ b/src/avmodel.cpp @@ -489,6 +489,26 @@ AVModelPimpl::init() this, &AVModelPimpl::slotCallStateChanged); connect(&*renderers_[video::PREVIEW_RENDERER_ID], &api::video::Renderer::frameUpdated, this, &AVModelPimpl::slotFrameUpdated); + + auto startedPreview = false; + auto restartRenderers = [&](const QStringList& callList) { + for (const auto& callId : callList) + { + MapStringString rendererInfos = VideoManager::instance(). + getRenderer(callId); + auto shmPath = rendererInfos[DRing::Media::Details::SHM_PATH].toStdString(); + auto width = rendererInfos[DRing::Media::Details::WIDTH].toInt(); + auto height = rendererInfos[DRing::Media::Details::HEIGHT].toInt(); + if (width > 0 && height > 0) { + startedPreview = true; + startedDecoding(callId.toStdString(), shmPath, width, height); + } + } + }; + restartRenderers(CallManager::instance().getCallList()); + restartRenderers(CallManager::instance().getConferenceList()); + if (startedPreview) + restartRenderers({"local"}); } std::string @@ -517,7 +537,6 @@ void AVModelPimpl::startedDecoding(const std::string& id, const std::string& shmPath, int width, int height) { const std::string res = std::to_string(width) + "x" + std::to_string(height); - qDebug() << "startedDecoding for sink id: " << id.c_str(); { std::lock_guard<std::mutex> lk(renderers_mtx_); auto search = renderers_.find(id); diff --git a/src/qtwrapper/videomanager_wrap.h b/src/qtwrapper/videomanager_wrap.h index 211e9da6..57f92f68 100644 --- a/src/qtwrapper/videomanager_wrap.h +++ b/src/qtwrapper/videomanager_wrap.h @@ -230,6 +230,11 @@ public Q_SLOTS: // METHODS return QString::fromStdString(DRing::startLocalRecorder(audioOnly, path.toStdString())); } + MapStringString getRenderer(const QString& id) + { + return convertMap(DRing::getRenderer(id.toStdString())); + } + Q_SIGNALS: // SIGNALS void deviceEvent(); void startedDecoding(const QString &id, const QString &shmPath, int width, int height, bool isMixer); diff --git a/test/mocks/videomanager_mock.h b/test/mocks/videomanager_mock.h index 530db103..558c0b61 100644 --- a/test/mocks/videomanager_mock.h +++ b/test/mocks/videomanager_mock.h @@ -190,6 +190,13 @@ public Q_SLOTS: // METHODS return "/tmp/foobar"; } + MapStringString getRenderer(const QString& id) + { + Q_UNUSED(id) + return {}; + } + + Q_SIGNALS: // SIGNALS void deviceEvent(); void startedDecoding(const QString &id, const QString &shmPath, int width, int height, bool isMixer); -- GitLab