summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-13 13:53:51 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-13 13:53:59 +0200
commit820205e604a5f281238c23464638fdff72b969d1 (patch)
treec6f6723449d1b11e8d540752e50e3c2e11613f33 /src/plugins/directshow
parent03d55888942feac26054978ce4e7c6edd4611eda (diff)
parentc30eeb5b7486caa31cdb0f9279de2f78fed89c54 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Diffstat (limited to 'src/plugins/directshow')
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp
index 9e1be9606..64532d04b 100644
--- a/src/plugins/directshow/camera/dscamerasession.cpp
+++ b/src/plugins/directshow/camera/dscamerasession.cpp
@@ -668,7 +668,7 @@ void DSCameraSession::onFrameAvailable(const char *frameData, long len)
QMutexLocker locker(&m_captureMutex);
if (m_currentImageId != -1 && !m_capturedFrame.isValid()) {
m_capturedFrame = m_currentFrame;
- emit imageExposed(m_currentImageId);
+ QMetaObject::invokeMethod(this, "imageExposed", Qt::QueuedConnection, Q_ARG(int, m_currentImageId));
}
QMetaObject::invokeMethod(this, "presentFrame", Qt::QueuedConnection);
@@ -685,6 +685,9 @@ void DSCameraSession::presentFrame()
m_presentMutex.unlock();
+ QImage captureImage;
+ int captureId;
+
m_captureMutex.lock();
if (m_capturedFrame.isValid()) {
@@ -692,27 +695,31 @@ void DSCameraSession::presentFrame()
m_capturedFrame.map(QAbstractVideoBuffer::ReadOnly);
- QImage image = QImage(m_capturedFrame.bits(),
- m_previewSize.width(), m_previewSize.height(),
- QImage::Format_RGB32);
+ captureImage = QImage(m_capturedFrame.bits(),
+ m_previewSize.width(), m_previewSize.height(),
+ QImage::Format_RGB32);
- image = image.mirrored(m_needsHorizontalMirroring); // also causes a deep copy of the data
+ captureImage = captureImage.mirrored(m_needsHorizontalMirroring); // also causes a deep copy of the data
m_capturedFrame.unmap();
- emit imageCaptured(m_currentImageId, image);
+ captureId = m_currentImageId;
QtConcurrent::run(this, &DSCameraSession::saveCapturedImage,
- m_currentImageId, image, m_imageCaptureFileName);
+ m_currentImageId, captureImage, m_imageCaptureFileName);
m_imageCaptureFileName.clear();
m_currentImageId = -1;
- updateReadyForCapture();
m_capturedFrame = QVideoFrame();
}
m_captureMutex.unlock();
+
+ if (!captureImage.isNull())
+ emit imageCaptured(captureId, captureImage);
+
+ updateReadyForCapture();
}
void DSCameraSession::saveCapturedImage(int id, const QImage &image, const QString &path)