|
|
|
|
@ -78,15 +78,20 @@ int main() {
|
|
|
|
|
// Резерв уменьшается только при стабильной работе; крупный callback и starvation повышают минимум.
|
|
|
|
|
VoicePlaybackBuffer buffering; |
|
|
|
|
buffering.sample(1, 512, false); |
|
|
|
|
buffering.sample(10000000, 512, false); REQUIRE(buffering.blocks == 2); |
|
|
|
|
for (int64_t t = 1000000; t <= 10000000; t += 1000000) buffering.sample(t, 512, false); |
|
|
|
|
REQUIRE(buffering.blocks == 2); |
|
|
|
|
buffering.sample(10000001, 512, false); REQUIRE(buffering.blocks == 1); |
|
|
|
|
buffering.sample(10020001, 512, true); REQUIRE(buffering.blocks == 2); |
|
|
|
|
buffering.sample(10020002, 512, true); REQUIRE(buffering.blocks == 2); |
|
|
|
|
buffering.sample(10520001, 512, true); REQUIRE(buffering.blocks == 3); |
|
|
|
|
buffering.sample(20520001, 2048, false); REQUIRE(buffering.blocks == 3); |
|
|
|
|
buffering.sample(30520001, 512, false); REQUIRE(buffering.blocks == 2); |
|
|
|
|
buffering.sample(40520001, 512, false); REQUIRE(buffering.blocks == 1); |
|
|
|
|
for (int64_t t = 11520001; t <= 50520001; t += 1000000) buffering.sample(t, 2048, false); |
|
|
|
|
REQUIRE(buffering.blocks == 3); |
|
|
|
|
buffering.sample(50520002, 512, false); REQUIRE(buffering.blocks == 2); |
|
|
|
|
for (int64_t t = 51520002; t <= 90520002; t += 1000000) buffering.sample(t, 512, false); |
|
|
|
|
REQUIRE(buffering.blocks == 1); |
|
|
|
|
buffering.reset(); REQUIRE(buffering.blocks == 2); |
|
|
|
|
buffering.sample(1, 512, false); |
|
|
|
|
buffering.sample(20000001, 512, false); REQUIRE(buffering.blocks == 2); // Пауза не означает стабильный вывод.
|
|
|
|
|
// Десять минут +/-300ppm дрейфа: связь с физическим временем сохраняется, шага >2мс нет.
|
|
|
|
|
for (double drift : {-0.0003, 0.0003}) { |
|
|
|
|
VoiceCaptureClock clock; |
|
|
|
|
|