11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
22PROMEKI_NAMESPACE_BEGIN
98 using Visitor = Function<Error(
const NalUnit &)>;
117 static Error forEachAnnexBNal(
const BufferView &in,
const Visitor &visit);
135 static Error forEachAvccNal(
const BufferView &in, uint8_t lenSize,
const Visitor &visit);
158 static Error annexBToAvcc(
const BufferView &in, uint8_t lenSize, Buffer &outBuf);
186 static Error annexBToAvccFiltered(
const BufferView &in, uint8_t lenSize,
187 const Function<
bool(
const NalUnit &)> &keep,
204 static Error avccToAnnexB(
const BufferView &in, uint8_t lenSize, Buffer &outBuf);
223 static Error wrapNalsAsAnnexB(
const List<BufferView> &nals, Buffer &outBuf);
242 uint8_t chromaFormatIdc = 1;
243 uint8_t bitDepthLumaMinus8 = 0;
244 uint8_t bitDepthChromaMinus8 = 0;
245 uint8_t profileIdc = 0;
246 uint8_t levelIdc = 0;
247 bool frameMbsOnly =
true;
252 uint16_t sarWidth = 0;
253 uint16_t sarHeight = 0;
283 static Error parseSpsResolution(
const BufferView &sps, SpsInfo &out);
329struct AvcDecoderConfig {
330 uint8_t configurationVersion = 1;
331 uint8_t avcProfileIndication = 0;
332 uint8_t profileCompatibility = 0;
333 uint8_t avcLevelIndication = 0;
334 uint8_t lengthSizeMinusOne = 3;
361 static Error fromAnnexB(
const BufferView &au, AvcDecoderConfig &out);
373 static Error parse(
const BufferView &payload, AvcDecoderConfig &out);
385 Error serialize(Buffer &outBuf)
const;
395 Error toAnnexB(Buffer &outBuf)
const;
407 static bool isIdrAnnexB(
const BufferView &au);