libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtppayloadanc.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <cstddef>
14#include <cstdint>
15#include <promeki/ancpacket.h>
16#include <promeki/buffer.h>
17#include <promeki/enums.h>
18#include <promeki/error.h>
19#include <promeki/namespace.h>
20#include <promeki/rtppacket.h>
21#include <promeki/rtppayload.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
104class RtpPayloadAnc : public RtpPayload {
105 public:
109 static constexpr uint32_t ClockRate = 90000;
110
112 static constexpr uint8_t DefaultPayloadType = 100;
113
117 static constexpr size_t PayloadHeaderSize = 8;
118
122 static constexpr size_t PerPacketHeaderSize = 4;
123
138 enum class FieldIndication : uint8_t {
139 Progressive = 0x0,
140 Invalid = 0x1,
141 InterlacedField1 = 0x2,
142 InterlacedField2 = 0x3,
143 };
144
151 explicit RtpPayloadAnc(uint8_t payloadType = DefaultPayloadType);
152
154 uint8_t payloadType() const override { return _payloadType; }
155
157 uint32_t clockRate() const override { return ClockRate; }
158
169 RtpPacket::List pack(const void *mediaData, size_t size) override;
170
178 Buffer unpack(const RtpPacket::List &packets) override;
179
194 ValidateResult validate(const Buffer &unpacked) override;
195
197 void setPayloadType(uint8_t pt) { _payloadType = pt; }
198
219 void setKeepAliveField(FieldIndication f);
220
222 FieldIndication keepAliveField() const { return _keepAliveField; }
223
266 RtpPacket::List packAncFrame(const AncPacket::List &packets,
267 uint32_t rtpTimestamp);
268
337 Error unpackAncPackets(const RtpPacket::List &in,
338 AncPacket::List &out,
339 AncChecksumPolicy policy = AncChecksumPolicy::PreserveOrRecompute);
340
341 private:
342 uint8_t _payloadType;
343 FieldIndication _keepAliveField = FieldIndication::Progressive;
344};
345
346PROMEKI_NAMESPACE_END
347
348#endif // PROMEKI_ENABLE_NETWORK