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
qwasmjs_p.h
Go to the documentation of this file.
1// Copyright (C) 2025 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#ifndef QWASMJS_P_H
5#define QWASMJS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QObject>
19#include <QSize>
20
21#include <emscripten.h>
22#include <emscripten/val.h>
23#include <emscripten/bind.h>
24#include <private/qstdweb_p.h>
25#include <private/qplatformmediarecorder_p.h>
26
27QT_BEGIN_NAMESPACE
28
29class QIODevice;
30
31class JsMediaRecorder final : public QIODevice
32{
34public:
36 JsMediaRecorder(const QIODevice *outputDevice);
37
38 void pauseStream();
39 void resumeStream();
40 void stopStream();
41 void startStreaming();
42
43 bool open(QIODeviceBase::OpenMode mode) override;
44 bool isSequential() const override;
45 qint64 size() const override;
46 bool seek(qint64 pos) override;
47 void setStream(emscripten::val stream);
48 qint64 bytesAvailable() const override;
49
50 void setNeedsCamera(bool hasCamera) { m_needsCamera = hasCamera; }
51 void setNeedsAudio(bool hasAudio) { m_needsAudio = hasAudio; }
52
53 QMediaRecorder::RecorderState currentState() { return m_currentState; }
54
56 void started();
57 void stopped();
58 void paused();
59 void resumed();
60 void streamError(QMediaRecorder::Error error, const QString &errorMessage);
61 void stateChanged(QMediaRecorder::RecorderState state);
62
63protected:
64 qint64 readData(char *data, qint64 maxSize) override;
65 qint64 writeData(const char *, qint64) override;
66
67private:
68 void audioDataAvailable(emscripten::val Blob, double timeCodeDifference);
69 void setTrackContraints(QMediaEncoderSettings &settings, emscripten::val stream);
70
71 emscripten::val m_mediaRecorder = emscripten::val::undefined();
72 emscripten::val m_mediaStream = emscripten::val::undefined();
73 QMediaEncoderSettings m_mediaSettings;
74 bool m_needsCamera = false;
75 bool m_needsAudio = false;
76
77 QMediaRecorder::RecorderState m_currentState = QMediaRecorder::StoppedState;
78 QByteArray m_buffer;
79
80 QScopedPointer<qstdweb::EventCallback> m_mediaStreamDataAvailable;
81 QScopedPointer<qstdweb::EventCallback> m_mediaStreamStopped;
82 QScopedPointer<qstdweb::EventCallback> m_mediaStreamError;
83 QScopedPointer<qstdweb::EventCallback> m_mediaStreamStart;
84 QScopedPointer<qstdweb::EventCallback> m_mediaStreamPause;
85 QScopedPointer<qstdweb::EventCallback> m_mediaStreamResume;
86};
87
89{
91public:
92 explicit JsMediaInputStream(QObject *parent = nullptr);
94 static JsMediaInputStream *instance(const std::string &deviceId);
95 static void releaseInstance(const std::string &deviceId);
96 static void replaceAudioStreamDevice(const std::string &audioDeviceId);
97
98 bool isActive() { return m_active; }
99
100 void setUseAudio(bool useAudio) { m_needsAudio = useAudio; }
101 void setUseVideo(bool useVideo) { m_needsVideo = useVideo; }
102 void setStreamDevice(const std::string &id);
103 void setVideoConstraints(QSize resolution, float minFrameRate, float maxFrameRate);
104
105 void setAudioStreamDevice(const std::string &id);
106 void replaceMediaTrack(const std::string &id);
107 emscripten::val setDeviceConstraints(const std::string &id);
108
109 emscripten::val getMediaStream() { return m_mediaStream; }
110 void stopMediaStream(emscripten::val stream);
111
112signals:
116 void activated(bool active);
117
118private:
119 void setupMediaStream(emscripten::val mStream);
120 emscripten::val m_mediaStream = emscripten::val::undefined();
121 bool m_needsAudio = false;
122 bool m_needsVideo = false;
123 bool m_active = false;
124 QSize m_videoResolution;
125 float m_minFrameRate = 0;
126 float m_maxFrameRate = 0;
127
128 QScopedPointer<qstdweb::EventCallback> m_activeStreamEvent;
129 QScopedPointer<qstdweb::EventCallback> m_inactiveStreamEvent;
130 std::string m_deviceId;
131};
132
133#endif // QWASMJS_P_H
void mediaVideoStreamReady()
void replaceMediaTrack(const std::string &id)
Definition qwasmjs.cpp:421
static void releaseInstance(const std::string &deviceId)
Definition qwasmjs.cpp:382
emscripten::val getMediaStream()
Definition qwasmjs_p.h:109
void setStreamDevice(const std::string &id)
Definition qwasmjs.cpp:520
void stopMediaStream(emscripten::val stream)
Definition qwasmjs.cpp:583
static void replaceAudioStreamDevice(const std::string &audioDeviceId)
Definition qwasmjs.cpp:393
void setVideoConstraints(QSize resolution, float minFrameRate, float maxFrameRate)
Definition qwasmjs.cpp:402
void mediaAudioStreamReady()
void setUseAudio(bool useAudio)
Definition qwasmjs_p.h:100
void setUseVideo(bool useVideo)
Definition qwasmjs_p.h:101
void setAudioStreamDevice(const std::string &id)
Definition qwasmjs.cpp:409
void activated(bool active)
static JsMediaInputStream * instance(const std::string &deviceId)
Definition qwasmjs.cpp:371
emscripten::val setDeviceConstraints(const std::string &id)
Definition qwasmjs.cpp:475
qint64 writeData(const char *, qint64) override
Writes up to maxSize bytes from data to the device.
Definition qwasmjs.cpp:56
void streamError(QMediaRecorder::Error error, const QString &errorMessage)
void startStreaming()
Definition qwasmjs.cpp:194
bool isSequential() const override
Returns true if this device is sequential; otherwise returns false.
Definition qwasmjs.cpp:31
qint64 size() const override
For open random-access devices, this function returns the size of the device.
Definition qwasmjs.cpp:36
void stopStream()
Definition qwasmjs.cpp:183
bool seek(qint64 pos) override
For random-access devices, this function sets the current position to pos, returning true on success,...
Definition qwasmjs.cpp:41
void setNeedsCamera(bool hasCamera)
Definition qwasmjs_p.h:50
qint64 bytesAvailable() const override
Returns the number of bytes that are available for reading.
Definition qwasmjs.cpp:358
void setStream(emscripten::val stream)
Definition qwasmjs.cpp:206
void stateChanged(QMediaRecorder::RecorderState state)
JsMediaRecorder(const QIODevice *outputDevice)
bool open(QIODeviceBase::OpenMode mode) override
Opens the device and sets its OpenMode to mode.
Definition qwasmjs.cpp:24
void resumeStream()
Definition qwasmjs.cpp:173
qint64 readData(char *data, qint64 maxSize) override
Reads up to maxSize bytes from the device into data, and returns the number of bytes read or -1 if an...
Definition qwasmjs.cpp:48
void pauseStream()
Definition qwasmjs.cpp:164
QMediaRecorder::RecorderState currentState()
Definition qwasmjs_p.h:53
void setNeedsAudio(bool hasAudio)
Definition qwasmjs_p.h:51
Combined button and popup list for selecting options.
Q_GLOBAL_STATIC(QReadWriteLock, g_updateMutex)