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
qandroidcapturesession_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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 QANDROIDCAPTURESESSION_H
5#define QANDROIDCAPTURESESSION_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.h>
19#include <qmediarecorder.h>
20#include <qurl.h>
21#include <qelapsedtimer.h>
22#include <qtimer.h>
25
27
28class QAudioInput;
30
32{
34public:
35 explicit QAndroidCaptureSession();
37
38 QList<QSize> supportedResolutions() const { return m_supportedResolutions; }
39 QList<qreal> supportedFrameRates() const { return m_supportedFramerates; }
40
41 void setCameraSession(QAndroidCameraSession *cameraSession = 0);
42 void setAudioInput(QPlatformAudioInput *input);
43 void setAudioOutput(QPlatformAudioOutput *output);
44
46
47 void start(QMediaEncoderSettings &settings, const QUrl &outputLocation);
48 void stop(bool error = false);
49
50 qint64 duration() const;
51
52 QMediaEncoderSettings encoderSettings() { return m_encoderSettings; }
53
54 void setMediaEncoder(QAndroidMediaEncoder *encoder) { m_mediaEncoder = encoder; }
55
56 void stateChanged(QMediaRecorder::RecorderState state) {
57 if (m_mediaEncoder)
58 m_mediaEncoder->stateChanged(state);
59 }
60 void durationChanged(qint64 position)
61 {
62 if (m_mediaEncoder)
63 m_mediaEncoder->durationChanged(position);
64 }
65 void actualLocationChanged(const QUrl &location)
66 {
67 if (m_mediaEncoder)
68 m_mediaEncoder->actualLocationChanged(location);
69 }
70 void updateError(int error, const QString &errorString)
71 {
72 if (m_mediaEncoder)
73 m_mediaEncoder->updateError(QMediaRecorder::Error(error), errorString);
74 }
75
76private Q_SLOTS:
77 void updateDuration();
78 void onCameraOpened();
79
80 void onError(int what, int extra);
81 void onInfo(int what, int extra);
82
83private:
84 void applySettings(QMediaEncoderSettings &settings);
85
86 struct CaptureProfile {
88 QString outputFileExtension;
89
90 AndroidMediaRecorder::AudioEncoder audioEncoder;
91 int audioBitRate;
92 int audioChannels;
93 int audioSampleRate;
94
96 int videoBitRate;
97 int videoFrameRate;
98 QSize videoResolution;
99
100 bool isNull;
101
102 CaptureProfile()
103 : outputFormat(AndroidMediaRecorder::MPEG_4)
104 , outputFileExtension(QLatin1String("mp4"))
105 , audioEncoder(AndroidMediaRecorder::DefaultAudioEncoder)
106 , audioBitRate(128000)
107 , audioChannels(2)
108 , audioSampleRate(44100)
110 , videoBitRate(1)
111 , videoFrameRate(-1)
112 , videoResolution(1280, 720)
113 , isNull(true)
114 { }
115 };
116
117 CaptureProfile getProfile(int id);
118
119 void restartViewfinder();
120 void updateStreamingState();
121
122 QAndroidMediaEncoder *m_mediaEncoder = nullptr;
123 std::shared_ptr<AndroidMediaRecorder> m_mediaRecorder;
124 QAndroidCameraSession *m_cameraSession;
125
126 QPlatformAudioInput *m_audioInput = nullptr;
127 QPlatformAudioOutput *m_audioOutput = nullptr;
128
129 QElapsedTimer m_elapsedTime;
130 QTimer m_notifyTimer;
131 qint64 m_duration;
132
134 QUrl m_usedOutputLocation;
135 bool m_outputLocationIsStandard = false;
136
137 CaptureProfile m_defaultSettings;
138
139 QMediaEncoderSettings m_encoderSettings;
140 AndroidMediaRecorder::OutputFormat m_outputFormat;
141 AndroidMediaRecorder::AudioEncoder m_audioEncoder;
142 AndroidMediaRecorder::VideoEncoder m_videoEncoder;
143
144 QList<QSize> m_supportedResolutions;
145 QList<qreal> m_supportedFramerates;
146
147 QMetaObject::Connection m_audioInputChanged;
148 QMetaObject::Connection m_audioOutputChanged;
149 QMetaObject::Connection m_connOpenCamera;
150 QMetaObject::Connection m_connActiveChangedCamera;
151
152 void setKeepAlive(bool keepAlive);
153
154};
155
156QT_END_NAMESPACE
157
158#endif // QANDROIDCAPTURESESSION_H
void stateChanged(QMediaRecorder::RecorderState state)
QList< QSize > supportedResolutions() const
QMediaEncoderSettings encoderSettings()
void start(QMediaEncoderSettings &settings, const QUrl &outputLocation)
void actualLocationChanged(const QUrl &location)
void setAudioInput(QPlatformAudioInput *input)
void setAudioOutput(QPlatformAudioOutput *output)
void durationChanged(qint64 position)
QList< qreal > supportedFrameRates() const
void updateError(int error, const QString &errorString)
void setMediaEncoder(QAndroidMediaEncoder *encoder)
void setCameraSession(QAndroidCameraSession *cameraSession=0)