libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtppayloadrawvideo.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/buffer.h>
17#include <promeki/enums_video.h>
18#include <promeki/namespace.h>
19#include <promeki/rtppacket.h>
20#include <promeki/rtppayload.h>
21
22PROMEKI_NAMESPACE_BEGIN
23
112class RtpPayloadRawVideo : public RtpPayload {
113 public:
116 static constexpr uint32_t ClockRate = 90000;
117
121 static constexpr uint8_t DefaultPayloadType = 96;
122
126 static constexpr size_t ExtSeqSize = 2;
127
131 static constexpr size_t SrdHeaderSize = 6;
132
135 static constexpr size_t MaxSrdsPerPacket = 3;
136
143 static constexpr size_t BpmBlockOctets = 180;
144
151 static constexpr size_t BpmStandardBlocksPerPacket = 7;
152
161 static size_t bpmBlocksPerPacket(size_t maxPayloadSize);
162
167 static size_t bpmTargetPayloadSize(size_t maxPayloadSize);
168
176 static constexpr size_t GpmShortPacketFloor = 1000;
177
208 static RtpPacket makeKeepAlive(uint32_t packetCounter,
209 uint16_t srdRow = 0,
210 bool fieldBit = false,
211 uint8_t payloadType = DefaultPayloadType);
212
242 RtpPayloadRawVideo(int width, int height, int bitsPerPixel, int pgroupBytes = 0, int rowsPerSrd = 1);
243
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;
252
254 void setPayloadType(uint8_t pt) { _payloadType = pt; }
255
257 int width() const { return _width; }
258
260 int height() const { return _height; }
261
263 int bitsPerPixel() const { return _bitsPerPixel; }
264
266 int pgroupBytes() const { return _pgroupBytes; }
267
271 int rowsPerSrd() const { return _rowsPerSrd; }
272
291 void setPacketCounter(uint32_t value) { _packetCounter = value; }
292
301 uint32_t packetCounter() const { return _packetCounter; }
302
319 void setFieldBit(bool f) { _fieldBit = f; }
320
322 bool fieldBit() const { return _fieldBit; }
323
364 void setScanMode(VideoScanMode m) { _scanMode = m; }
365
367 VideoScanMode scanMode() const { return _scanMode; }
368
395 void setPackingMode(St2110PackingMode pm) { _packingMode = pm; }
396
398 St2110PackingMode packingMode() const { return _packingMode; }
399
400 private:
401 int _width;
402 int _height;
403 int _bitsPerPixel;
404 int _pgroupBytes;
405 int _rowsPerSrd = 1;
406 uint8_t _payloadType = DefaultPayloadType;
407 uint32_t _packetCounter = 0;
408 bool _fieldBit = false;
409 St2110PackingMode _packingMode = St2110PackingMode::Gpm;
410 VideoScanMode _scanMode = VideoScanMode::Progressive;
411};
412
413PROMEKI_NAMESPACE_END
414
415#endif // PROMEKI_ENABLE_NETWORK