20 #ifndef SOUND_LIVESOUND_H
21 #define SOUND_LIVESOUND_H
64 _buffers.push_back(std::move(buf));
80 size_t copy(std::uint8_t* to,
size_t bytes) {
81 assert(_consumed >= _in_point);
83 size_t bytes_remaining = bytes;
85 for (; _index < _buffers.size(); ++_index) {
88 size_t to_copy = std::min(bytes_remaining, buffer.
size() - _pos);
90 std::copy(buffer.
data() + _pos, buffer.
data() + _pos + to_copy, to);
92 bytes_remaining -= to_copy;
95 if (_pos == buffer.
size()) {
101 if (bytes_remaining == 0) {
106 size_t written = bytes - bytes_remaining;
107 _consumed += written;
114 std::uint64_t bytes = 0;
116 bytes += buffer.size();
124 return std::max<uint64_t>(_consumed, _in_point);
128 void consumeInPoint() {
129 if (_consumed >= _in_point) {
132 size_t inPoint = _in_point;
135 size_t advance = std::min(inPoint, buffer.size());
136 if (advance == buffer.size()) {
144 _consumed = _in_point;
147 std::vector<SimpleBuffer> _buffers;
153 std::uint64_t _consumed;
185 virtual bool eof()
const = 0;
197 return _samplesFetched;
209 _decodedBuffers.
append(std::move(data));
216 const unsigned int dds = _decodedBuffers.
countBytes();
222 assert(!(bytesAhead % 2));
224 const unsigned int samplesAhead = bytesAhead / 2;
234 virtual size_t checkEarlierEnd(
size_t left,
size_t)
const {
239 unsigned int fetchSamples(std::int16_t* to,
unsigned int nSamples);
244 virtual bool decodingCompleted()
const = 0;
247 unsigned long _samplesFetched;
249 std::unique_ptr<media::AudioDecoder> _decoder;
252 Buffers _decodedBuffers;
260 #endif // SOUND_EMBEDSOUNDINST_H
Buffers(size_t in_point)
Definition: LiveSound.h:51
void append(SimpleBuffer buf)
Append a buffer of data to be read by the consumer later.
Definition: LiveSound.h:63
std::uint64_t playbackPosition() const
Definition: LiveSound.h:200
std::uint64_t countBytes() const
Definition: LiveSound.h:112
Buffers & operator=(const Buffers &)=delete
Instance of a defined sound (LiveSoundData)
Definition: LiveSound.h:162
LiveSound(media::MediaHandler &mh, const media::SoundInfo &info, size_t inPoint)
Create an embedded sound instance.
Definition: LiveSound.cpp:33
SimpleBuffer data
Definition: LocalConnection_as.cpp:151
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:40
Definition: LiveSound.h:49
unsigned int samplesFetched() const
How many samples have been fetched since the beginning.
Definition: LiveSound.h:196
void restart()
Definition: LiveSound.h:68
std::uint8_t * data()
Get a pointer to start of data. May be NULL if size==0.
Definition: SimpleBuffer.h:92
void restart()
Start from the beginning again.
Definition: LiveSound.h:188
virtual bool eof() const =0
True if there is no more data ever.
size_t copy(std::uint8_t *to, size_t bytes)
Copy up to the given number of bytes to the given buffer.
Definition: LiveSound.h:80
A simple buffer of bytes.
Definition: SimpleBuffer.h:38
media::AudioDecoder & decoder() const
Definition: LiveSound.h:204
size_t size() const
Return size of the buffer.
Definition: SimpleBuffer.h:86
std::uint64_t consumed() const
Definition: LiveSound.h:122
virtual bool moreData()=0
Called when more decoded sound data is required.
unsigned int decodedSamplesAhead() const
Definition: LiveSound.h:214
void appendDecodedData(SimpleBuffer data)
Definition: LiveSound.h:208