Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
4
#
include
"qwasmimagecapture_p.h"
5
6
#
include
"qwasmmediacapturesession_p.h"
7
#
include
"qwasmcamera_p.h"
8
9
#
include
<
QtGui
/
qimagewriter
.
h
>
10
#
include
<
QtCore
/
qdir
.
h
>
11
#
include
<
QtCore
/
private
/
qstdweb_p
.
h
>
12
13
#
include
<
emscripten
/
val
.
h
>
14
15
QT_BEGIN_NAMESPACE
16
17
using
namespace
Qt::Literals;
18
19
Q_LOGGING_CATEGORY
(qWasmImageCapture,
"qt.multimedia.wasm.imagecapture"
)
20
/* TODO
21
signals:
22
imageExposed
23
*/
24
QWasmImageCapture
::
QWasmImageCapture
(
QImageCapture
*
parent
) :
QPlatformImageCapture
(
parent
) { }
25
26
QWasmImageCapture::~QWasmImageCapture() =
default
;
27
28
int
QWasmImageCapture
::
capture
(
const
QString &fileName)
29
{
30
if
(!
isReadyForCapture
(
)
) {
31
Q_EMIT error(m_lastId, QImageCapture::NotReadyError, msgCameraNotReady());
32
return
-1;
33
}
34
35
QString imageFilenName;
36
if
(fileName.isEmpty())
37
imageFilenName = QDir::homePath() + u"/image.jpg"_s;
38
else
39
imageFilenName = fileName;
40
41
QImage image = takePicture();
42
if
(image.isNull())
43
return
-1;
44
45
QImageWriter writer(imageFilenName);
46
// TODO
47
// writer.setQuality(quality);
48
// writer.setFormat("png");
49
50
if
(writer.write(image)) {
51
qCDebug(qWasmImageCapture) << Q_FUNC_INFO <<
"image saved"
;
52
Q_EMIT imageSaved(m_lastId, fileName);
53
}
else
{
54
QImageCapture::Error err = (writer.error() == QImageWriter::UnsupportedFormatError)
55
? QImageCapture::FormatError
56
: QImageCapture::ResourceError;
57
58
Q_EMIT error(m_lastId, err, writer.errorString());
59
}
60
61
return
m_lastId;
62
}
63
64
int
QWasmImageCapture
::
captureToBuffer
()
65
{
66
if
(!
isReadyForCapture
(
)
) {
67
Q_EMIT error(m_lastId, QImageCapture::NotReadyError, msgCameraNotReady());
68
return
-1;
69
}
70
71
QImage image = takePicture();
72
if
(image.isNull())
73
return
-1;
74
75
Q_EMIT imageCaptured(m_lastId, image);
76
return
m_lastId;
77
}
78
79
QImage
QWasmImageCapture
::takePicture()
80
{
81
m_lastId++;
82
83
// Try the fast path: grab the current frame and convert via RHI.
84
QVideoFrame thisFrame = m_captureSession->videoSink()->videoFrame();
85
QImage image;
86
if
(thisFrame.isValid()) {
87
Q_EMIT imageAvailable(m_lastId, thisFrame);
88
image = thisFrame.toImage();
89
}
90
91
if
(image.isNull()) {
92
qCDebug(qWasmImageCapture) << Q_FUNC_INFO <<
"image capture failed"
;
93
Q_EMIT error(m_lastId, QImageCapture::ResourceError, QStringLiteral(
"Capture failed"
));
94
return
QImage();
95
}
96
97
Q_EMIT imageCaptured(m_lastId, image);
98
if
(m_settings.resolution().isValid() && m_settings.resolution() != image.size())
99
image = image.scaled(m_settings.resolution());
100
101
return
image;
102
}
103
104
bool
QWasmImageCapture
::
isReadyForCapture
()
const
105
{
106
return
m_isReadyForCapture;
107
}
108
109
QImageEncoderSettings
QWasmImageCapture
::
imageSettings
()
const
110
{
111
return
m_settings;
112
}
113
114
void
QWasmImageCapture
::
setImageSettings
(
const
QImageEncoderSettings &settings)
115
{
116
m_settings = settings;
117
}
118
119
void
QWasmImageCapture
::
setReadyForCapture
(
bool
isReady)
120
{
121
if
(m_isReadyForCapture != isReady) {
122
m_isReadyForCapture = isReady;
123
Q_EMIT readyForCaptureChanged(m_isReadyForCapture);
124
}
125
}
126
127
void
QWasmImageCapture
::
setCaptureSession
(QPlatformMediaCaptureSession *session)
128
{
129
QWasmMediaCaptureSession
*captureSession =
static_cast
<
QWasmMediaCaptureSession
*>(session);
130
// nullptr clears
131
if
(m_captureSession == captureSession)
132
return
;
133
134
if
(captureSession) {
135
m_lastId = 0;
136
m_captureSession = captureSession;
137
}
138
m_captureSession = captureSession;
139
}
140
141
QT_END_NAMESPACE
QImageCapture
\inmodule QtMultimedia
Definition
qimagecapture.h:24
QObjectData::parent
QObject * parent
Definition
qobject.h:74
QWasmImageCapture
Definition
qwasmimagecapture_p.h:27
QWasmImageCapture::capture
int capture(const QString &fileName) override
Definition
qwasmimagecapture.cpp:28
QWasmImageCapture::setReadyForCapture
void setReadyForCapture(bool isReady)
Definition
qwasmimagecapture.cpp:119
QWasmImageCapture::isReadyForCapture
bool isReadyForCapture() const override
Definition
qwasmimagecapture.cpp:104
QWasmImageCapture::setImageSettings
void setImageSettings(const QImageEncoderSettings &settings) override
Definition
qwasmimagecapture.cpp:114
QWasmImageCapture::setCaptureSession
void setCaptureSession(QPlatformMediaCaptureSession *session)
Definition
qwasmimagecapture.cpp:127
QWasmImageCapture::imageSettings
QImageEncoderSettings imageSettings() const override
Definition
qwasmimagecapture.cpp:109
QWasmImageCapture::captureToBuffer
int captureToBuffer() override
Definition
qwasmimagecapture.cpp:64
QWasmMediaCaptureSession
Definition
qwasmmediacapturesession_p.h:36
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
Q_LOGGING_CATEGORY
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
qtmultimedia
src
plugins
multimedia
wasm
mediacapture
qwasmimagecapture.cpp
Generated on
for Qt by
1.18.0