Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwasmimagecapture.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5#include <qimagewriter.h>
9#include <QDir>
10
12
13using namespace Qt::Literals;
14
15Q_LOGGING_CATEGORY(qWasmImageCapture, "qt.multimedia.wasm.imagecapture")
16/* TODO
17signals:
18imageExposed
19*/
21
22QWasmImageCapture::~QWasmImageCapture() = default;
23
24int QWasmImageCapture::capture(const QString &fileName)
25{
27 emit error(m_lastId, QImageCapture::NotReadyError, msgCameraNotReady());
28 return -1;
29 }
30
31 QString imageFilenName;
32 if (fileName.isEmpty())
33 imageFilenName = QDir::homePath() + u"/image.jpg"_s;
34 else
35 imageFilenName = fileName;
36
37 QImage image = takePicture();
38 if (image.isNull())
39 return -1;
40
41 QImageWriter writer(imageFilenName);
42 // TODO
43 // writer.setQuality(quality);
44 // writer.setFormat("png");
45
46 if (writer.write(image)) {
47 qCDebug(qWasmImageCapture) << Q_FUNC_INFO << "image saved";
48 emit imageSaved(m_lastId, fileName);
49 } else {
50 QImageCapture::Error err = (writer.error() == QImageWriter::UnsupportedFormatError)
51 ? QImageCapture::FormatError
52 : QImageCapture::ResourceError;
53
54 emit error(m_lastId, err, writer.errorString());
55 }
56
57 return m_lastId;
58}
59
61{
63 emit error(m_lastId, QImageCapture::NotReadyError, msgCameraNotReady());
64 return -1;
65 }
66
67 QImage image = takePicture();
68 if (image.isNull())
69 return -1;
70
71 emit imageCaptured(m_lastId, image);
72 return m_lastId;
73}
74
75QImage QWasmImageCapture::takePicture()
76{
77 QVideoFrame thisFrame = m_captureSession->videoSink()->videoFrame();
78 if (!thisFrame.isValid())
79 return QImage();
80
81 m_lastId++;
82 emit imageAvailable(m_lastId, thisFrame);
83
84 QImage image = thisFrame.toImage();
85 if (image.isNull()) {
86 qCDebug(qWasmImageCapture) << Q_FUNC_INFO << "image is null";
87 emit error(m_lastId, QImageCapture::ResourceError, QStringLiteral("Resource error"));
88 return QImage();
89 }
90
91 emit imageCaptured(m_lastId, image);
92 if (m_settings.resolution().isValid() && m_settings.resolution() != image.size())
93 image = image.scaled(m_settings.resolution());
94
95 return image;
96}
97
99{
100 return m_isReadyForCapture;
101}
102
104{
105 return m_settings;
106}
107
108void QWasmImageCapture::setImageSettings(const QImageEncoderSettings &settings)
109{
110 m_settings = settings;
111}
112
114{
115 if (m_isReadyForCapture != isReady) {
116 m_isReadyForCapture = isReady;
117 emit readyForCaptureChanged(m_isReadyForCapture);
118 }
119}
120
121void QWasmImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
122{
123 QWasmMediaCaptureSession *captureSession = static_cast<QWasmMediaCaptureSession *>(session);
124 // nullptr clears
125 if (m_captureSession == captureSession)
126 return;
127
128 if (captureSession) {
129 m_lastId = 0;
130 m_captureSession = captureSession;
131 }
132 m_captureSession = captureSession;
133 setReadyForCapture(captureSession != nullptr);
134}
135
136QT_END_NAMESPACE
\inmodule QtMultimedia
QObject * parent
Definition qobject.h:73
int capture(const QString &fileName) override
void setReadyForCapture(bool isReady)
bool isReadyForCapture() const override
void setImageSettings(const QImageEncoderSettings &settings) override
void setCaptureSession(QPlatformMediaCaptureSession *session)
QImageEncoderSettings imageSettings() const override
int captureToBuffer() override
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")