diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-17 10:48:30 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-17 10:48:30 +0200 |
commit | b4f2dc4f62b2cb4bd9c43de56bbfd0024404c190 (patch) | |
tree | b4a71b9a45b1c1c3adf21cdc49de68f9c86b1e9c /src/plugins/directshow | |
parent | 393602150d1f3eec25252aa40045f9e24ae5329b (diff) | |
parent | 820205e604a5f281238c23464638fdff72b969d1 (diff) |
Merge remote-tracking branch 'origin/5.7' into dev
Change-Id: Ib8d05d6e21c7beb19f618cd1edc52d248b1e43b8
Diffstat (limited to 'src/plugins/directshow')
-rw-r--r-- | src/plugins/directshow/camera/dscamerasession.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index 4208f934f..509057ba1 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) |