Skip to content
Snippets Groups Projects
Commit ca2a0dd8 authored by Kateryna Kostiuk's avatar Kateryna Kostiuk Committed by Andreas Traczyk
Browse files

preview: fix when using avframe

Change-Id: I6f5dfc7858ce60274963053f35e217b3af0a709a
parent be1e8f75
Branches
No related tags found
No related merge requests found
...@@ -49,6 +49,7 @@ public: ...@@ -49,6 +49,7 @@ public:
DRing::SinkTarget::FrameBufferPtr requestFrameBuffer(std::size_t bytes); DRing::SinkTarget::FrameBufferPtr requestFrameBuffer(std::size_t bytes);
void onNewFrame(DRing::SinkTarget::FrameBufferPtr buf); void onNewFrame(DRing::SinkTarget::FrameBufferPtr buf);
void onNewAVFrame(std::unique_ptr<DRing::VideoFrame> frame); void onNewAVFrame(std::unique_ptr<DRing::VideoFrame> frame);
void configureTarget(bool useAVFrame);
DRing::SinkTarget target; DRing::SinkTarget target;
DRing::AVSinkTarget av_target; DRing::AVSinkTarget av_target;
...@@ -98,6 +99,10 @@ void Video::DirectRenderer::stopRendering () ...@@ -98,6 +99,10 @@ void Video::DirectRenderer::stopRendering ()
Video::Renderer::d_ptr->m_isRendering = false; Video::Renderer::d_ptr->m_isRendering = false;
emit stopped(); emit stopped();
} }
void Video::DirectRenderer::configureTarget(bool useAVFrame)
{
d_ptr->configureTarget(useAVFrame);
}
DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuffer(std::size_t bytes) DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuffer(std::size_t bytes)
{ {
...@@ -110,6 +115,20 @@ DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuff ...@@ -110,6 +115,20 @@ DRing::SinkTarget::FrameBufferPtr Video::DirectRendererPrivate::requestFrameBuff
return std::move(daemonFramePtr_); 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) void Video::DirectRendererPrivate::onNewFrame(DRing::SinkTarget::FrameBufferPtr buf)
{ {
if (not q_ptr->isRendering()) if (not q_ptr->isRendering())
......
...@@ -52,6 +52,7 @@ public: ...@@ -52,6 +52,7 @@ public:
virtual ColorSpace colorSpace() const override; virtual ColorSpace colorSpace() const override;
virtual lrc::api::video::Frame currentFrame() const override; virtual lrc::api::video::Frame currentFrame() const override;
virtual std::unique_ptr<AVFrame, void(*)(AVFrame*)> currentAVFrame() const override; virtual std::unique_ptr<AVFrame, void(*)(AVFrame*)> currentAVFrame() const override;
void configureTarget(bool useAVFrame);
public Q_SLOTS: public Q_SLOTS:
virtual void startRendering() override; virtual void startRendering() override;
......
...@@ -138,6 +138,9 @@ Renderer::isRendering() const ...@@ -138,6 +138,9 @@ Renderer::isRendering() const
void void
Renderer::useAVFrame(bool useAVFrame) { Renderer::useAVFrame(bool useAVFrame) {
pimpl_->usingAVFrame_ = useAVFrame; pimpl_->usingAVFrame_ = useAVFrame;
#ifdef ENABLE_LIBWRAP
pimpl_->renderer->configureTarget(useAVFrame);
#endif;
} }
std::string std::string
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment