Teaspeak-Server/server/src/client/web/SampleHandler.h

42 lines
1.2 KiB
C++

#pragma once
#include <cstdlib>
#include <deque>
#include <memory>
#include <ThreadPool/Mutex.h>
namespace ts {
namespace sound {
struct SampleSegment {
float* samples;
size_t channelCount;
size_t sampleSize;
bool full = false;
SampleSegment(){}
~SampleSegment(){
if(samples) free(samples);
}
};
class SampleConverter {
public:
SampleConverter(size_t channelCount, size_t segmentSize);
~SampleConverter();
void pushSamples(float* pcm, size_t size);
std::shared_ptr<SampleSegment> nextSegment();
inline bool hasNext(){
threads::MutexLock l(this->segmentLock);
return !this->segments.empty();
}
size_t getSegmentSize() { return this->segmentSize; }
private:
size_t channelCount = 1;
size_t segmentSize = 0;
threads::Mutex segmentLock;
std::deque<std::shared_ptr<SampleSegment>> segments;
};
}
}