Lower shared call jitter reserve floor to 20 ms
This commit is contained in:
1 parent
39c5274819
commit
f1aec9bb2d
3 files changed
+8
-7
No files matched your search
@@ -17,7 +17,6 @@
|
||||
static constexpr int kSampleRate = 48000;
|
||||
static constexpr int kFrameSamples = 960;
|
||||
static constexpr int kMaxEncoded = 512;
|
||||
static constexpr int kTargetMs = 60;
|
||||
static constexpr double kMaxTempo = 1.6;
|
||||
static constexpr int kTempoRampMs = 500;
|
||||
|
||||
@@ -39,7 +38,7 @@ struct call_jitter {
|
||||
call_jitter_diagnostics diagnostics{};
|
||||
int processing_ms = 0, tempo_x100 = 100; /* снимок аудиопотока под mtx */
|
||||
call_jitter_window depth_window, arrival_window;
|
||||
call_jitter_range range = {0, 0, 60}; /* опубликованный снимок под mtx */
|
||||
call_jitter_range range = {0, 0, CALL_JITTER_MIN_RESERVE_MS}; /* опубликованный снимок под mtx */
|
||||
call_jitter_decode_fn decode;
|
||||
void* arg;
|
||||
soundtouch::SoundTouch st;
|
||||
@@ -47,7 +46,7 @@ struct call_jitter {
|
||||
float input[kFrameSamples];
|
||||
std::vector<float> output;
|
||||
bool primed = false, catching_up = false;
|
||||
double tempo = 1.0, ema_ms = kTargetMs;
|
||||
double tempo = 1.0, ema_ms = CALL_JITTER_MIN_RESERVE_MS;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
@@ -82,7 +81,7 @@ struct call_jitter* call_jitter_create(call_jitter_decode_fn decode, void* arg,
|
||||
j->~call_jitter(); u_free(j); return nullptr;
|
||||
}
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CALL, "call_jitter: created capacity=%dms target=%dms max_reserve=%dms tempo=1.0..%.1f ramp=%dms",
|
||||
CALL_JITTER_MAX_FRAMES * CALL_JITTER_FRAME_MS, kTargetMs, max_reserve_ms, kMaxTempo, kTempoRampMs);
|
||||
CALL_JITTER_MAX_FRAMES * CALL_JITTER_FRAME_MS, CALL_JITTER_MIN_RESERVE_MS, max_reserve_ms, kMaxTempo, kTempoRampMs);
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,10 +8,11 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Звонок: FIFO Opus, запас 60мс..max_reserve_ms по изменению задержки доставки за 10 секунд и догон после паузы устройства.
|
||||
/* Звонок: FIFO Opus, запас 20мс..max_reserve_ms по изменению задержки доставки за 10 секунд и догон после паузы устройства.
|
||||
* push — сетевой поток, pull/decode/SoundTouch — единственный аудиопоток.
|
||||
* destroy — после остановки обоих потребителей. get_stats — любой поток. */
|
||||
#define CALL_JITTER_FRAME_MS 20
|
||||
#define CALL_JITTER_MIN_RESERVE_MS 20
|
||||
#define CALL_JITTER_MAX_FRAMES 750 /* 10с перебоя + 5с запаса на накопление и восстановление */
|
||||
typedef int (*call_jitter_decode_fn)(void*, const uint8_t*, int, int16_t*, int);
|
||||
struct call_jitter_range { int min_ms, max_ms, reserve_ms; };
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include "call_jitter.h"
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
|
||||
@@ -6,7 +7,7 @@
|
||||
struct call_jitter_window {
|
||||
struct bucket { int64_t second = -1, low = 0, high = 0; } buckets[10];
|
||||
int64_t low = 0, high = 0;
|
||||
int reserve = 60;
|
||||
int reserve = CALL_JITTER_MIN_RESERVE_MS;
|
||||
int max_reserve = 1000;
|
||||
int64_t last_received_ms = -1, transit_ms = 0;
|
||||
uint32_t last_sent_ms = 0;
|
||||
@@ -21,7 +22,7 @@ struct call_jitter_window {
|
||||
if (item.second < 0 || item.second > second || second - item.second >= 10) continue;
|
||||
low = std::min(low, item.low); high = std::max(high, item.high);
|
||||
}
|
||||
reserve = (int)std::max<int64_t>(60, std::min<int64_t>(max_reserve, high - low));
|
||||
reserve = (int)std::max<int64_t>(CALL_JITTER_MIN_RESERVE_MS, std::min<int64_t>(max_reserve, high - low));
|
||||
return changed_second;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user