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_audiosource_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_AUDIOSOURCE_P_H
5
#
define
QPIPEWIRE_AUDIOSOURCE_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
/
qaudio_platform_implementation_support_p
.
h
>
19
#
include
<
QtMultimedia
/
private
/
qaudiosystem_p
.
h
>
20
#
include
<
QtMultimedia
/
private
/
qaudiosystem_platform_stream_support_p
.
h
>
21
#
include
<
QtMultimedia
/
private
/
qpipewire_audiostream_p
.
h
>
22
#
include
<
QtCore
/
qsemaphore
.
h
>
23
#
include
<
QtCore
/
qtclasshelpermacros
.
h
>
24
25
QT_BEGIN_NAMESPACE
26
27
namespace
QtPipeWire
{
28
29
using
namespace
QtMultimediaPrivate
;
30
31
class
QPipewireAudioSource;
32
33
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
34
35
// LATER:
36
// ideally the ringbuffer should fill a buffer that can grow via a worker thread on which we can
37
// allocate.
38
struct
QPipewireAudioSourceStream
final
:
QPipewireAudioStream
,
QPlatformAudioSourceStream
39
{
40
using
SourceType
= QPipewireAudioSource;
41
using
SampleFormat
=
QAudioFormat
::
SampleFormat
;
42
43
QPipewireAudioSourceStream
(
QAudioDevice
,
const
QAudioFormat &,
44
std::optional<qsizetype> ringbufferSize,
45
QPipewireAudioSource *parent,
float
volume,
46
std::optional<NativePeriodFrames> nativePeriodFrames);
47
Q_DISABLE_COPY_MOVE
(
QPipewireAudioSourceStream
)
48
~
QPipewireAudioSourceStream
();
49
50
bool
open
() {
return
true
; }
51
bool
start
(QIODevice *device);
52
QIODevice
*
start
();
53
bool
start
(AudioCallback &&);
54
void
stop
(
ShutdownPolicy
);
55
56
using
QPlatformAudioSourceStream
::
bytesReady
;
57
using
QPlatformAudioSourceStream
::
deviceIsRingbufferReader
;
58
using
QPlatformAudioSourceStream
::
processedDuration
;
59
using
QPlatformAudioSourceStream
::
ringbufferSizeInBytes
;
60
using
QPlatformAudioSourceStream
::
setVolume
;
61
62
void
updateStreamIdle
(
bool
idle)
override
;
63
64
private
:
65
void
createStream(QPipewireAudioStream::StreamType);
66
std::optional<ObjectSerial> findSourceNodeSerial();
67
68
using
QPlatformAudioSourceStream
::
m_format
;
69
70
// QPipewireAudioSourceStream overrides
71
void
processRingbuffer
()
noexcept
Q_DECL_NONBLOCKING_FUNCTION
override
;
72
void
processCallback
()
noexcept
Q_DECL_NONBLOCKING_FUNCTION
override
;
73
void
handleDeviceRemoved
()
override
;
74
void
stateChanged
(pw_stream_state old, pw_stream_state state,
const
char
*error)
override
;
75
void
finalizeStream
()
override
;
76
77
void
disconnectStream();
78
79
QSemaphore m_streamDisconnected;
80
81
// xrun detection
82
void
xrunOccurred
(
int
/*xrunCount*/
)
override
{ m_xrunOccurred.set(); }
83
QtPrivate::QAutoResetEvent m_xrunOccurred;
84
QMetaObject::Connection m_xrunNotification;
85
86
std::optional<AudioCallback> m_audioCallback;
87
88
QPipewireAudioSource *m_parent;
89
};
90
91
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
92
93
class
QPipewireAudioSource
final
94
:
public
QPlatformAudioSourceImplementationWithCallback<QPipewireAudioSourceStream,
95
QPipewireAudioSource>
96
{
97
using
BaseClass = QPlatformAudioSourceImplementationWithCallback<QPipewireAudioSourceStream,
98
QPipewireAudioSource>;
99
100
public
:
101
QPipewireAudioSource
(
QAudioDevice
,
const
QAudioFormat &, QObject *parent);
102
~
QPipewireAudioSource
()
override
;
103
104
void
reportXRuns
(
int
);
105
};
106
107
}
// namespace QtPipeWire
108
109
QT_END_NAMESPACE
110
111
#
endif
QtPipeWire::QPipewireAudioSource::~QPipewireAudioSource
~QPipewireAudioSource() override
QtPipeWire::QPipewireAudioSource::QPipewireAudioSource
QPipewireAudioSource(QAudioDevice, const QAudioFormat &, QObject *parent)
Definition
qpipewire_audiosource.cpp:276
QtPipeWire::QPipewireAudioSource::reportXRuns
void reportXRuns(int)
Definition
qpipewire_audiosource.cpp:285
QtPipeWire
Definition
qpipewire_async_support.cpp:10
QtPipeWire::QPipewireAudioSourceStream::start
bool start(QIODevice *device)
Definition
qpipewire_audiosource.cpp:56
QtPipeWire::QPipewireAudioSourceStream::finalizeStream
void finalizeStream() override
Definition
qpipewire_audiosource.cpp:186
QtPipeWire::QPipewireAudioSourceStream::stop
void stop(ShutdownPolicy)
Definition
qpipewire_audiosource.cpp:119
QtPipeWire::QPipewireAudioSourceStream::handleDeviceRemoved
void handleDeviceRemoved() override
Definition
qpipewire_audiosource.cpp:246
QtPipeWire::QPipewireAudioSourceStream::start
bool start(AudioCallback &&)
Definition
qpipewire_audiosource.cpp:95
QtPipeWire::QPipewireAudioSourceStream::updateStreamIdle
void updateStreamIdle(bool idle) override
Definition
qpipewire_audiosource.cpp:140
QtPipeWire::QPipewireAudioSourceStream::processCallback
void processCallback() noexcept Q_DECL_NONBLOCKING_FUNCTION override
Definition
qpipewire_audiosource.cpp:219
QtPipeWire::QPipewireAudioSourceStream::xrunOccurred
void xrunOccurred(int) override
Definition
qpipewire_audiosource_p.h:82
QtPipeWire::QPipewireAudioSourceStream::SampleFormat
QAudioFormat::SampleFormat SampleFormat
Definition
qpipewire_audiosource_p.h:41
QtPipeWire::QPipewireAudioSourceStream::open
bool open()
Definition
qpipewire_audiosource_p.h:50
QtPipeWire::QPipewireAudioSourceStream::stateChanged
void stateChanged(pw_stream_state old, pw_stream_state state, const char *error) override
Definition
qpipewire_audiosource.cpp:256
QtPipeWire::QPipewireAudioSourceStream::start
QIODevice * start()
Definition
qpipewire_audiosource.cpp:84
QtPipeWire::QPipewireAudioSourceStream::processRingbuffer
void processRingbuffer() noexcept Q_DECL_NONBLOCKING_FUNCTION override
Definition
qpipewire_audiosource.cpp:191
QtPipeWire::QPipewireAudioSourceStream::QPipewireAudioSourceStream
QPipewireAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QPipewireAudioSource *parent, float volume, std::optional< NativePeriodFrames > nativePeriodFrames)
Definition
qpipewire_audiosource.cpp:23
QtPipeWire::QPipewireAudioSourceStream::SourceType
QPipewireAudioSource SourceType
Definition
qpipewire_audiosource_p.h:40
qtmultimedia
src
multimedia
pipewire
qpipewire_audiosource_p.h
Generated on
for Qt by
1.18.0