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
qpipewire_audiocontextmanager_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
QPIPEWIRE_AUDIOCONTEXTMANAGER_P_H
5
#
define
QPIPEWIRE_AUDIOCONTEXTMANAGER_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
<
QtMultimedia
/
private
/
qpipewire_audiodevicemonitor_p
.
h
>
19
#
include
<
QtMultimedia
/
private
/
qpipewire_registry_support_p
.
h
>
20
#
include
<
QtMultimedia
/
private
/
qpipewire_support_p
.
h
>
21
#
include
<
QtMultimedia
/
private
/
qpipewire_instance_p
.
h
>
22
#
include
<
QtCore
/
qglobal
.
h
>
23
24
#
include
<
pipewire
/
pipewire
.
h
>
25
26
QT_BEGIN_NAMESPACE
27
28
namespace
QtPipeWire
{
29
30
struct
QPipewireAudioStream
;
31
32
class
QAudioContextManager
33
{
34
public
:
35
QAudioContextManager
();
36
~
QAudioContextManager
();
37
38
static
bool
minimumRequirementMet
();
39
40
static
QAudioContextManager
*
instance
();
41
bool
isConnected
()
const
;
42
43
template
<
typename
Closure>
44
static
auto
withEventLoopLock
(Closure &&c)
45
{
46
QAudioContextManager
*self =
instance
(
)
;
47
return
self->m_pwInstance->runWithEventLoopLock(std::forward<Closure>(c));
48
}
49
50
static
QAudioDeviceMonitor
&
deviceMonitor
();
51
52
static
bool
isInPwThreadLoop
();
53
static
pw_loop *
getEventLoop
();
54
55
PwNodeHandle
bindNode
(
ObjectId
);
56
PwMetadataHandle
bindMetadata
(
ObjectId
);
57
58
void
syncRegistry
();
59
60
void
registerStreamReference
(
std
::
shared_ptr
<
QPipewireAudioStream
>);
61
void
unregisterStreamReference
(
const
std::shared_ptr<QPipewireAudioStream> &);
62
63
const
PwCoreConnectionHandle
&
coreConnection
()
const
;
64
65
private
:
66
const
std::shared_ptr<QPipeWireInstance> m_pwInstance;
67
68
// pw_core connection
69
PwCoreConnectionHandle m_coreConnection;
70
71
// device monitor
72
PwRegistryHandle m_registry;
73
spa_hook m_registryListener{};
74
std::unique_ptr<QAudioDeviceMonitor> m_deviceMonitor;
75
76
void
startDeviceMonitor();
77
void
stopDeviceMonitor();
78
static
void
objectAddedCb(
void
*data, uint32_t id, uint32_t permissions,
const
char
*type,
79
uint32_t version,
const
struct
spa_dict *props);
80
static
void
objectRemovedCb(
void
*data, uint32_t id);
81
void
objectAdded(ObjectId id, uint32_t permissions, PipewireRegistryType, uint32_t version,
82
const
spa_dict &props);
83
void
objectRemoved(ObjectId id);
84
85
// default metadata object
86
void
startListenDefaultMetadataObject(ObjectId, uint32_t version);
87
void
stopListenDefaultMetadataObject();
88
struct
MetadataRecord
89
{
90
const
char
*key;
91
const
char
*type;
92
const
char
*value;
93
};
94
95
int
handleDefaultMetadataObjectEvent(ObjectId subject,
const
MetadataRecord &);
96
97
PwMetadataHandle m_defaultMetadataObject;
98
spa_hook m_defaultMetadataObjectListener{};
99
100
QMutex m_activeStreamMutex;
101
std
::
set
<
std
::
shared_ptr
<
QPipewireAudioStream
>>
m_activeStreams
;
102
void
stopActiveStreams();
103
};
104
105
}
// namespace QtPipeWire
106
107
QT_END_NAMESPACE
108
109
#
endif
// QPIPEWIRE_AUDIOCONTEXTMANAGER_P_H
QtPipeWire::QAudioContextManager
Definition
qpipewire_audiocontextmanager_p.h:33
QtPipeWire::QAudioContextManager::minimumRequirementMet
static bool minimumRequirementMet()
Definition
qpipewire_audiocontextmanager.cpp:72
QtPipeWire::QAudioContextManager::bindNode
PwNodeHandle bindNode(ObjectId)
Definition
qpipewire_audiocontextmanager.cpp:102
QtPipeWire::QAudioContextManager::syncRegistry
void syncRegistry()
Definition
qpipewire_audiocontextmanager.cpp:120
QtPipeWire::QAudioContextManager::~QAudioContextManager
~QAudioContextManager()
Definition
qpipewire_audiocontextmanager.cpp:57
QtPipeWire::QAudioContextManager::deviceMonitor
static QAudioDeviceMonitor & deviceMonitor()
Definition
qpipewire_audiocontextmanager.cpp:87
QtPipeWire::QAudioContextManager::instance
static QAudioContextManager * instance()
Definition
qpipewire_audiocontextmanager.cpp:77
QtPipeWire::QAudioContextManager::isConnected
bool isConnected() const
Definition
qpipewire_audiocontextmanager.cpp:82
QtPipeWire::QAudioContextManager::registerStreamReference
void registerStreamReference(std::shared_ptr< QPipewireAudioStream >)
Definition
qpipewire_audiocontextmanager.cpp:136
QtPipeWire::QAudioContextManager::unregisterStreamReference
void unregisterStreamReference(const std::shared_ptr< QPipewireAudioStream > &)
Definition
qpipewire_audiocontextmanager.cpp:142
QtPipeWire::QAudioContextManager::bindMetadata
PwMetadataHandle bindMetadata(ObjectId)
Definition
qpipewire_audiocontextmanager.cpp:111
QtPipeWire::QAudioContextManager::withEventLoopLock
static auto withEventLoopLock(Closure &&c)
Definition
qpipewire_audiocontextmanager_p.h:44
QtPipeWire::QAudioContextManager::QAudioContextManager
QAudioContextManager()
Definition
qpipewire_audiocontextmanager.cpp:37
QtPipeWire::QAudioContextManager::isInPwThreadLoop
static bool isInPwThreadLoop()
Definition
qpipewire_audiocontextmanager.cpp:92
QtPipeWire::QAudioContextManager::getEventLoop
static pw_loop * getEventLoop()
Definition
qpipewire_audiocontextmanager.cpp:97
QtPipeWire::QAudioContextManager::coreConnection
const PwCoreConnectionHandle & coreConnection() const
Definition
qpipewire_audiocontextmanager.cpp:149
QtPipeWire
Definition
qpipewire_async_support.cpp:10
__has_include
#define __has_include(x)
Definition
qcompilerdetection.h:459
pw_check_library_version
bool pw_check_library_version(int major, int minor, int micro)
QtPipeWire::QPipewireAudioStream
Definition
qpipewire_audiostream_p.h:33
qtmultimedia
src
multimedia
pipewire
qpipewire_audiocontextmanager_p.h
Generated on
for Qt by
1.18.0