11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
21PROMEKI_NAMESPACE_BEGIN
114class AudioDataEncoder {
117 static constexpr uint32_t SyncBits = 4;
119 static constexpr uint32_t PayloadBits = 64;
121 static constexpr uint32_t CrcBits = 8;
123 static constexpr uint32_t BitsPerPacket = SyncBits + PayloadBits + CrcBits;
133 static constexpr uint8_t SyncNibble = 0xAu;
144 static constexpr uint32_t DefaultSamplesPerBit = 8;
154 static constexpr uint32_t MinSamplesPerBit = 4;
164 static constexpr uint32_t MaxSamplesPerBit = 64;
173 static constexpr float DefaultAmplitude = 0.1f;
188 uint64_t firstSample = 0;
190 uint64_t sampleCount = 0;
192 uint32_t channel = 0;
194 uint64_t payload = 0;
198 AudioDataEncoder() =
default;
216 explicit AudioDataEncoder(
const AudioDesc &desc, uint32_t samplesPerBit = DefaultSamplesPerBit,
217 float amplitude = DefaultAmplitude);
220 bool isValid()
const {
return _valid; }
223 uint32_t samplesPerBit()
const {
return _samplesPerBit; }
226 float amplitude()
const {
return _amplitude; }
229 const AudioDesc &desc()
const {
return _desc; }
237 uint64_t packetSamples()
const {
238 return static_cast<uint64_t
>(BitsPerPacket) *
static_cast<uint64_t
>(_samplesPerBit);
261 Error encode(PcmAudioPayload &inout,
const List<Item> &items)
const;
264 Error encode(PcmAudioPayload &inout,
const Item &item)
const;
275 static uint8_t computeCrc(uint64_t payload);
279 uint32_t _samplesPerBit = 0;
280 float _amplitude = 0.0f;
284 size_t _bytesPerSample = 0;
288 size_t _channelStride = 0;
296 Buffer _silenceSample;
298 Error stampOne(uint8_t *channelBase,
const Item &item)
const;