11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK && PROMEKI_ENABLE_PROAV
26PROMEKI_NAMESPACE_BEGIN
105class St2110TrafficCalc {
117 St2110PackingMode packingMode = St2110PackingMode::Gpm;
123 int ipHeaderBytes = 20;
125 int udpHeaderBytes = 8;
127 int rtpHeaderBytes = 12;
140 Error error = Error::Invalid;
143 VideoFormat videoFormat;
144 St2110Sampling sampling;
146 RtpSenderType senderType;
147 PacketModel packetModel;
152 VideoScanMode scanMode;
153 bool progressive =
false;
156 double activeRatio = 0.0;
158 Duration frameInterval;
161 St2110Video::Pgroup pgroup;
163 int64_t octetsPerLine = 0;
164 int64_t activeOctetsPerFrame = 0;
165 int payloadDataPerPacket = 0;
166 int packetsPerLine = 0;
167 int packetsPerFrame = 0;
168 int packetSizeBytes = 0;
171 double packetRate = 0.0;
172 double mediaRateBps = 0.0;
173 double wireRateBps = 0.0;
174 double beta = St2110Tx::Beta;
196 Duration vrxTimingWindow;
200 Duration cmaxBurstWindow;
204 int64_t troffMicroseconds = 0;
207 bool isValid()
const {
return error.isOk(); }
213 String toString()
const;
217 St2110TrafficCalc() =
default;
228 static PacketModel defaultModel();
239 St2110TrafficCalc(
const VideoFormat &format,
const St2110Sampling &sampling,
240 const St2110Depth &depth,
const RtpSenderType &senderType,
241 const PacketModel &model = defaultModel());
257 St2110TrafficCalc(
const VideoFormat &format,
const PixelFormat &pixelFormat,
258 const RtpSenderType &senderType,
259 const PacketModel &model = defaultModel());
262 const Result &result()
const {
return _result; }
265 bool isValid()
const {
return _result.isValid(); }
268 const Error &error()
const {
return _result.error; }
275 static Result compute(
const VideoFormat &format,
const St2110Sampling &sampling,
276 const St2110Depth &depth,
const RtpSenderType &senderType,
277 const PacketModel &model = defaultModel());
283 static Result compute(
const VideoFormat &format,
const PixelFormat &pixelFormat,
284 const RtpSenderType &senderType,
285 const PacketModel &model = defaultModel());
291inline St2110TrafficCalc::St2110TrafficCalc(
const VideoFormat &format,
292 const St2110Sampling &sampling,
293 const St2110Depth &depth,
294 const RtpSenderType &senderType,
295 const PacketModel &model)
296 : _result(compute(format, sampling, depth, senderType, model)) {}
298inline St2110TrafficCalc::St2110TrafficCalc(
const VideoFormat &format,
299 const PixelFormat &pixelFormat,
300 const RtpSenderType &senderType,
301 const PacketModel &model)
302 : _result(compute(format, pixelFormat, senderType, model)) {}