FoxiGram/TMessagesProj/jni/voip/libtgvoip/video/ScreamCongestionController.h
instant992 8e79f2ee9c FoxiGram: Telegram client with built-in Xray VLESS proxy
Based on Nekogram. Key additions:
- Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app)
- Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so
- Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI
- Auto-restore proxy on restart, rebind to active network (LTE/WiFi)
- Server credentials externalized to git-ignored XrayServers.java (+ template)
- libxray Go source included; compiled .so, keystore, google-services.json ignored
2026-06-08 16:41:07 +04:00

80 lines
2.1 KiB
C++

//
// Created by Grishka on 25/02/2019.
//
#ifndef LIBTGVOIP_SCREAMCONGESTIONCONTROLLER_H
#define LIBTGVOIP_SCREAMCONGESTIONCONTROLLER_H
#include "../Buffers.h"
#include <vector>
#include <stdint.h>
namespace tgvoip{
namespace video{
class ScreamCongestionController{
public:
ScreamCongestionController();
void AdjustBitrate();
void ProcessAcks(float oneWayDelay, uint32_t bytesNewlyAcked, uint32_t lossCount, double rtt);
void ProcessPacketSent(uint32_t size);
void ProcessPacketLost(uint32_t size);
double GetPacingInterval();
void UpdateMediaRate(uint32_t frameSize);
uint32_t GetBitrate();
private:
void UpdateVariables(float qdelay);
void UpdateCWnd(float qdelay);
void AdjustQDelayTarget(float qdelay);
void CalculateSendWindow(float qdelay);
void UpdateBytesInFlightHistory();
struct ValueSample{
uint32_t sample;
double time;
};
float qdelayTarget;
float qdelayFractionAvg=0.0f;
HistoricBuffer<float, 20> qdelayFractionHist;
float qdelayTrend=0.0f;
float qdelayTrendMem=0.0f;
HistoricBuffer<float, 100> qdelayNormHist;
bool inFastIncrease=true;
uint32_t cwnd;
uint32_t bytesNewlyAcked=0;
uint32_t maxBytesInFlight=0;
uint32_t sendWnd=0;
uint32_t targetBitrate=0;
uint32_t targetBitrateLastMax=1;
float rateTransmit=0.0f;
float rateAck=0.0f;
float rateMedia=0.0f;
float rateMediaMedian=0.0f;
float sRTT=0.0f;
uint32_t rtpQueueSize=0;
uint32_t rtpSize=1024; //0;
float lossEventRate=0.0f;
bool lossPending=false;
float prevOneWayDelay=0.0f;
double ignoreLossesUntil=0.0;
uint32_t prevLossCount=0;
double lastTimeQDelayTrendWasGreaterThanLo=0.0;
double lastVariablesUpdateTime=0.0;
double lastRateAdjustmentTime=0.0;
double lastCWndUpdateTime=0.0;
uint32_t bytesInFlight=0;
std::vector<ValueSample> bytesInFlightHistory;
uint32_t bytesSent=0;
uint32_t bytesAcked=0;
uint32_t bytesMedia=0;
double rateTransmitUpdateTime=0.0;
double rateMediaUpdateTime=0.0;
HistoricBuffer<float, 25> rateMediaHistory;
};
}
}
#endif //LIBTGVOIP_SCREAMCONGESTIONCONTROLLER_H