diff --git a/tools/chatgui/src/stream_qp_control.h b/tools/chatgui/src/stream_qp_control.h index a17feff7..9c54ad7b 100644 --- a/tools/chatgui/src/stream_qp_control.h +++ b/tools/chatgui/src/stream_qp_control.h @@ -24,7 +24,7 @@ public: m_bitrate = m_sampled ? (m_bitrate + measured) / 2 : measured; m_sampled = true; m_bytes = 0; m_at = now; if (!m_adaptive || m_base < 0 || m_target <= 0) return m_limit; - if (m_bitrate > uint64_t(m_target) * 108 / 100 && m_limit < 51) ++m_limit; + if (measured > uint64_t(m_target) * 108 / 100 && m_bitrate > uint64_t(m_target) * 108 / 100 && m_limit < 51) ++m_limit; else if (m_bitrate < uint64_t(m_target) * 90 / 100 && m_limit > m_base) --m_limit; return m_limit; } diff --git a/tools/chatgui/tests/test_stream_publish.cpp b/tools/chatgui/tests/test_stream_publish.cpp index 8590ffd9..d879bc92 100644 --- a/tools/chatgui/tests/test_stream_publish.cpp +++ b/tools/chatgui/tests/test_stream_publish.cpp @@ -300,7 +300,7 @@ private slots: QCOMPARE(qp.update(0, 2000000), 29); QCOMPARE(qp.update(1000000, 4000000), 30); // Не более одного пункта за интервал. for (int64_t now = 6000000; now <= 12000000; now += 2000000) qp.update(250000, now); - QCOMPARE(qp.limit(), 31); // Сглаживание не дёргает QP около целевого битрейта. + QCOMPARE(qp.limit(), 30); // Запаздывание среднего не повышает QP, когда фактический битрейт уже в норме. for (int64_t now = 14000000; now <= 30000000; now += 2000000) qp.update(10000, now); QCOMPARE(qp.limit(), 28); // Возвращаем выбранный потолок, не снижаем его дальше. qp.reset(28, 1000000, false, 0); QCOMPARE(qp.update(10000000, 2000000), 28);