From 689049d8d95d2a265fb2bf9fe788fa9dfd73cd2e Mon Sep 17 00:00:00 2001 From: pigeatgarlic <64737125+pigeatgarlic@users.noreply.github.com> Date: Sat, 15 Feb 2025 04:26:14 +0000 Subject: [PATCH] overflow congestion control --- src/main.cpp | 21 +++++++++++++-------- src/video.cpp | 6 ------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 0ef53777..5ba3cf1b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,9 +8,6 @@ #include #include #include -#include -#include -#include // 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> signal_handlers; void @@ -199,6 +194,7 @@ main(int argc, char *argv[]) { auto idr = mail->event(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: diff --git a/src/video.cpp b/src/video.cpp index 6dd94689..f436e9dc 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -1754,10 +1754,6 @@ namespace video { auto shutdown_event = mail->event(mail::shutdown); auto bitrate_events = mail->event(mail::bitrate); auto framerate_events = mail->event(mail::framerate); - - BOOST_LOG(info) << "framerate "sv << config->framerate; - BOOST_LOG(info) << "bitrate "sv << config->bitrate; - auto packets = mail->queue(mail::video_packets); auto idr_events = mail->event(mail::idr); auto invalidate_ref_frames_events = mail->event>(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; }