arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Concurrency
SynchronizedStream.h
Go to the documentation of this file.
1
#pragma once
2
#include "
AudioTools/CoreAudio/Buffers.h
"
3
#include "
LockGuard.h
"
4
#include "
Mutex.h
"
5
#include "Stream.h"
6
7
namespace
audio_tools
{
8
18
19
class
SynchronizedStream
:
public
Stream
{
20
public
:
21
SynchronizedStream
(
Stream
&stream,
MutexBase
&mutex) {
22
p_stream
= &stream;
23
p_mutex
= &mutex;
24
}
25
26
// reads a single value
27
int
read
()
override
{
28
if
(
read_buffer
.isEmpty()) {
29
LockGuard
guard(
p_mutex
);
30
p_stream
->readBytes(
read_buffer
.address(),
read_buffer
.size());
31
}
32
return
read_buffer
.read();
33
}
34
35
// peeks the actual entry from the buffer
36
int
peek
()
override
{
37
LockGuard
guard(
p_mutex
);
38
return
p_stream
->peek();
39
}
40
41
// write add an entry to the buffer
42
size_t
write
(uint8_t data)
override
{
43
write_buffer
.write(data);
44
if
(
write_buffer
.isFull()) {
45
LockGuard
guard(
p_mutex
);
46
size_t
written =
p_stream
->write((
const
uint8_t *)
write_buffer
.data(),
47
write_buffer
.size());
48
assert
(written ==
write_buffer
.size());
49
write_buffer
.reset();
50
}
51
return
1;
52
}
53
54
// provides the number of entries that are available to read
55
int
available
()
override
{
56
LockGuard
guard(
p_mutex
);
57
return
p_stream
->available();
58
}
59
60
// provides the number of entries that are available to write
61
int
availableForWrite
()
override
{
62
LockGuard
guard(
p_mutex
);
63
return
p_stream
->availableForWrite();
64
}
65
67
void
setBufferSize
(
int
size) {
68
read_buffer
.resize(size);
69
write_buffer
.resize(size);
70
}
71
72
protected
:
73
Stream
*
p_stream
=
nullptr
;
74
MutexBase
*
p_mutex
=
nullptr
;
75
SingleBuffer<uint8_t>
read_buffer
;
76
SingleBuffer<uint8_t>
write_buffer
;
77
};
78
79
}
// namespace audio_tools
Buffers.h
assert
#define assert(T)
LockGuard.h
Mutex.h
audio_tools::LockGuard
RAII implementaion using a Mutex: Only a few microcontrollers provide lock guards,...
Definition
LockGuard.h:17
audio_tools::MutexBase
Empty Mutex implementation which does nothing.
Definition
Mutex.h:15
audio_tools::SingleBuffer
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition
Buffers.h:194
audio_tools::Stream
Definition
CodecOpusOgg.h:137
audio_tools::SynchronizedStream::write_buffer
SingleBuffer< uint8_t > write_buffer
Definition
SynchronizedStream.h:76
audio_tools::SynchronizedStream::p_mutex
MutexBase * p_mutex
Definition
SynchronizedStream.h:74
audio_tools::SynchronizedStream::peek
int peek() override
Definition
SynchronizedStream.h:36
audio_tools::SynchronizedStream::available
int available() override
Definition
SynchronizedStream.h:55
audio_tools::SynchronizedStream::read_buffer
SingleBuffer< uint8_t > read_buffer
Definition
SynchronizedStream.h:75
audio_tools::SynchronizedStream::p_stream
Stream * p_stream
Definition
SynchronizedStream.h:73
audio_tools::SynchronizedStream::availableForWrite
int availableForWrite() override
Definition
SynchronizedStream.h:61
audio_tools::SynchronizedStream::read
int read() override
Definition
SynchronizedStream.h:27
audio_tools::SynchronizedStream::setBufferSize
void setBufferSize(int size)
Defines the size of the internal buffers.
Definition
SynchronizedStream.h:67
audio_tools::SynchronizedStream::SynchronizedStream
SynchronizedStream(Stream &stream, MutexBase &mutex)
Definition
SynchronizedStream.h:21
audio_tools::SynchronizedStream::write
size_t write(uint8_t data) override
Definition
SynchronizedStream.h:42
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition
LMSEchoCancellationStream.h:6
Generated by
1.15.0