From 551fd2194ddc25b69d4f294b7101e628b2473467 Mon Sep 17 00:00:00 2001 From: pigeatgarlic Date: Tue, 21 Apr 2026 12:18:40 +0700 Subject: [PATCH] trigger IDR on bitrate change --- src/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 473812b8..60f034e6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -207,6 +207,7 @@ int main(int argc, char *argv[]) { auto framerate = mail->event(mail::framerate); auto idr = mail->event(mail::idr); + int cached_bitrate = 6000; // kbps, matches default config.bitrate int new_framerate; auto expected_index = queue->outindex; char buffer[DATA_PACKET_SIZE] = {0}; @@ -221,12 +222,18 @@ int main(int argc, char *argv[]) { expected_index = 0; switch (buffer[0]) { - case EventType::Bitrate: + case EventType::Bitrate: { if (buffer[1] == 0) break; - bitrate->raise(buffer[1] * 1000); + int new_bitrate = buffer[1] * 1000; // kbps + if (std::abs(new_bitrate - cached_bitrate) >= 3000) { // only change if delta >= 3 Mbps + cached_bitrate = new_bitrate; + bitrate->raise(new_bitrate); + idr->raise(true); + } break; + } case EventType::Framerate: new_framerate = buffer[1] * 2; if (new_framerate < 20)