|
|
|
|
@ -26,7 +26,7 @@ static int decode_bad(void* arg, const uint8_t*, int, int16_t*, int) {
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
static void push(call_jitter* j, int id, int64_t received_ms = -1) { |
|
|
|
|
call_jitter_push(j, (const uint8_t*)&id, sizeof(id), (uint32_t)(id * 20), received_ms < 0 ? id * 20 : received_ms); |
|
|
|
|
call_jitter_push(j, (const uint8_t*)&id, sizeof(id), (uint32_t)(id * 20), received_ms < 0 ? id * 20 : received_ms, nullptr); |
|
|
|
|
} |
|
|
|
|
int main() { |
|
|
|
|
{ |
|
|
|
|
@ -180,10 +180,10 @@ int main() {
|
|
|
|
|
for (auto value : pcm) CHECK(value == 0); |
|
|
|
|
} |
|
|
|
|
// Первый пакет ещё не заполнил запас PCM: продолжается тихое ожидание.
|
|
|
|
|
call_audio_on_media(nullptr, id, 0, 0, encoded, len); |
|
|
|
|
call_audio_on_media(nullptr, id, 0, 0, encoded, len, nullptr); |
|
|
|
|
CHECK(call_audio_pull_pcm(id, pcm, 480) == 480); |
|
|
|
|
for (auto value : pcm) CHECK(value == 0); |
|
|
|
|
for (int i = 1; i < 6; i++) call_audio_on_media(nullptr, id, i, 0, encoded, len); |
|
|
|
|
for (int i = 1; i < 6; i++) call_audio_on_media(nullptr, id, i, 0, encoded, len, nullptr); |
|
|
|
|
CHECK(call_audio_pull_pcm(id, pcm, 480) == 480); |
|
|
|
|
bool audible = false; |
|
|
|
|
for (auto value : pcm) if (value) audible = true; |
|
|
|
|
@ -196,14 +196,14 @@ int main() {
|
|
|
|
|
} |
|
|
|
|
CHECK(audible); |
|
|
|
|
// Малого запаса недостаточно для восстановления: сигнал продолжает звучать.
|
|
|
|
|
call_audio_on_media(nullptr, id, 6, 0, encoded, len); |
|
|
|
|
call_audio_on_media(nullptr, id, 6, 0, encoded, len, nullptr); |
|
|
|
|
audible = false; |
|
|
|
|
for (int tick = 0; tick < 100; tick++) { |
|
|
|
|
CHECK(call_audio_pull_pcm(id, pcm, 480) == 480); |
|
|
|
|
for (auto value : pcm) if (std::abs((int)value) > 1000) audible = true; |
|
|
|
|
} |
|
|
|
|
CHECK(audible); |
|
|
|
|
for (int i = 7; i < 30; i++) call_audio_on_media(nullptr, id, i, 0, encoded, len); |
|
|
|
|
for (int i = 7; i < 30; i++) call_audio_on_media(nullptr, id, i, 0, encoded, len, nullptr); |
|
|
|
|
CHECK(call_audio_pull_pcm(id, pcm, 480) == 480); |
|
|
|
|
call_audio_begin_end(id); // явное завершение прекращает догон и включает финальный тон
|
|
|
|
|
CHECK(call_audio_pull_pcm(id, pcm, 480) > 0); |
|
|
|
|
@ -219,7 +219,7 @@ int main() {
|
|
|
|
|
uint8_t encoded[512]; |
|
|
|
|
int len = opus_codec_encode(encoder, silence, 960, encoded, sizeof(encoded)); |
|
|
|
|
CHECK(len > 0); |
|
|
|
|
for (int i = 0; i < 6; i++) call_audio_on_media(nullptr, 124, i, 0, encoded, len); |
|
|
|
|
for (int i = 0; i < 6; i++) call_audio_on_media(nullptr, 124, i, 0, encoded, len, nullptr); |
|
|
|
|
std::vector<int16_t> output(777); |
|
|
|
|
under = 0; |
|
|
|
|
for (int tick = 0; tick < 30 && !under; tick++) { |
|
|
|
|
|