|
|
|
|
@ -123,7 +123,7 @@ int main() {
|
|
|
|
|
decoder d; |
|
|
|
|
auto* j = call_jitter_create(decode, &d, 1000); |
|
|
|
|
CHECK(j); |
|
|
|
|
push(j, 0); // 20мс достаточно для допуска в decoder, но SoundTouch ещё накапливает PCM.
|
|
|
|
|
push(j, 0); // Сохраняем запас 20мс после первого блока, а не расходуем его при старте.
|
|
|
|
|
CHECK(call_jitter_pull(j, pcm, 480) == 0); |
|
|
|
|
push(j, 1); |
|
|
|
|
CHECK(call_jitter_pull(j, pcm, 480) > 0); |
|
|
|
|
@ -159,7 +159,10 @@ int main() {
|
|
|
|
|
for (size_t i = 0; i < d.seen.size(); i++) CHECK(d.seen[i] == (int)i); |
|
|
|
|
for (int i = 0; i < 100; i++) call_jitter_pull(j, pcm, 480); |
|
|
|
|
size_t before = d.seen.size(); |
|
|
|
|
// После опустошения один кадр дополняет остаток SoundTouch и возобновляет PCM при запасе 20мс.
|
|
|
|
|
// После опустошения ждём полный блок сверх сетевого запаса; скрытого накопления DSP больше нет.
|
|
|
|
|
push(j, next++); |
|
|
|
|
CHECK(call_jitter_pull(j, pcm, 480) == 0); |
|
|
|
|
CHECK(d.seen.size() == before); |
|
|
|
|
push(j, next++); |
|
|
|
|
int refill = call_jitter_pull(j, pcm, 480); |
|
|
|
|
if (refill != 480) { |
|
|
|
|
|