Browse Source

Record direct preview verification and camera teardown ownership

stream-multiview
evgeny 1 week ago
parent
commit
1815de059e
  1. 6
      doc/service_lifecycle.md
  2. 19
      doc/tasks.md

6
doc/service_lifecycle.md

@ -104,8 +104,10 @@ Android preview собственного эфира не создаёт reader:
и encoder Surface. UI attach/detach меняет лишь camera session; audio/encoder/origin сохраняются.
UI, ожидающие команды camera handler и каждая camera session удерживают preview target отдельно.
TextureView возвращает false при destroy и снимает ссылку UI; Surface/SurfaceTexture освобождаются
после закрытия последней session. Capture stop запрещает attach и снимает своё владение target;
camera HandlerThread завершается после camera close и callbacks всех созданных sessions.
после закрытия последней session. CameraDevice.onClosed снимает также оставшиеся ссылки своих
sessions, если Android не прислал отдельные session.onClosed. Повторные callbacks безопасны.
Capture stop запрещает attach и снимает своё владение target; camera HandlerThread завершается
после camera close и освобождения outputs всех созданных sessions.
Отказ preview output возвращает encoder-only session и не завершает сам эфир.
При stop/destroy отменяются delivery и media-index callbacks до освобождения store;
destroy отсоединённого cursor не обращается к store. Frontend прекращает audio callback

19
doc/tasks.md

@ -4,6 +4,25 @@
## Текущие задачи
[+] **Live: прямое превью Android без собственного decoder** — 14.10.2026:
Камера одновременно выводит в encoder Surface и TextureView; собственное превью больше не открывает
stream viewer/cursor, MediaCodec decoder, AudioTrack и адаптивные часы воспроизведения.
Attach/detach меняет только camera session, сохраняя encoder, audio, revision и origin;
ON_STOP снимает preview output сразу, без ожидания Compose recomposition. Отказ preview сохраняет encoder-only эфир.
Surface/texture удерживаются UI, ожидающими командами и camera sessions до окончания использования;
CameraDevice.onClosed освобождает также sessions, для которых Android не доставил отдельный onClosed.
TextureView сам учитывает sensor orientation; дополнительный UI rotation компенсирует лишь поворот дисплея.
Повторный поворот сенсора убран, DisplayListener учитывает также 180° без изменения размеров окна.
Диагностика показывает native transform, sensor/display/UI rotation, first frame, FPS, возраст кадров и освобождение outputs.
REALTIME timestamp сравнивается с elapsedRealtimeNanos; UNKNOWN не выдаёт выдуманный абсолютный возраст.
На SM проверены AV1, задняя/передняя камеры, ручной поворот, фон/возврат, закрытие/открытие preview,
полная остановка и повторный запуск. Нет собственного decoder; типичный возраст кадров около 130ms
вместо накопленных 6s; перед stop median=133.7ms, p95=175.7ms по 297 диагностическим samples.
Stop освободил codec и все sessions, camera HandlerThread завершён; после проверки восстановлены AV1/main/0°.
151 тест ядра и Kotlin unit tests прошли, в том числе 6 проверок preview; APK установлен на SM.
Архитектура: `doc/stream.txt`, `doc/service_lifecycle.md`.
Логи: `/tmp/direct-preview-{full-check,android-orientation-build,sm-live}.log`.
[+] **Live: независимая подача decoder и устранение вечного ожидания AV1 на SM** — 14.10.2026:
Причина: Android подавал максимум три кадра и читал видео только на 80ms вперёд от остановившегося clock;
c2.android.av1-dav1d.decoder требовал заполнения своего конвейера. KEY уже был принят, но UI продолжал ждать KEY.

Loading…
Cancel
Save