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_audiostream_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_AUDIOSTREAM_P_H
5
#
define
QPIPEWIRE_AUDIOSTREAM_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
/
qaudiosystem_p
.
h
>
19
#
include
<
QtMultimedia
/
private
/
qpipewire_audiodevicemonitor_p
.
h
>
20
#
include
<
QtMultimedia
/
private
/
qpipewire_support_p
.
h
>
21
#
include
<
QtMultimedia
/
qaudioformat
.
h
>
22
#
include
<
QtCore
/
qglobal
.
h
>
23
24
#
include
<
pipewire
/
stream
.
h
>
25
26
QT_BEGIN_NAMESPACE
27
28
namespace
QtPipeWire
{
29
30
using
QtMultimediaPrivate
::
NativePeriodFrames
;
31
32
struct
QPipewireAudioStream
:
std
::
enable_shared_from_this
<
QPipewireAudioStream
>
33
{
34
protected
:
35
explicit
QPipewireAudioStream
(
const
QAudioFormat &);
36
~
QPipewireAudioStream
();
37
38
Q_DISABLE_COPY_MOVE
(
QPipewireAudioStream
)
39
40
const
QAudioFormat
m_format
;
41
42
enum
class
StreamType
:
uint8_t
43
{
44
Ringbuffer
,
45
Callback
,
46
};
47
48
// stream control
49
void
createStream
(QSpan<spa_dict_item> extraProperties,
50
std::optional<NativePeriodFrames> nativePeriodFrames,
const
char
*streamName,
51
StreamType
=
StreamType
::
Ringbuffer
);
52
bool
connectStream
(ObjectSerial target, spa_direction);
53
void
disconnectStream
();
54
55
void
resetStream
();
56
57
public
:
58
void
suspend
();
59
void
resume
();
60
bool
hasStream
()
const
;
61
62
protected
:
63
// stream callbacks
64
virtual
void
processRingbuffer
() = 0;
65
virtual
void
processCallback
() = 0;
66
virtual
void
stateChanged
(pw_stream_state oldState, pw_stream_state state,
67
const
char
*error) = 0;
68
69
// stream members
70
pw_stream_events
stream_events
{};
71
PwStreamHandle
m_stream
;
72
73
// device observer
74
[[nodiscard]]
bool
registerDeviceObserver
(
ObjectSerial
);
75
void
unregisterDeviceObserver
();
76
virtual
void
handleDeviceRemoved
() = 0;
77
SharedObjectRemoveObserver
m_deviceRemovalObserver
;
78
79
// xrun detector
80
// CAVEAT: has to be called at the beginning of a render callback
81
// streams will have to increment m_totalNumberOfFrames internally
82
void
performXRunDetection
(uint64_t framesPerBuffer)
noexcept
Q_DECL_NONBLOCKING_FUNCTION
;
83
virtual
void
xrunOccurred
(
int
xrunCount) = 0;
84
uint64_t
m_expectedNextTick
{};
85
std
::
atomic_bool
m_skipNextTickDiscontinuity
{
true
};
86
std
::
atomic_int
m_xrunCount
{ 0 };
87
88
// total samples delivered from/sent to the backend
89
void
addFramesHandled
(uint64_t);
90
uint64_t
m_totalNumberOfFrames
{};
91
92
friend
class
QAudioContextManager
;
// to access m_self
93
std
::
shared_ptr
<
QPipewireAudioStream
>
m_self
;
94
95
virtual
void
finalizeStream
() = 0;
96
};
97
98
}
// namespace QtPipeWire
99
100
QT_END_NAMESPACE
101
102
#
endif
QtPipeWire::QAudioContextManager
Definition
qpipewire_audiocontextmanager_p.h:33
QtPipeWire
Definition
qpipewire_async_support.cpp:10
__has_include
#define __has_include(x)
Definition
qcompilerdetection.h:459
PW_KEY_NODE_FORCE_QUANTUM
#define PW_KEY_NODE_FORCE_QUANTUM
Definition
qpipewire_audiostream.cpp:20
QtPipeWire::QPipewireAudioStream
Definition
qpipewire_audiostream_p.h:33
QtPipeWire::QPipewireAudioStream::m_totalNumberOfFrames
uint64_t m_totalNumberOfFrames
Definition
qpipewire_audiostream_p.h:90
QtPipeWire::QPipewireAudioStream::hasStream
bool hasStream() const
Definition
qpipewire_audiostream.cpp:180
QtPipeWire::QPipewireAudioStream::m_skipNextTickDiscontinuity
std::atomic_bool m_skipNextTickDiscontinuity
Definition
qpipewire_audiostream_p.h:85
QtPipeWire::QPipewireAudioStream::createStream
void createStream(QSpan< spa_dict_item > extraProperties, std::optional< NativePeriodFrames > nativePeriodFrames, const char *streamName, StreamType=StreamType::Ringbuffer)
Definition
qpipewire_audiostream.cpp:41
QtPipeWire::QPipewireAudioStream::stream_events
pw_stream_events stream_events
Definition
qpipewire_audiostream_p.h:70
QtPipeWire::QPipewireAudioStream::suspend
void suspend()
Definition
qpipewire_audiostream.cpp:130
QtPipeWire::QPipewireAudioStream::resetStream
void resetStream()
Definition
qpipewire_audiostream.cpp:163
QtPipeWire::QPipewireAudioStream::unregisterDeviceObserver
void unregisterDeviceObserver()
Definition
qpipewire_audiostream.cpp:196
QtPipeWire::QPipewireAudioStream::m_deviceRemovalObserver
SharedObjectRemoveObserver m_deviceRemovalObserver
Definition
qpipewire_audiostream_p.h:77
QtPipeWire::QPipewireAudioStream::finalizeStream
virtual void finalizeStream()=0
QtPipeWire::QPipewireAudioStream::m_stream
PwStreamHandle m_stream
Definition
qpipewire_audiostream_p.h:71
QtPipeWire::QPipewireAudioStream::m_format
const QAudioFormat m_format
Definition
qpipewire_audiostream_p.h:40
QtPipeWire::QPipewireAudioStream::StreamType
StreamType
Definition
qpipewire_audiostream_p.h:43
QtPipeWire::QPipewireAudioStream::StreamType::Callback
@ Callback
Definition
qpipewire_audiostream_p.h:45
QtPipeWire::QPipewireAudioStream::StreamType::Ringbuffer
@ Ringbuffer
Definition
qpipewire_audiostream_p.h:44
QtPipeWire::QPipewireAudioStream::performXRunDetection
void performXRunDetection(uint64_t framesPerBuffer) noexcept Q_DECL_NONBLOCKING_FUNCTION
Definition
qpipewire_audiostream.cpp:203
QtPipeWire::QPipewireAudioStream::registerDeviceObserver
bool registerDeviceObserver(ObjectSerial)
Definition
qpipewire_audiostream.cpp:185
QtPipeWire::QPipewireAudioStream::processCallback
virtual void processCallback()=0
QtPipeWire::QPipewireAudioStream::disconnectStream
void disconnectStream()
Definition
qpipewire_audiostream.cpp:149
QtPipeWire::QPipewireAudioStream::QPipewireAudioStream
QPipewireAudioStream(const QAudioFormat &)
Definition
qpipewire_audiostream.cpp:35
QtPipeWire::QPipewireAudioStream::m_xrunCount
std::atomic_int m_xrunCount
Definition
qpipewire_audiostream_p.h:86
QtPipeWire::QPipewireAudioStream::stateChanged
virtual void stateChanged(pw_stream_state oldState, pw_stream_state state, const char *error)=0
QtPipeWire::QPipewireAudioStream::processRingbuffer
virtual void processRingbuffer()=0
QtPipeWire::QPipewireAudioStream::m_self
std::shared_ptr< QPipewireAudioStream > m_self
Definition
qpipewire_audiostream_p.h:93
QtPipeWire::QPipewireAudioStream::xrunOccurred
virtual void xrunOccurred(int xrunCount)=0
QtPipeWire::QPipewireAudioStream::addFramesHandled
void addFramesHandled(uint64_t)
Definition
qpipewire_audiostream.cpp:248
QtPipeWire::QPipewireAudioStream::connectStream
bool connectStream(ObjectSerial target, spa_direction)
Definition
qpipewire_audiostream.cpp:91
QtPipeWire::QPipewireAudioStream::m_expectedNextTick
uint64_t m_expectedNextTick
Definition
qpipewire_audiostream_p.h:84
QtPipeWire::QPipewireAudioStream::handleDeviceRemoved
virtual void handleDeviceRemoved()=0
QtPipeWire::QPipewireAudioStream::resume
void resume()
Definition
qpipewire_audiostream.cpp:139
QtPipeWire::QPipewireAudioStream::~QPipewireAudioStream
~QPipewireAudioStream()
qtmultimedia
src
multimedia
pipewire
qpipewire_audiostream_p.h
Generated on
for Qt by
1.18.0