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
qandroidcamera_p.h
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
#
ifndef
QANDROIDCAMERA_H
5
#
define
QANDROIDCAMERA_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
<
QtMultimedia
/
private
/
qplatformcamera_p
.
h
>
19
20
#
include
<
QtCore
/
qjniobject
.
h
>
21
#
include
<
QtCore
/
qobject
.
h
>
22
23
#
include
<
QtMultimedia
/
qimagecapture
.
h
>
24
25
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpeghwaccel_p
.
h
>
26
27
#
include
<
atomic
>
28
#
include
<
optional
>
29
30
QT_BEGIN_NAMESPACE
31
32
Q_DECLARE_JNI_CLASS
(QtJniCamera2,
"org/qtproject/qt/android/multimedia/qffmpeg/QtCamera2"
);
33
34
class
QVideoFrame;
35
class
QAndroidVideoFrameFactory;
36
37
namespace
QFFmpeg
{
38
39
using
QtJniCamera2
=
QtJniTypes
::
QtJniCamera2
;
40
41
class
QAndroidCamera
:
public
QPlatformCamera
42
{
43
Q_OBJECT
44
public
:
45
enum
State
{
Closed
,
WaitingOpen
,
WaitingStart
,
Started
};
46
explicit
QAndroidCamera
(QCamera *camera);
47
~
QAndroidCamera
()
override
;
48
49
bool
isActive
()
const
override
{
return
m_state == State::Started; }
50
bool
isFlashModeSupported
(QCamera::FlashMode mode)
const
override
;
51
bool
isFlashReady
()
const
override
;
52
bool
isFocusModeSupported
(QCamera::FocusMode focusMode)
const
override
;
53
bool
isTorchModeSupported
(QCamera::TorchMode mode)
const
override
;
54
void
setActive
(
bool
active)
override
;
55
void
setCamera
(
const
QCameraDevice &camera)
override
;
56
bool
setCameraFormat
(
const
QCameraFormat &format)
override
;
57
void
setFlashMode
(QCamera::FlashMode mode)
override
;
58
void
setFocusDistance
(
float
distance)
override
;
59
void
setStillCaptureResolution
(QSize resolution);
60
61
// FocusModeAuto maps to CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE
62
//
63
// The CustomFocusPoint functionality maps to CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
64
// but with the CaptureRequest.CONTROL_AF_REGIONS setting.
65
//
66
// FocusModeManual maps to CaptureRequest.CONTROL_AF_MODE_OFF
67
// but also requires us to be able to set focusDistance using
68
// CaptureRequest.LENS_FOCUS_DISTANCE.
69
//
70
// Currently implemented focus-modes: Auto, Manual
71
void
setFocusMode
(QCamera::FocusMode mode)
override
;
72
void
setTorchMode
(QCamera::TorchMode mode)
override
;
73
void
zoomTo
(
float
factor,
float
rate)
override
;
74
75
std
::optional<
int
>
ffmpegHWPixelFormat
()
const
override
;
76
77
QVideoFrameFormat
frameFormat
()
const
override
;
78
79
static
bool
registerNativeMethods
();
80
81
void
capture
();
82
void
updateExif
(
const
QString &filename);
83
public
Q_SLOTS
:
84
void
onApplicationStateChanged
();
85
void
onCameraOpened
();
86
void
onCameraDisconnect
();
87
void
onCameraError
(
int
error);
88
void
frameAvailable
(QJniObject image,
bool
takePhoto =
false
);
89
void
onCaptureSessionConfigured
();
90
void
onCaptureSessionConfigureFailed
();
91
void
onStillReaderSwapFailed
();
92
void
onCaptureSessionFailed
(
int
reason,
long
frameNumber);
93
void
onSessionActive
();
94
void
onSessionClosed
();
95
void
onStillPhotoCaptureFailed
();
96
97
Q_SIGNALS
:
98
void
onStillPhotoCaptured
(
const
QVideoFrame
&);
99
void
onImageCaptureFailed
(QImageCapture::Error error,
const
QString &errMsg);
100
101
private
:
102
bool
isActivating()
const
{
return
m_state != State::Closed; }
103
104
void
setState(State newState);
105
QtVideo::Rotation rotation()
const
;
106
void
updateCameraCharacteristics();
107
void
cleanCameraCharacteristics();
108
QSize stillResolution()
const
;
109
void
applyStillResolution();
110
111
void
restartCamera();
112
void
queueCameraRestart();
113
114
State m_state =
State
::
Closed
;
115
QCameraDevice m_cameraDevice;
116
QtJniCamera2 m_jniCamera;
117
118
std::unique_ptr<QFFmpeg::HWAccel> m_hwAccel;
119
120
std::shared_ptr<QAndroidVideoFrameFactory> m_frameFactory;
121
QVideoFrameFormat::PixelFormat m_androidFramePixelFormat;
122
QList<QCamera::FlashMode> m_supportedFlashModes;
123
// List of supported focus-modes as reported by the Android camera device. Queried once when
124
// camera-device is initialized. Useful for avoiding multiple JNI calls.
125
QList<QCamera::FocusMode> m_supportedFocusModes;
126
bool
m_TorchModeSupported =
false
;
127
bool
m_wasActive =
false
;
128
129
bool
m_waitingForFirstFrame =
false
;
130
QSize m_videoResolution;
131
QSize m_requestedStillResolution;
132
QSize m_stillReaderSize;
133
std
::atomic<
bool
> m_restartPending =
false
;
134
};
135
136
}
// namespace QFFmpeg
137
138
QT_END_NAMESPACE
139
140
#
endif
// QANDROIDCAMERA_H
QFFmpeg::QAndroidCamera
Definition
qandroidcamera_p.h:42
QFFmpeg::QAndroidCamera::onStillPhotoCaptureFailed
void onStillPhotoCaptureFailed()
Definition
qandroidcamera.cpp:816
QFFmpeg::QAndroidCamera::setFocusMode
void setFocusMode(QCamera::FocusMode mode) override
Definition
qandroidcamera.cpp:591
QFFmpeg::QAndroidCamera::onCameraDisconnect
void onCameraDisconnect()
Definition
qandroidcamera.cpp:736
QFFmpeg::QAndroidCamera::onImageCaptureFailed
void onImageCaptureFailed(QImageCapture::Error error, const QString &errMsg)
QFFmpeg::QAndroidCamera::isTorchModeSupported
bool isTorchModeSupported(QCamera::TorchMode mode) const override
Definition
qandroidcamera.cpp:653
QFFmpeg::QAndroidCamera::frameFormat
QVideoFrameFormat frameFormat() const override
Definition
qandroidcamera.cpp:211
QFFmpeg::QAndroidCamera::onStillReaderSwapFailed
void onStillReaderSwapFailed()
Definition
qandroidcamera.cpp:723
QFFmpeg::QAndroidCamera::QAndroidCamera
QAndroidCamera(QCamera *camera)
Definition
qandroidcamera.cpp:153
QFFmpeg::QAndroidCamera::onSessionActive
void onSessionActive()
Definition
qandroidcamera.cpp:751
QFFmpeg::QAndroidCamera::setFlashMode
void setFlashMode(QCamera::FlashMode mode) override
Definition
qandroidcamera.cpp:613
QFFmpeg::QAndroidCamera::registerNativeMethods
static bool registerNativeMethods()
Definition
qandroidcamera.cpp:929
QFFmpeg::QAndroidCamera::onCaptureSessionFailed
void onCaptureSessionFailed(int reason, long frameNumber)
Definition
qandroidcamera.cpp:805
QFFmpeg::QAndroidCamera::capture
void capture()
Definition
qandroidcamera.cpp:763
QFFmpeg::QAndroidCamera::zoomTo
void zoomTo(float factor, float rate) override
Definition
qandroidcamera.cpp:678
QFFmpeg::QAndroidCamera::~QAndroidCamera
~QAndroidCamera() override
Definition
qandroidcamera.cpp:174
QFFmpeg::QAndroidCamera::setCamera
void setCamera(const QCameraDevice &camera) override
Definition
qandroidcamera.cpp:182
QFFmpeg::QAndroidCamera::onCaptureSessionConfigured
void onCaptureSessionConfigured()
Definition
qandroidcamera.cpp:709
QFFmpeg::QAndroidCamera::onSessionClosed
void onSessionClosed()
Definition
qandroidcamera.cpp:757
QFFmpeg::QAndroidCamera::setCameraFormat
bool setCameraFormat(const QCameraFormat &format) override
Definition
qandroidcamera.cpp:386
QFFmpeg::QAndroidCamera::frameAvailable
void frameAvailable(QJniObject image, bool takePhoto=false)
Definition
qandroidcamera.cpp:220
QFFmpeg::QAndroidCamera::isFlashReady
bool isFlashReady() const override
Definition
qandroidcamera.cpp:641
QFFmpeg::QAndroidCamera::isActive
bool isActive() const override
Definition
qandroidcamera_p.h:49
QFFmpeg::QAndroidCamera::setFocusDistance
void setFocusDistance(float distance) override
Definition
qandroidcamera.cpp:564
QFFmpeg::QAndroidCamera::onCameraOpened
void onCameraOpened()
Definition
qandroidcamera.cpp:729
QFFmpeg::QAndroidCamera::updateExif
void updateExif(const QString &filename)
Definition
qandroidcamera.cpp:768
QFFmpeg::QAndroidCamera::setStillCaptureResolution
void setStillCaptureResolution(QSize resolution)
Definition
qandroidcamera.cpp:773
QFFmpeg::QAndroidCamera::isFocusModeSupported
bool isFocusModeSupported(QCamera::FocusMode focusMode) const override
Definition
qandroidcamera.cpp:648
QFFmpeg::QAndroidCamera::isFlashModeSupported
bool isFlashModeSupported(QCamera::FlashMode mode) const override
Definition
qandroidcamera.cpp:636
QFFmpeg::QAndroidCamera::ffmpegHWPixelFormat
std::optional< int > ffmpegHWPixelFormat() const override
Definition
qandroidcamera.cpp:200
QFFmpeg::QAndroidCamera::onCaptureSessionConfigureFailed
void onCaptureSessionConfigureFailed()
Definition
qandroidcamera.cpp:716
QFFmpeg::QAndroidCamera::setActive
void setActive(bool active) override
Definition
qandroidcamera.cpp:294
QFFmpeg::QAndroidCamera::onCameraError
void onCameraError(int error)
Definition
qandroidcamera.cpp:742
QFFmpeg::QAndroidCamera::setTorchMode
void setTorchMode(QCamera::TorchMode mode) override
Definition
qandroidcamera.cpp:663
QFFmpeg
Definition
qandroidcacertificates.cpp:26
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
Q_DECLARE_JNI_CLASS
Q_DECLARE_JNI_CLASS(MotionEvent, "android/view/MotionEvent")
qtmultimedia
src
plugins
multimedia
ffmpeg
android
qandroidcamera_p.h
Generated on
for Qt by
1.18.0