From ca2a0dd8be9ff84feed947b9d89330c7db6eed3c Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Mon, 29 Jul 2019 12:11:43 -0400 Subject: [PATCH] preview: fix when using avframe Change-Id: I6f5dfc7858ce60274963053f35e217b3af0a709a --- src/directrenderer.cpp | 19 +++++++++++++++++++ src/directrenderer.h | 1 + src/newvideo.cpp | 3 +++ 3 files changed, 23 insertions(+) diff --git a/src/directrenderer.cpp b/src/directrenderer.cpp index 94351572..d51e989e 100644 --- a/src/directrenderer.cpp +++ b/src/directrenderer.cpp @@ -49,6 +49,7 @@ public: DRing::SinkTarget::FrameBufferPtr requestFrameBuffer(std::size_t bytes); void onNewFrame(DRing::SinkTarget::FrameBufferPtr buf); void onNewAVFrame(std::unique_ptr<DRing::VideoFrame> frame); + void configureTarget(bool useAVFrame); DRing::SinkTarget target; DRing::AVSinkTarget av_target; @@ -98,6 +99,10 @@ void Video::DirectRenderer::stopRendering () Video::Renderer::d_ptr->m_isRendering = false; emit stopped(); } +void Video::DirectRenderer::configureTarget(bool useAVFrame) +{ + d_ptr->configureTarget(useAVFrame); +} DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuffer(std::size_t bytes) { @@ -110,6 +115,20 @@ DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuff return std::move(daemonFramePtr_); } +void Video::DirectRendererPrivate::configureTarget(bool useAVFrame) +{ + using namespace std::placeholders; + if (useAVFrame) { + target.pull = nullptr; + target.push = nullptr; + av_target.push = std::bind(&Video::DirectRendererPrivate::onNewAVFrame, this, _1); + return; + } + target.pull = std::bind(&Video::DirectRendererPrivate::requestFrameBuffer, this, _1); + target.push = std::bind(&Video::DirectRendererPrivate::onNewFrame, this, _1); + av_target.push = nullptr; +} + void Video::DirectRendererPrivate::onNewFrame(DRing::SinkTarget::FrameBufferPtr buf) { if (not q_ptr->isRendering()) diff --git a/src/directrenderer.h b/src/directrenderer.h index ddddcada..e2514c67 100644 --- a/src/directrenderer.h +++ b/src/directrenderer.h @@ -52,6 +52,7 @@ public: virtual ColorSpace colorSpace() const override; virtual lrc::api::video::Frame currentFrame() const override; virtual std::unique_ptr<AVFrame, void(*)(AVFrame*)> currentAVFrame() const override; + void configureTarget(bool useAVFrame); public Q_SLOTS: virtual void startRendering() override; diff --git a/src/newvideo.cpp b/src/newvideo.cpp index 05869fe6..fd000b7a 100644 --- a/src/newvideo.cpp +++ b/src/newvideo.cpp @@ -138,6 +138,9 @@ Renderer::isRendering() const void Renderer::useAVFrame(bool useAVFrame) { pimpl_->usingAVFrame_ = useAVFrame; +#ifdef ENABLE_LIBWRAP + pimpl_->renderer->configureTarget(useAVFrame); +#endif; } std::string -- GitLab