Audaspace
1.10.0
A high level audio library.
Toggle main menu visibility
Loading...
Searching...
No Matches
pipewire
PipeWireDevice.h
Go to the documentation of this file.
1
/*******************************************************************************
2
* Copyright 2009-2024 Jörg Müller
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
******************************************************************************/
16
17
#pragma once
18
19
#ifdef PIPEWIRE_PLUGIN
20
#define AUD_BUILD_PLUGIN
21
#endif
22
28
29
#include <string>
30
31
#include <pipewire/pipewire.h>
32
33
#include "
devices/MixingThreadDevice.h
"
34
35
AUD_NAMESPACE_BEGIN
36
40
class
AUD_PLUGIN_API
PipeWireDevice :
public
MixingThreadDevice
41
{
42
private
:
43
pw_stream* m_stream;
44
pw_thread_loop* m_thread;
45
std::unique_ptr<pw_stream_events> m_events;
46
bool
m_active{
false
};
47
49
bool
m_getSynchronizerStartTime{
false
};
50
int64_t m_synchronizerStartTime{0};
51
double
m_synchronizerStartPosition{0.0};
52
53
AUD_LOCAL
static
void
handleStateChanged(
void
* device_ptr,
enum
pw_stream_state old,
enum
pw_stream_state state,
const
char
* error);
54
59
AUD_LOCAL
static
void
mixAudioBuffer(
void
* device_ptr);
60
61
// delete copy constructor and operator=
62
PipeWireDevice(
const
PipeWireDevice&) =
delete
;
63
PipeWireDevice& operator=(
const
PipeWireDevice&) =
delete
;
64
65
protected
:
66
void
preMixingWork
(
bool
playing
);
67
virtual
void
playing
(
bool
playing
);
68
69
public
:
77
PipeWireDevice
(
const
std::string& name,
DeviceSpecs
specs,
int
buffersize =
AUD_DEFAULT_BUFFER_SIZE
);
78
82
virtual
~PipeWireDevice
();
83
84
virtual
void
seekSynchronizer(
double
time);
85
virtual
double
getSynchronizerPosition();
86
virtual
void
playSynchronizer();
87
virtual
void
stopSynchronizer();
88
92
static
void
registerPlugin
();
93
};
94
95
AUD_NAMESPACE_END
AUD_DEFAULT_BUFFER_SIZE
#define AUD_DEFAULT_BUFFER_SIZE
The default playback buffer size of a device.
Definition
Audaspace.h:103
AUD_NAMESPACE_END
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition
Audaspace.h:119
AUD_LOCAL
#define AUD_LOCAL
Used for hiding symbols from export in the shared library.
Definition
Audaspace.h:80
AUD_NAMESPACE_BEGIN
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition
Audaspace.h:116
AUD_PLUGIN_API
#define AUD_PLUGIN_API
Used for exporting symbols in the shared library.
Definition
Audaspace.h:94
MixingThreadDevice.h
The MixingThreadDevice class.
PipeWireDevice::PipeWireDevice
PipeWireDevice(const std::string &name, DeviceSpecs specs, int buffersize=AUD_DEFAULT_BUFFER_SIZE)
Opens the PipeWire audio device for playback.
PipeWireDevice::registerPlugin
static void registerPlugin()
Registers this plugin.
PipeWireDevice::~PipeWireDevice
virtual ~PipeWireDevice()
Closes the PipeWire audio device.
PipeWireDevice::playing
virtual void playing(bool playing)
This function tells the device, to start or pause playback.
PipeWireDevice::preMixingWork
void preMixingWork(bool playing)
Called every iteration in the mixing thread before mixing.
DeviceSpecs
Specification of a sound device.
Definition
Specification.h:126
Generated by
1.17.0