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
qgstreamercamera_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
QGSTREAMERCAMERACONTROL_H
5
#
define
QGSTREAMERCAMERACONTROL_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
<
private
/
qplatformcamera_p
.
h
>
19
#
include
<
private
/
qmultimediautils_p
.
h
>
20
#
include
<
QtCore
/
private
/
qexpected_p
.
h
>
21
#
include
<
QtCore
/
private
/
quniquehandle_types_p
.
h
>
22
23
#
include
<
mediacapture
/
qgstreamermediacapturesession_p
.
h
>
24
#
include
<
common
/
qgst_p
.
h
>
25
#
include
<
common
/
qgstpipeline_p
.
h
>
26
27
QT_BEGIN_NAMESPACE
28
29
class
QGstreamerCameraBase
:
public
QPlatformCamera
30
{
31
public
:
32
using
QPlatformCamera
::
QPlatformCamera
;
33
34
#
if
QT_CONFIG
(
gstreamer_qt_api
)
35
GstElement
*
rawGstElement
()
const
override
{
return
gstElement
().
element
(); }
36
#
endif
37
38
virtual
QGstElement
gstElement
()
const
= 0;
39
};
40
41
class
QGstreamerCamera
:
public
QGstreamerCameraBase
42
{
43
public
:
44
static
q23
::
expected
<
QPlatformCamera
*,
QString
>
create
(QCamera *camera);
45
46
~
QGstreamerCamera
()
override
;
47
48
bool
isActive
()
const
override
;
49
void
setActive
(
bool
active)
override
;
50
51
void
setCamera
(
const
QCameraDevice &camera)
override
;
52
bool
setCameraFormat
(
const
QCameraFormat &format)
override
;
53
54
QGstElement
gstElement
()
const
override
{
return
gstCameraBin; }
55
#
if
QT_CONFIG
(
gstreamer_photography
)
56
GstPhotography
*
photography
()
const
;
57
#
endif
58
59
void
setFocusMode
(QCamera::FocusMode mode)
override
;
60
bool
isFocusModeSupported
(QCamera::FocusMode mode)
const
override
;
61
62
void
setFlashMode
(QCamera::FlashMode mode)
override
;
63
bool
isFlashModeSupported
(QCamera::FlashMode mode)
const
override
;
64
bool
isFlashReady
()
const
override
;
65
66
void
setExposureMode
(
QCamera
::
ExposureMode
)
override
;
67
bool
isExposureModeSupported
(QCamera::ExposureMode mode)
const
override
;
68
void
setExposureCompensation
(
float
)
override
;
69
void
setManualIsoSensitivity
(
int
)
override
;
70
int
isoSensitivity
()
const
override
;
71
void
setManualExposureTime
(
float
)
override
;
72
float
exposureTime
()
const
override
;
73
74
bool
isWhiteBalanceModeSupported
(QCamera::WhiteBalanceMode mode)
const
override
;
75
void
setWhiteBalanceMode
(QCamera::WhiteBalanceMode mode)
override
;
76
void
setColorTemperature
(
int
temperature)
override
;
77
78
private
:
79
QGstreamerCamera(QCamera *camera);
80
81
void
updateCameraProperties();
82
83
#
if
QT_CONFIG
(
linux_v4l
)
84
bool
isV4L2Camera
()
const
;
85
void
initV4L2Controls
();
86
int
setV4L2ColorTemperature
(
int
temperature
);
87
bool
setV4L2Parameter
(
quint32
id
,
qint32
value
);
88
int
getV4L2Parameter
(
quint32
id
)
const
;
89
90
bool
v4l2AutoWhiteBalanceSupported
=
false
;
91
bool
v4l2ColorTemperatureSupported
=
false
;
92
bool
v4l2AutoExposureSupported
=
false
;
93
bool
v4l2ManualExposureSupported
=
false
;
94
qint32
v4l2MinColorTemp
= 5600;
// Daylight...
95
qint32
v4l2MaxColorTemp
= 5600;
96
qint32
v4l2MinExposure
= 0;
97
qint32
v4l2MaxExposure
= 0;
98
qint32
v4l2MinExposureAdjustment
= 0;
99
qint32
v4l2MaxExposureAdjustment
= 0;
100
101
template
<
typename
Functor
>
102
auto
withV4L2DeviceFileDescriptor
(
Functor
&&
f
)
const
103
{
104
using
ReturnType
=
std
::
invoke_result_t
<
Functor
,
int
>;
105
Q_ASSERT
(
isV4L2Camera
());
106
107
if
(
int
gstreamerDeviceFd
=
gstCamera
.
getInt
(
"device-fd"
);
gstreamerDeviceFd
!= -1)
108
return
f
(
gstreamerDeviceFd
);
109
110
auto
v4l2FileDescriptor
=
QUniqueFileDescriptorHandle
{
111
QT_OPEN
(
m_v4l2DevicePath
.
toLocal8Bit
().
constData
(),
O_RDONLY
),
112
};
113
if
(!
v4l2FileDescriptor
) {
114
qWarning
() <<
"Unable to open the camera"
<<
m_v4l2DevicePath
115
<<
"for read to query the parameter info:"
<<
qt_error_string
(
errno
);
116
if
constexpr
(
std
::
is_void_v
<
ReturnType
>)
117
return
;
118
else
119
return
ReturnType
{};
120
}
121
return
f
(
v4l2FileDescriptor
.
get
());
122
}
123
#
endif
124
125
QCameraDevice m_cameraDevice;
126
127
QGstBin
gstCameraBin;
128
QGstElement
gstCamera;
129
QGstElement
gstCapsFilter;
130
QGstElement
gstDecode;
131
QGstElement
gstVideoConvert;
132
QGstElement
gstVideoScale;
133
134
bool
m_active =
false
;
135
QString m_v4l2DevicePath;
136
137
std::optional<QCameraFormat> m_currentCameraFormat;
138
139
template
<
typename
Functor>
140
void
updateCamera(Functor &&f)
141
{
142
QGstPipeline
pipeline = gstVideoConvert.getPipeline();
143
if
(pipeline)
144
pipeline.setState(GstState::GST_STATE_READY);
145
146
gstVideoConvert.sink().modifyPipelineInIdleProbe([&] {
147
f();
148
});
149
150
if
(pipeline)
151
pipeline.setState(GstState::GST_STATE_PLAYING);
152
}
153
};
154
155
class
QGstreamerCustomCamera
:
public
QGstreamerCameraBase
156
{
157
public
:
158
explicit
QGstreamerCustomCamera
(QCamera *);
159
explicit
QGstreamerCustomCamera
(QObject *,
QGstElement
element);
160
161
QGstElement
gstElement
()
const
override
{
return
gstCamera; }
162
163
void
setCamera
(
const
QCameraDevice &)
override
{ }
164
165
bool
isActive
()
const
override
;
166
void
setActive
(
bool
)
override
;
167
168
private
:
169
QGstElement
gstCamera;
170
bool
m_active{};
171
};
172
173
QT_END_NAMESPACE
174
175
#
endif
// QGSTREAMERCAMERACONTROL_H
QGstBin
Definition
qgst_p.h:855
QGstCaps
Definition
qgst_p.h:384
QGstCaps::fromCameraFormat
static QGstCaps fromCameraFormat(const QCameraFormat &format)
Definition
qgst.cpp:545
QGstElement
Definition
qgst_p.h:608
QGstElement::operator=
QGstElement & operator=(QGstElement &&) noexcept=default
QGstElement::operator=
QGstElement & operator=(const QGstElement &)=default
QGstElement::createFromFactory
static QGstElement createFromFactory(const char *factory, const char *name=nullptr)
Definition
qgst.cpp:1017
QGstPipeline
Definition
qgstpipeline_p.h:30
QGstStructureView
Definition
qgst_p.h:347
QGstreamerCameraBase
Definition
qgstreamercamera_p.h:30
QGstreamerCameraBase::gstElement
virtual QGstElement gstElement() const =0
QGstreamerCamera
Definition
qgstreamercamera_p.h:42
QGstreamerCamera::gstElement
QGstElement gstElement() const override
Definition
qgstreamercamera_p.h:54
QGstreamerCamera::setWhiteBalanceMode
void setWhiteBalanceMode(QCamera::WhiteBalanceMode mode) override
Definition
qgstreamercamera.cpp:546
QGstreamerCamera::~QGstreamerCamera
~QGstreamerCamera() override
Definition
qgstreamercamera.cpp:60
QGstreamerCamera::isFocusModeSupported
bool isFocusModeSupported(QCamera::FocusMode mode) const override
Definition
qgstreamercamera.cpp:255
QGstreamerCamera::isActive
bool isActive() const override
Definition
qgstreamercamera.cpp:65
QGstreamerCamera::create
static q23::expected< QPlatformCamera *, QString > create(QCamera *camera)
Definition
qgstreamercamera.cpp:24
QGstreamerCamera::isFlashModeSupported
bool isFlashModeSupported(QCamera::FlashMode mode) const override
Definition
qgstreamercamera.cpp:291
QGstreamerCamera::isExposureModeSupported
bool isExposureModeSupported(QCamera::ExposureMode mode) const override
Definition
qgstreamercamera.cpp:393
QGstreamerCamera::setCameraFormat
bool setCameraFormat(const QCameraFormat &format) override
Definition
qgstreamercamera.cpp:154
QGstreamerCamera::setColorTemperature
void setColorTemperature(int temperature) override
Definition
qgstreamercamera.cpp:595
QGstreamerCamera::setExposureMode
void setExposureMode(QCamera::ExposureMode) override
Definition
qgstreamercamera.cpp:311
QGstreamerCamera::isFlashReady
bool isFlashReady() const override
Definition
qgstreamercamera.cpp:301
QGstreamerCamera::isoSensitivity
int isoSensitivity() const override
Definition
qgstreamercamera.cpp:452
QGstreamerCamera::exposureTime
float exposureTime() const override
Definition
qgstreamercamera.cpp:491
QGstreamerCamera::isWhiteBalanceModeSupported
bool isWhiteBalanceModeSupported(QCamera::WhiteBalanceMode mode) const override
Definition
qgstreamercamera.cpp:508
QGstreamerCamera::setFlashMode
void setFlashMode(QCamera::FlashMode mode) override
Definition
qgstreamercamera.cpp:264
QGstreamerCamera::setFocusMode
void setFocusMode(QCamera::FocusMode mode) override
Definition
qgstreamercamera.cpp:219
QGstreamerCamera::setActive
void setActive(bool active) override
Definition
qgstreamercamera.cpp:70
QGstreamerCamera::setManualIsoSensitivity
void setManualIsoSensitivity(int) override
Definition
qgstreamercamera.cpp:429
QGstreamerCamera::setCamera
void setCamera(const QCameraDevice &camera) override
Definition
qgstreamercamera.cpp:82
QGstreamerCamera::setManualExposureTime
void setManualExposureTime(float) override
Definition
qgstreamercamera.cpp:471
QGstreamerCamera::setExposureCompensation
void setExposureCompensation(float) override
Definition
qgstreamercamera.cpp:409
QGstreamerCustomCamera
Definition
qgstreamercamera_p.h:156
QGstreamerCustomCamera::setActive
void setActive(bool) override
Definition
qgstreamercamera.cpp:753
QGstreamerCustomCamera::setCamera
void setCamera(const QCameraDevice &) override
Definition
qgstreamercamera_p.h:163
QGstreamerCustomCamera::QGstreamerCustomCamera
QGstreamerCustomCamera(QObject *, QGstElement element)
Definition
qgstreamercamera.cpp:743
QGstreamerCustomCamera::gstElement
QGstElement gstElement() const override
Definition
qgstreamercamera_p.h:161
QGstreamerCustomCamera::isActive
bool isActive() const override
Definition
qgstreamercamera.cpp:748
QGstreamerCustomCamera::QGstreamerCustomCamera
QGstreamerCustomCamera(QCamera *)
QGstreamerIntegration
Definition
qgstreamerintegration_p.h:58
QGstreamerIntegration::instance
static QGstreamerIntegration * instance()
Definition
qgstreamerintegration_p.h:63
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtmultimedia
src
plugins
multimedia
gstreamer
mediacapture
qgstreamercamera_p.h
Generated on
for Qt by
1.18.0