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
qlibcamera_instance.cpp
Go to the documentation of this file.
1
// Copyright (C) 2026 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
#
include
"qlibcamera_instance_p.h"
5
#
include
"qlibcameralogging_p.h"
6
7
#
include
<
QtCore
/
qglobalstatic
.
h
>
8
#
include
<
QtCore
/
qmetaobject
.
h
>
9
#
include
<
QtCore
/
qmutex
.
h
>
10
#
include
<
QtCore
/
private
/
qsystemerror_p
.
h
>
11
12
#
include
<
libcamera
/
base
/
signal
.
h
>
13
#
include
<
libcamera
/
camera
.
h
>
14
#
include
<
libcamera
/
camera_manager
.
h
>
15
16
#
include
<
mutex
>
17
18
QT_BEGIN_NAMESPACE
19
20
Q_LOGGING_CATEGORY
(lcLibCamera,
"qt.multimedia.libcamera"
)
21
22
namespace
QLibCamera {
23
24
using
namespace
libcamera
;
25
26
namespace
{
27
28
struct
InstanceHolder
29
{
30
QMutex mutex;
31
std
::weak_ptr<
QLibCameraInstance
> instance;
32
};
33
34
Q_GLOBAL_STATIC(InstanceHolder, s_libCameraInstance)
35
36
}
// namespace
37
38
QLibCameraInstance::QLibCameraInstance() : m_manager(std::make_unique<CameraManager>())
39
{
40
const
int
startResult = m_manager->start();
41
m_started = startResult == 0;
42
if
(!m_started) {
43
qCWarning(lcLibCamera) <<
"libcamera::CameraManager::start() failed:"
44
<< QSystemError::stdString(-startResult);
45
return
;
46
}
47
48
m_manager->cameraAdded.connect(
this
, [
this
](std::shared_ptr<Camera> camera) {
49
// called on libcamera thread
50
const
QString id = QString::fromStdString(camera->id());
51
QMetaObject::invokeMethod(
this
, [
this
, id] {
52
Q_EMIT cameraAdded(id);
53
}, Qt::QueuedConnection);
54
});
55
m_manager->cameraRemoved.connect(
this
, [
this
](std::shared_ptr<Camera> camera) {
56
// called on libcamera thread
57
const
QString id = QString::fromStdString(camera->id());
58
QMetaObject::invokeMethod(
this
, [
this
, id] {
59
Q_EMIT cameraRemoved(id);
60
}, Qt::QueuedConnection);
61
});
62
63
qCDebug(lcLibCamera) <<
"libcamera"
<< CameraManager::version().c_str() <<
"started,"
64
<<
int
(m_manager->cameras().size()) <<
"camera(s) found"
;
65
}
66
67
QLibCameraInstance::~QLibCameraInstance()
68
{
69
if
(m_started)
70
m_manager->stop();
71
}
72
73
std::shared_ptr<QLibCameraInstance> QLibCameraInstance::instance()
74
{
75
std::lock_guard guard{ s_libCameraInstance->mutex };
76
std::shared_ptr<QLibCameraInstance> ret = s_libCameraInstance->instance.lock();
77
if
(!ret) {
78
ret = std::shared_ptr<QLibCameraInstance>(
new
QLibCameraInstance);
79
if
(!ret->m_started)
80
return
nullptr
;
// CameraManager::start() failed
81
82
s_libCameraInstance->instance = ret;
83
}
84
return
ret;
85
}
86
87
std::shared_ptr<Camera> QLibCameraInstance::get(
const
QString &id)
const
88
{
89
return
m_manager->get(id.toStdString());
90
}
91
92
}
// namespace QLibCamera
93
94
QT_END_NAMESPACE
95
96
#
include
"moc_qlibcamera_instance_p.cpp"
QLibCamera::QLibCameraInstance
Definition
qlibcamera_instance_p.h:32
libcamera
Definition
qlibcamera_camera_p.h:27
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
Q_LOGGING_CATEGORY
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
qtmultimedia
src
plugins
libcamera
qlibcamera_instance.cpp
Generated on
for Qt by
1.18.0