11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
21PROMEKI_NAMESPACE_BEGIN
82 enum BitsPerSample : uint8_t {
89 static constexpr size_t HeaderSize = 4;
92 static constexpr float RequiredSampleRate = 48000.0f;
95 static constexpr unsigned MaxChannels = 8;
98 static constexpr unsigned MinChannels = 2;
107 static int bitsPerSampleCode(
const AudioFormat &fmt);
112 static bool isFormatSupported(
const AudioFormat &fmt);
121 static size_t bytesPerAes3Frame(BitsPerSample bps,
unsigned channels);
129 static size_t payloadSize(BitsPerSample bps,
unsigned channels,
size_t sampleCount);
140 enum VucBits : uint8_t {
142 VucValidity = 1 << 0,
144 VucChannelStatus = 1 << 2,
159 using VucSource =
const uint8_t *;
215 static Error pack(
const void *pcm,
const AudioDesc &desc,
size_t sampleCount,
216 uint32_t &blockPhase, uint8_t firstChannelId,
217 Buffer &outPesPayload, VucSource vuc =
nullptr);
222 struct ParsedHeader {
223 uint16_t audioPacketSize = 0;
224 uint8_t numberChannels = 0;
225 unsigned channels = 0;
226 uint8_t channelIdentification = 0;
227 BitsPerSample bitsPerSample = Bits16;
240 static Error parseHeader(
const BufferView &in, ParsedHeader *out);
267 static Error parse(
const BufferView &in, Buffer &outPcm, AudioDesc &outDesc,
268 size_t &outSampleCount, uint8_t *outFirstChannelId =
nullptr);
282 static Error parseWithVuc(
const BufferView &in, Buffer &outPcm, AudioDesc &outDesc,
283 size_t &outSampleCount, Buffer *outVuc,
284 uint8_t *outFirstChannelId =
nullptr);