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
qwindowsaudiosource_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
//
5
// W A R N I N G
6
// -------------
7
//
8
// This file is not part of the Qt API. It exists for the convenience
9
// of other Qt classes. This header file may change from version to
10
// version without notice, or even be removed.
11
//
12
// We mean it.
13
//
14
15
#
ifndef
QWINDOWSAUDIOSOURCE_H
16
#
define
QWINDOWSAUDIOSOURCE_H
17
18
#
include
<
QtCore
/
qthread
.
h
>
19
#
include
<
QtCore
/
qtclasshelpermacros
.
h
>
20
#
include
<
QtCore
/
private
/
qcomptr_p
.
h
>
21
#
include
<
QtMultimedia
/
private
/
qaudiosystem_p
.
h
>
22
#
include
<
QtMultimedia
/
private
/
qaudiosystem_platform_stream_support_p
.
h
>
23
#
include
<
QtMultimedia
/
private
/
qaudio_platform_implementation_support_p
.
h
>
24
#
include
<
QtMultimedia
/
private
/
qwindowsaudioutils_p
.
h
>
25
#
include
<
QtMultimedia
/
private
/
qwindowsresampler_p
.
h
>
26
27
#
include
<
atomic
>
28
#
include
<
memory
>
29
#
include
<
memory_resource
>
30
31
struct
IMMDevice;
32
struct
IAudioCaptureClient;
33
34
QT_BEGIN_NAMESPACE
35
36
namespace
QtWASAPI
{
37
38
class
QWindowsAudioSource;
39
using
namespace
QtMultimediaPrivate
;
40
41
struct
QWASAPIAudioSourceStream
final
:
std
::
enable_shared_from_this
<
QWASAPIAudioSourceStream
>,
42
QPlatformAudioSourceStream
43
{
44
using
SampleFormat
=
QAudioFormat
::
SampleFormat
;
45
using
SourceType
= QWindowsAudioSource;
46
47
QWASAPIAudioSourceStream
(
QAudioDevice
,
const
QAudioFormat &,
48
std::optional<qsizetype> ringbufferSize, QWindowsAudioSource *parent,
49
float
volume, std::optional<NativePeriodFrames> nativePeriodFrames);
50
Q_DISABLE_COPY_MOVE
(
QWASAPIAudioSourceStream
)
51
~
QWASAPIAudioSourceStream
();
52
53
using
QPlatformAudioSourceStream
::
bytesReady
;
54
using
QPlatformAudioSourceStream
::
deviceIsRingbufferReader
;
55
using
QPlatformAudioSourceStream
::
processedDuration
;
56
using
QPlatformAudioSourceStream
::
ringbufferSizeInBytes
;
57
using
QPlatformAudioSourceStream
::
setVolume
;
58
59
bool
open
() {
return
true
; }
60
bool
start
(QIODevice *);
61
QIODevice
*
start
();
62
bool
start
(AudioCallback &&);
63
64
void
suspend
();
65
void
resume
();
66
void
stop
(
ShutdownPolicy
);
67
68
void
updateStreamIdle
(
bool
)
override
;
69
70
private
:
71
bool
openAudioClient(ComPtr<IMMDevice> device);
72
bool
startAudioClient();
73
74
template
<
typename
Functor>
75
bool
visitAudioClientBuffer(Functor &&);
76
77
void
runProcessLoop();
78
bool
processRingbuffer()
noexcept
Q_DECL_NONBLOCKING_FUNCTION
;
79
bool
processCallback()
noexcept
Q_DECL_NONBLOCKING_FUNCTION
;
80
void
handleAudioClientError();
81
void
joinWorkerThread();
82
83
ComPtr<IAudioClient3> m_audioClient;
84
ComPtr<IAudioCaptureClient> m_captureClient;
85
86
QWMF::reference_time m_periodSize;
87
qsizetype m_audioClientFrames;
88
89
std
::atomic_bool m_suspended{};
90
std::atomic<ShutdownPolicy> m_shutdownPolicy{
ShutdownPolicy
::
DiscardRingbuffer
};
91
QAutoResetEvent m_ringbufferDrained;
92
93
const
QUniqueWin32NullHandle m_audioClientEventHandle;
94
std::unique_ptr<QThread> m_workerThread;
95
96
std::optional<AudioCallback> m_audioCallback;
97
QWindowsAudioSource *m_parent;
98
99
QAudioFormat m_hostFormat;
100
std::unique_ptr<std::pmr::memory_resource> m_memoryResource;
101
std::unique_ptr<QWindowsResampler> m_resampler;
102
};
103
104
///////////////////////////////////////////////////////////////////////////////////////////////////
105
106
class
QWindowsAudioSource
final
107
:
public
QPlatformAudioSourceImplementationWithCallback<QWASAPIAudioSourceStream,
108
QWindowsAudioSource>
109
{
110
using
BaseClass = QPlatformAudioSourceImplementationWithCallback<QWASAPIAudioSourceStream,
111
QWindowsAudioSource>;
112
113
public
:
114
QWindowsAudioSource
(
QAudioDevice
,
const
QAudioFormat &, QObject *parent);
115
~
QWindowsAudioSource
()
override
;
116
};
117
118
}
// namespace QtWASAPI
119
120
QT_END_NAMESPACE
121
122
#
endif
QtWASAPI::QWindowsAudioSource::~QWindowsAudioSource
~QWindowsAudioSource() override
QtWASAPI::QWindowsAudioSource::QWindowsAudioSource
QWindowsAudioSource(QAudioDevice, const QAudioFormat &, QObject *parent)
Definition
qwindowsaudiosource.cpp:340
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtWASAPI
Definition
qwindowsaudiodevice_p.h:34
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
QtWASAPI::QWASAPIAudioSourceStream::SampleFormat
QAudioFormat::SampleFormat SampleFormat
Definition
qwindowsaudiosource_p.h:44
QtWASAPI::QWASAPIAudioSourceStream::stop
void stop(ShutdownPolicy)
Definition
qwindowsaudiosource.cpp:151
QtWASAPI::QWASAPIAudioSourceStream::suspend
void suspend()
Definition
qwindowsaudiosource.cpp:139
QtWASAPI::QWASAPIAudioSourceStream::SourceType
QWindowsAudioSource SourceType
Definition
qwindowsaudiosource_p.h:45
QtWASAPI::QWASAPIAudioSourceStream::resume
void resume()
Definition
qwindowsaudiosource.cpp:145
QtWASAPI::QWASAPIAudioSourceStream::start
bool start(QIODevice *)
Definition
qwindowsaudiosource.cpp:87
QtWASAPI::QWASAPIAudioSourceStream::open
bool open()
Definition
qwindowsaudiosource_p.h:59
QtWASAPI::QWASAPIAudioSourceStream::updateStreamIdle
void updateStreamIdle(bool) override
Definition
qwindowsaudiosource.cpp:168
QtWASAPI::QWASAPIAudioSourceStream::start
bool start(AudioCallback &&)
Definition
qwindowsaudiosource.cpp:124
QtWASAPI::QWASAPIAudioSourceStream::start
QIODevice * start()
Definition
qwindowsaudiosource.cpp:103
QtWASAPI::QWASAPIAudioSourceStream::QWASAPIAudioSourceStream
QWASAPIAudioSourceStream(QAudioDevice, const QAudioFormat &, std::optional< qsizetype > ringbufferSize, QWindowsAudioSource *parent, float volume, std::optional< NativePeriodFrames > nativePeriodFrames)
Definition
qwindowsaudiosource.cpp:68
qtmultimedia
src
multimedia
windows
qwindowsaudiosource_p.h
Generated on
for Qt by
1.18.0