From 6ccd97263588735c737d8a00f58139992632863c Mon Sep 17 00:00:00 2001 From: Eloi BAIL <eloi.bail@savoirfairelinux.com> Date: Wed, 23 Sep 2015 12:45:34 -0400 Subject: [PATCH] directrenderer: remove shared ptr remove sharedptr for direct rendering. Instead provide a buffer to the daemon in which it will write the frame and thus unsure that it will not be destroyed by the daemon while being used Issue: #80643 Change-Id: Id92768fd098ea93d9fcca8c5570a192633eba432 --- src/private/directrenderer.cpp | 5 +++-- src/private/directrenderer.h | 7 +++---- src/private/videorenderer_p.h | 2 -- src/private/videorenderermanager.cpp | 10 ++++++---- src/qtwrapper/videomanager_wrap.h | 12 ++++++++---- src/video/renderer.cpp | 15 --------------- src/video/renderer.h | 3 --- 7 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/private/directrenderer.cpp b/src/private/directrenderer.cpp index 85b092d5..128657eb 100644 --- a/src/private/directrenderer.cpp +++ b/src/private/directrenderer.cpp @@ -72,7 +72,8 @@ void Video::DirectRenderer::stopRendering () emit stopped(); } -void Video::DirectRenderer::onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) + +void Video::DirectRenderer::onNewFrame(int w, int h) { if (!isRendering()) { return; @@ -80,7 +81,7 @@ void Video::DirectRenderer::onNewFrame(const std::shared_ptr<std::vector<unsigne Video::Renderer::d_ptr->m_pSize.setWidth(w); Video::Renderer::d_ptr->m_pSize.setHeight(h); - Video::Renderer::d_ptr->m_pSFrame = frame; + Video::Renderer::d_ptr->m_pFrame = reinterpret_cast<char*>(frameBuffer_.data()); emit frameUpdated(); } diff --git a/src/private/directrenderer.h b/src/private/directrenderer.h index 85ae6406..7eff8976 100644 --- a/src/private/directrenderer.h +++ b/src/private/directrenderer.h @@ -17,8 +17,6 @@ ***************************************************************************/ #pragma once -#include <memory> - //Base #include <QtCore/QObject> #include "typedefs.h" @@ -52,7 +50,9 @@ public: //Getter virtual ColorSpace colorSpace() const override; - void onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h); + void onNewFrame(int w, int h); + + std::vector<unsigned char> frameBuffer_; public Q_SLOTS: virtual void startRendering() override; @@ -61,7 +61,6 @@ public Q_SLOTS: private: QScopedPointer<DirectRendererPrivate> d_ptr; Q_DECLARE_PRIVATE(DirectRenderer) - }; } diff --git a/src/private/videorenderer_p.h b/src/private/videorenderer_p.h index 546b7533..1e5d4592 100644 --- a/src/private/videorenderer_p.h +++ b/src/private/videorenderer_p.h @@ -17,7 +17,6 @@ ***************************************************************************/ #pragma once -#include <memory> //Qt #include <QtCore/QObject> @@ -43,7 +42,6 @@ public: QString m_Id ; QSize m_pSize ; char* m_pFrame ; - std::shared_ptr<std::vector<unsigned char> > m_pSFrame; QByteArray m_Content ; unsigned int m_FrameSize ; diff --git a/src/private/videorenderermanager.cpp b/src/private/videorenderermanager.cpp index 1af06735..f379fec6 100644 --- a/src/private/videorenderermanager.cpp +++ b/src/private/videorenderermanager.cpp @@ -213,9 +213,10 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri m_hRenderers[rid] = r; m_hRendererIds[r]=rid; - DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) { + DBus::VideoManager::instance().registerSinkTarget(id, static_cast<Video::DirectRenderer*>(r)->frameBuffer_, + [this, id, width, height] (int w, int h) { static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame( - frame, w, h + w, h ); }); @@ -243,9 +244,10 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri r->setSize(res); #ifdef ENABLE_LIBWRAP - DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) { + DBus::VideoManager::instance().registerSinkTarget(id, static_cast<Video::DirectRenderer*>(r)->frameBuffer_, + [this, id, width, height] (int w, int h) { static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame( - frame, w, h + w, h ); }); diff --git a/src/qtwrapper/videomanager_wrap.h b/src/qtwrapper/videomanager_wrap.h index 336acb02..68072c99 100644 --- a/src/qtwrapper/videomanager_wrap.h +++ b/src/qtwrapper/videomanager_wrap.h @@ -195,17 +195,21 @@ public Q_SLOTS: // METHODS #endif } - void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>&& cb) + void registerSinkTarget(const QString &sinkID, + std::vector<unsigned char>& frameBuffer, + std::function<void(int, int)>&& cb) { #ifdef ENABLE_VIDEO - DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb)); + DRing::registerSinkTarget(sinkID.toStdString(), frameBuffer, std::move(cb)); #endif } - void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>& cb) + void registerSinkTarget(const QString &sinkID, + std::vector<unsigned char>& frameBuffer, + std::function<void(int, int)>& cb) { #ifdef ENABLE_VIDEO - DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb)); + DRing::registerSinkTarget(sinkID.toStdString(), frameBuffer, std::move(cb)); #endif } diff --git a/src/video/renderer.cpp b/src/video/renderer.cpp index 98e5ccb3..e67668e1 100644 --- a/src/video/renderer.cpp +++ b/src/video/renderer.cpp @@ -73,21 +73,6 @@ const QByteArray& Video::Renderer::currentFrame() const return d_ptr->m_Content; } -const std::shared_ptr<std::vector<unsigned char> >& Video::Renderer::currentSmartFrame() const -{ - return d_ptr->m_pSFrame; -} - -bool Video::Renderer::isFrameSmart() const -{ -#ifdef ENABLE_LIBWRAP - return true; -#else - return false; -#endif -} - - /***************************************************************************** * * * Setters * diff --git a/src/video/renderer.h b/src/video/renderer.h index 18d37984..ff9691f7 100644 --- a/src/video/renderer.h +++ b/src/video/renderer.h @@ -17,7 +17,6 @@ ***************************************************************************/ #pragma once -#include <memory> //Base #include <QtCore/QObject> @@ -76,8 +75,6 @@ public: //Getters virtual bool isRendering () const; virtual const QByteArray& currentFrame () const; - virtual const std::shared_ptr<std::vector<unsigned char> >& currentSmartFrame() const; - virtual bool isFrameSmart() const; virtual QSize size () const; virtual QMutex* mutex () const; virtual ColorSpace colorSpace () const = 0; -- GitLab