7#include "private/qabstractvideobuffer_p.h"
8#include "private/qplatformvideosink_p.h"
9#include <private/qmemoryvideobuffer_p.h>
10#include <private/qvideotexturehelper_p.h>
15#include <emscripten/val.h>
16#include <emscripten/bind.h>
17#include <emscripten/html5.h>
21#include <private/qstdweb_p.h>
34 return m_cameraActive;
39 if (!m_CaptureSession) {
46 m_cameraActive = active;
49 m_cameraOutput->
start();
51 m_cameraOutput->
pause();
53 updateCameraFeatures();
61 constexpr QSize initialSize(0, 0);
62 constexpr QRect initialRect(
QPoint(0, 0), initialSize);
68 if (std::find(cameras.begin(), cameras.end(),
camera) != cameras.end()) {
70 createCamera(m_cameraDev);
74 if (cameras.count() > 0) {
76 createCamera(m_cameraDev);
92 if (m_CaptureSession == captureSession)
95 m_CaptureSession = captureSession;
103 static constexpr std::string_view focusModeString =
"focusMode";
105 m_cameraOutput->
setDeviceSetting(focusModeString.data(), emscripten::val(
"manual"));
107 m_cameraOutput->
setDeviceSetting(focusModeString.data(), emscripten::val(
"continuous"));
114 if (caps.isUndefined())
117 emscripten::val
focusMode = caps[
"focusMode"];
121 std::vector<std::string> focalModes;
124 focalModes.push_back(
focusMode[
i].as<std::string>());
133 return std::find(focalModes.begin(), focalModes.end(),
"continuous") != focalModes.end()
134 || std::find(focalModes.begin(), focalModes.end(),
"single-shot")
142 found = std::find(focalModes.begin(), focalModes.end(),
"manual") != focalModes.end();
152 if (m_wasmTorchMode ==
mode)
155 static constexpr std::string_view torchModeString =
"torchMode";
156 bool hasChanged =
false;
159 m_cameraOutput->
setDeviceSetting(torchModeString.data(), emscripten::val(
false));
163 m_cameraOutput->
setDeviceSetting(torchModeString.data(), emscripten::val(
true));
169 m_wasmTorchMode =
mode;
176 if (!m_cameraIsReady)
180 if (caps.isUndefined())
196 if (m_wasmExposureMode ==
mode)
199 bool hasChanged =
false;
200 static constexpr std::string_view exposureModeString =
"exposureMode";
203 m_cameraOutput->
setDeviceSetting(exposureModeString.data(), emscripten::val(
"manual"));
207 m_cameraOutput->
setDeviceSetting(exposureModeString.data(), emscripten::val(
"continuous"));
215 m_wasmExposureMode =
mode;
222 if (!m_cameraIsReady)
226 if (caps.isUndefined())
233 std::vector<std::string> exposureModes;
241 found = std::find(exposureModes.begin(), exposureModes.end(),
"continuous")
242 != exposureModes.end();
245 found = std::find(exposureModes.begin(), exposureModes.end(),
"manual")
246 != exposureModes.end();
257 if (!m_cameraIsReady)
261 if (caps.isUndefined())
264 emscripten::val exposureComp = caps[
"exposureCompensation"];
265 if (exposureComp.isUndefined())
267 if (m_wasmExposureCompensation ==
bias)
270 static constexpr std::string_view exposureCompensationModeString =
"exposureCompensation";
272 m_wasmExposureCompensation =
bias;
278 if (m_wasmExposureTime == secs)
281 if (!m_cameraIsReady)
288 static constexpr std::string_view exposureTimeString =
"exposureTime";
289 m_cameraOutput->
setDeviceSetting(exposureTimeString.data(), emscripten::val(secs));
290 m_wasmExposureTime = secs;
296 if (!m_cameraIsReady)
300 if (caps.isUndefined())
303 emscripten::val isoSpeed = caps[
"iso"];
304 if (isoSpeed.isUndefined())
307 return isoSpeed.as<
double>();
312 if (!m_cameraIsReady)
316 if (caps.isUndefined())
319 emscripten::val isoSpeed = caps[
"iso"];
320 if (isoSpeed.isUndefined())
322 if (m_wasmIsoSensitivity == sens)
324 static constexpr std::string_view isoString =
"iso";
326 m_wasmIsoSensitivity = sens;
332 if (!m_cameraIsReady)
336 if (caps.isUndefined())
354 if (m_wasmWhiteBalanceMode ==
mode)
357 bool hasChanged =
false;
358 static constexpr std::string_view whiteBalanceModeString =
"whiteBalanceMode";
361 m_cameraOutput->
setDeviceSetting(whiteBalanceModeString.data(), emscripten::val(
"auto"));
365 m_cameraOutput->
setDeviceSetting(whiteBalanceModeString.data(), emscripten::val(
"manual"));
373 m_wasmWhiteBalanceMode =
mode;
380 if (!m_cameraIsReady)
384 if (caps.isUndefined())
390 if(m_wasmColorTemperature == temperature)
393 static constexpr std::string_view colorBalanceString =
"colorTemperature";
394 m_cameraOutput->
setDeviceSetting(colorBalanceString.data(), emscripten::val(temperature));
395 m_wasmColorTemperature = temperature;
408void QWasmCamera::updateCameraFeatures()
410 if (!m_cameraIsReady)
414 if (caps.isUndefined())
417 QCamera::Features cameraFeatures;
419 if (!caps[
"colorTemperature"].isUndefined())
422 if (!caps[
"exposureCompensation"].isUndefined())
425 if (!caps[
"iso"].isUndefined())
428 if (!caps[
"exposureTime"].isUndefined())
431 if (!caps[
"focusDistance"].isUndefined())
The QCameraDevice class provides general information about camera devices.
The QCamera class provides interface for system camera devices.
WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
TorchMode
\value TorchOff Torch is Off.
FocusMode
\value FocusModeAuto Continuous auto focus mode.
ExposureMode
\value ExposureAuto Automatic mode.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
bool singleShot
whether the timer is a single-shot timer
bool isTorchModeSupported(QCamera::TorchMode mode) const override
void setManualExposureTime(float) override
void setExposureCompensation(float bias) override
void setColorTemperature(int temperature) override
int isoSensitivity() const override
void setWhiteBalanceMode(QCamera::WhiteBalanceMode mode) override
void setTorchMode(QCamera::TorchMode mode) override
bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const override
void setExposureMode(QCamera::ExposureMode mode) override
bool setCameraFormat(const QCameraFormat &format) override
void setManualIsoSensitivity(int) override
void setFocusMode(QCamera::FocusMode mode) override
void setActive(bool active) override
bool isFocusModeSupported(QCamera::FocusMode mode) const override
bool isActive() const override
void setCaptureSession(QPlatformMediaCaptureSession *session) override
bool isExposureModeSupported(QCamera::ExposureMode mode) const override
void setCamera(const QCameraDevice &camera) override
void addCameraSourceElement(const std::string &id)
void updateVideoElementGeometry(const QRect &windowGeometry)
bool setDeviceSetting(const std::string &key, emscripten::val value)
emscripten::val getDeviceCapabilities()
void setVideoMode(QWasmVideoOutput::WasmVideoMode mode)
void createVideoElement(const std::string &id)
void setSurface(QVideoSink *surface)
void createOffscreenElement(const QSize &offscreenSize)
#define Q_LOGGING_CATEGORY(name,...)
GLint GLsizei GLsizei GLenum format
#define QStringLiteral(str)