diff options
author | Christian Stromme <christian.stromme@qt.io> | 2016-11-22 18:53:49 +0100 |
---|---|---|
committer | Christian Stromme <christian.stromme@qt.io> | 2018-01-22 20:50:17 +0000 |
commit | c20d3fa8c42d3ea0a088f208b55dfc66b58f6674 (patch) | |
tree | 974dfeafe5fde1aa3f9bbaa77193cf0e1baadd9b /src/plugins/directshow/camera/dscamerasession.cpp | |
parent | 469a18793a11b45ffa6f7ed3f873bddbae8e900d (diff) |
DirectShow: Add camera image capture controls
Adds controls for setting the capture destination and buffer format.
[ChangeLog][DirectShow] Added support for setting the capture
destination and format.
Change-Id: I7420ea5dce9bf1bef391b6ba3a1537bedfbcf52d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src/plugins/directshow/camera/dscamerasession.cpp')
-rw-r--r-- | src/plugins/directshow/camera/dscamerasession.cpp | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index 6590afeb9..82125d4f6 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -69,6 +69,7 @@ DSCameraSession::DSCameraSession(QObject *parent) , m_readyForCapture(false) , m_imageIdCounter(0) , m_currentImageId(-1) + , m_captureDestinations(QCameraImageCapture::CaptureToFile) , m_status(QCamera::UnloadedStatus) { connect(this, SIGNAL(statusChanged(QCamera::Status)), @@ -354,6 +355,25 @@ bool DSCameraSession::getCameraControlInterface(IAMCameraControl **cameraControl return true; } +bool DSCameraSession::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const +{ + return destination & (QCameraImageCapture::CaptureToFile | QCameraImageCapture::CaptureToBuffer); +} + +QCameraImageCapture::CaptureDestinations DSCameraSession::captureDestination() const +{ + return m_captureDestinations; +} + +void DSCameraSession::setCaptureDestination(QCameraImageCapture::CaptureDestinations destinations) +{ + if (m_captureDestinations == destinations) + return; + + m_captureDestinations = destinations; + Q_EMIT captureDestinationChanged(m_captureDestinations); +} + bool DSCameraSession::load() { unload(); @@ -586,8 +606,8 @@ void DSCameraSession::presentFrame() m_capturedFrame.unmap(); - QtConcurrent::run(this, &DSCameraSession::saveCapturedImage, - m_currentImageId, captureImage, m_imageCaptureFileName); + QtConcurrent::run(this, &DSCameraSession::processCapturedImage, + m_currentImageId, m_captureDestinations, captureImage, m_imageCaptureFileName); m_imageCaptureFileName.clear(); m_currentImageId = -1; @@ -603,14 +623,22 @@ void DSCameraSession::presentFrame() updateReadyForCapture(); } -void DSCameraSession::saveCapturedImage(int id, const QImage &image, const QString &path) +void DSCameraSession::processCapturedImage(int id, + QCameraImageCapture::CaptureDestinations captureDestinations, + const QImage &image, + const QString &path) { - if (image.save(path, "JPG")) { - emit imageSaved(id, path); - } else { - emit captureError(id, QCameraImageCapture::ResourceError, - tr("Could not save image to file.")); + if (captureDestinations & QCameraImageCapture::CaptureToFile) { + if (image.save(path, "JPG")) { + Q_EMIT imageSaved(id, path); + } else { + Q_EMIT captureError(id, QCameraImageCapture::ResourceError, + tr("Could not save image to file.")); + } } + + if (captureDestinations & QCameraImageCapture::CaptureToBuffer) + Q_EMIT imageAvailable(id, QVideoFrame(image)); } bool DSCameraSession::createFilterGraph() |