overflow congestion control

This commit is contained in:
pigeatgarlic 2025-02-15 04:26:14 +00:00
parent 7e568388b3
commit 689049d8d9
2 changed files with 13 additions and 14 deletions

View File

@ -8,9 +8,6 @@
#include <csignal>
#include <fstream>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
// local includes
#include "globals.h"
@ -44,13 +41,11 @@ enum EventType {
Idr,
Hdr,
Stop,
BufferOverflow,
EventMax
};
using namespace std::literals;
using namespace boost::asio::ip;
using boost::asio::ip::udp;
using boost::asio::ip::address;
std::map<int, std::function<void()>> signal_handlers;
void
@ -199,6 +194,7 @@ main(int argc, char *argv[]) {
auto idr = mail->event<bool>(mail::idr);
auto expected_index = 0;
auto last_bitrate = 6;
while (!process_shutdown_event->peek() && !local_shutdown->peek()) {
char buffer[512] = {0};
while (expected_index == queue->outindex)
@ -215,11 +211,20 @@ main(int argc, char *argv[]) {
switch (buffer[0]) {
case EventType::Bitrate:
BOOST_LOG(debug) << "bitrate changed to " << (buffer[1] * 1000);
last_bitrate = buffer[1];
BOOST_LOG(info) << "bitrate changed to " << (buffer[1] * 1000);
bitrate->raise(buffer[1] * 1000);
break;
case EventType::BufferOverflow:
if (last_bitrate <= 1)
break;
last_bitrate--;
BOOST_LOG(info) << "overflow, bitrate changed to " << (last_bitrate * 1000);
bitrate->raise(last_bitrate * 1000);
break;
case EventType::Framerate:
BOOST_LOG(debug) << "framerate changed to " << (buffer[1]);
BOOST_LOG(info) << "framerate changed to " << (buffer[1]);
framerate->raise(buffer[1]);
break;
case EventType::Pointer:

View File

@ -1754,10 +1754,6 @@ namespace video {
auto shutdown_event = mail->event<bool>(mail::shutdown);
auto bitrate_events = mail->event<int>(mail::bitrate);
auto framerate_events = mail->event<int>(mail::framerate);
BOOST_LOG(info) << "framerate "sv << config->framerate;
BOOST_LOG(info) << "bitrate "sv << config->bitrate;
auto packets = mail->queue<packet_t>(mail::video_packets);
auto idr_events = mail->event<bool>(mail::idr);
auto invalidate_ref_frames_events = mail->event<std::pair<int64_t, int64_t>>(mail::invalidate_ref_frames);
@ -1801,11 +1797,9 @@ namespace video {
if (bitrate_events->peek()) {
config->bitrate = bitrate_events->pop().value();
BOOST_LOG(info) << "bitrate changed to "sv << config->bitrate;
break;
} else if (framerate_events->peek()) {
config->framerate = framerate_events->pop().value();
BOOST_LOG(info) << "framerate changed to "sv << config->framerate;
break;
}