diff --git a/src/directrenderer.cpp b/src/directrenderer.cpp
index 94351572b33af40043a7688b721b278d35e0233a..d51e989e79c271aa5e1d34c87f5d8fd8ccb46193 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 ddddcada8ed04960c44c552dd17110c012533c04..e2514c6733373215ffbcafc845b11e997cbc1c71 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 05869fe622766f54b83510b9a1aded5008c8fd74..fd000b7ad9f637b98a572c6164272a61f524909e 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