fix: screenshot by render frame

This commit is contained in:
rankun 2020-02-15 13:37:35 +08:00
commit 9dcd16bd81
4 changed files with 15 additions and 9 deletions

View file

@ -105,6 +105,11 @@ const AVFrame *VideoBuffer::consumeRenderedFrame()
return m_renderingframe; return m_renderingframe;
} }
const AVFrame *VideoBuffer::peekRenderedFrame()
{
return m_renderingframe;
}
void VideoBuffer::interrupt() void VideoBuffer::interrupt()
{ {
if (m_renderExpiredFrames) { if (m_renderExpiredFrames) {

View file

@ -32,6 +32,8 @@ public:
// unlocking m_mutex // unlocking m_mutex
const AVFrame* consumeRenderedFrame(); const AVFrame* consumeRenderedFrame();
const AVFrame* peekRenderedFrame();
// wake up and avoid any blocking call // wake up and avoid any blocking call
void interrupt(); void interrupt();

View file

@ -105,7 +105,14 @@ void Device::updateScript(QString script)
void Device::onScreenshot() void Device::onScreenshot()
{ {
m_screenshot = true; if (!m_vb) {
return;
}
m_vb->lock();
// screenshot
saveFrame(m_vb->peekRenderedFrame());
m_vb->unLock();
} }
void Device::initSignals() void Device::initSignals()
@ -201,12 +208,6 @@ void Device::initSignals()
if (m_videoForm) { if (m_videoForm) {
m_videoForm->updateRender(frame); m_videoForm->updateRender(frame);
} }
// screenshot
if (m_screenshot) {
saveFrame(frame);
m_screenshot = false;
}
m_vb->unLock(); m_vb->unLock();
},Qt::QueuedConnection); },Qt::QueuedConnection);
} }

View file

@ -65,8 +65,6 @@ private:
QTime m_startTimeCount; QTime m_startTimeCount;
DeviceParams m_params; DeviceParams m_params;
bool m_screenshot = false;
}; };
#endif // DEVICE_H #endif // DEVICE_H