Match stream audio queue to device buffer and document playback ownership

This commit is contained in:
evgeny committed 2026-10-14 17:19:04 +02:00
1 parent 0fdc6e435b
commit ded0d401c7
3 files changed
+24 -2

No files matched your search

+9
View File
@@ -838,6 +838,15 @@ Android:
- Фиксированного prebuffer нет. Начало clock/audio output разрешено после первого декодированного кадра.
AudioTrack задаёт время показа видео по реально услышанному PCM;
без аудио используются монотонные часы с остановкой на границе готовых кадров.
Android StreamAudioOutput принадлежит viewer worker и хранит один недописанный PCM (до 480 stereo frames).
Одна WRITE_NON_BLOCKING за проход: частичный/нулевой результат сохраняет остаток, не задерживая video pump.
Выдано native = принято устройством + остаток; часы используют playbackHeadPosition без экстраполяции timestamp.
Заполнение поддерживается до фактического bufferSizeInFrames устройства; API>=31 задаёт start threshold=1.
При EOF недописанный PCM передаётся полностью; короткий хвост дополняется не более одного start threshold тишины.
Эта тишина не входит в native PTS; завершение ждёт воспроизведения всего принятого PCM, не окончания тишины.
Пауза сохраняет остаток; GAP освобождает output вместе с native timeline. Новый output начинает счётчики с нуля.
Watchdog 2s проверяет отсутствие движения hardware head только при достаточном заполнении либо заблокированной записи;
намеренная пауза и ожидание данных до порога запуска не считаются зависанием. Ошибка содержит состояние и счётчики устройства.
Защитный guard минутного контроллера учитывает audio device lead и наблюдённое опережение decoder
(максимум last_input_PTS-output_PTS текущей revision плюс период кадра). Drain не обнуляет этот guard;
новый decoder начинает измерение заново. Отдельного контроллера задержки декодера нет.