Browse Source

Stop raising QP as soon as measured bitrate returns to target

stream-multiview
evgeny 6 days ago
parent
commit
aff8a21ae4
  1. 2
      tools/chatgui/src/stream_qp_control.h
  2. 2
      tools/chatgui/tests/test_stream_publish.cpp

2
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;
}

2
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);

Loading…
Cancel
Save