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