diff --git a/QtScrcpy/device/decoder/videobuffer.cpp b/QtScrcpy/device/decoder/videobuffer.cpp index d9c0c05..c0cb22a 100644 --- a/QtScrcpy/device/decoder/videobuffer.cpp +++ b/QtScrcpy/device/decoder/videobuffer.cpp @@ -105,6 +105,11 @@ const AVFrame *VideoBuffer::consumeRenderedFrame() return m_renderingframe; } +const AVFrame *VideoBuffer::peekRenderedFrame() +{ + return m_renderingframe; +} + void VideoBuffer::interrupt() { if (m_renderExpiredFrames) { diff --git a/QtScrcpy/device/decoder/videobuffer.h b/QtScrcpy/device/decoder/videobuffer.h index 5cdef2b..41b5b1c 100644 --- a/QtScrcpy/device/decoder/videobuffer.h +++ b/QtScrcpy/device/decoder/videobuffer.h @@ -32,6 +32,8 @@ public: // unlocking m_mutex const AVFrame* consumeRenderedFrame(); + const AVFrame* peekRenderedFrame(); + // wake up and avoid any blocking call void interrupt(); diff --git a/QtScrcpy/device/device.cpp b/QtScrcpy/device/device.cpp index 1bf9bad..83e057f 100644 --- a/QtScrcpy/device/device.cpp +++ b/QtScrcpy/device/device.cpp @@ -105,7 +105,14 @@ void Device::updateScript(QString script) void Device::onScreenshot() { - m_screenshot = true; + if (!m_vb) { + return; + } + + m_vb->lock(); + // screenshot + saveFrame(m_vb->peekRenderedFrame()); + m_vb->unLock(); } void Device::initSignals() @@ -201,12 +208,6 @@ void Device::initSignals() if (m_videoForm) { m_videoForm->updateRender(frame); } - - // screenshot - if (m_screenshot) { - saveFrame(frame); - m_screenshot = false; - } m_vb->unLock(); },Qt::QueuedConnection); } diff --git a/QtScrcpy/device/device.h b/QtScrcpy/device/device.h index d5c7f20..cfccc54 100644 --- a/QtScrcpy/device/device.h +++ b/QtScrcpy/device/device.h @@ -65,8 +65,6 @@ private: QTime m_startTimeCount; DeviceParams m_params; - - bool m_screenshot = false; }; #endif // DEVICE_H