summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/camera/dscamerasession.cpp
diff options
context:
space:
mode:
authorChristian Stromme <christian.stromme@qt.io>2016-11-22 18:53:49 +0100
committerChristian Stromme <christian.stromme@qt.io>2018-01-22 20:50:17 +0000
commitc20d3fa8c42d3ea0a088f208b55dfc66b58f6674 (patch)
tree974dfeafe5fde1aa3f9bbaa77193cf0e1baadd9b /src/plugins/directshow/camera/dscamerasession.cpp
parent469a18793a11b45ffa6f7ed3f873bddbae8e900d (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.cpp44
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()