11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
22PROMEKI_NAMESPACE_BEGIN
112class RtpPayloadRawVideo :
public RtpPayload {
116 static constexpr uint32_t ClockRate = 90000;
121 static constexpr uint8_t DefaultPayloadType = 96;
126 static constexpr size_t ExtSeqSize = 2;
131 static constexpr size_t SrdHeaderSize = 6;
135 static constexpr size_t MaxSrdsPerPacket = 3;
143 static constexpr size_t BpmBlockOctets = 180;
151 static constexpr size_t BpmStandardBlocksPerPacket = 7;
161 static size_t bpmBlocksPerPacket(
size_t maxPayloadSize);
167 static size_t bpmTargetPayloadSize(
size_t maxPayloadSize);
176 static constexpr size_t GpmShortPacketFloor = 1000;
208 static RtpPacket makeKeepAlive(uint32_t packetCounter,
210 bool fieldBit =
false,
211 uint8_t payloadType = DefaultPayloadType);
242 RtpPayloadRawVideo(
int width,
int height,
int bitsPerPixel,
int pgroupBytes = 0,
int rowsPerSrd = 1);
245 uint8_t payloadType()
const override {
return _payloadType; }
247 uint32_t clockRate()
const override {
return ClockRate; }
249 RtpPacket::List pack(
const void *mediaData,
size_t size)
override;
251 Buffer unpack(
const RtpPacket::List &packets)
override;
254 void setPayloadType(uint8_t pt) { _payloadType = pt; }
257 int width()
const {
return _width; }
260 int height()
const {
return _height; }
263 int bitsPerPixel()
const {
return _bitsPerPixel; }
266 int pgroupBytes()
const {
return _pgroupBytes; }
271 int rowsPerSrd()
const {
return _rowsPerSrd; }
291 void setPacketCounter(uint32_t value) { _packetCounter = value; }
301 uint32_t packetCounter()
const {
return _packetCounter; }
319 void setFieldBit(
bool f) { _fieldBit = f; }
322 bool fieldBit()
const {
return _fieldBit; }
364 void setScanMode(VideoScanMode m) { _scanMode = m; }
367 VideoScanMode scanMode()
const {
return _scanMode; }
395 void setPackingMode(St2110PackingMode pm) { _packingMode = pm; }
398 St2110PackingMode packingMode()
const {
return _packingMode; }
406 uint8_t _payloadType = DefaultPayloadType;
407 uint32_t _packetCounter = 0;
408 bool _fieldBit =
false;
409 St2110PackingMode _packingMode = St2110PackingMode::Gpm;
410 VideoScanMode _scanMode = VideoScanMode::Progressive;