Record completed video fixes and validation coverage

This commit is contained in:
evgeny committed 2026-10-22 00:20:40 +02:00
1 parent df2f90d1f5
commit 6d39800351
1 file changed
+14 -11
+14 -11
View File
@@ -4,17 +4,20 @@
## Текущие задачи
[ ] **video: сохранность исходника и достоверность результата JPEG** — аудит 21.10.2026:
`video_transcode_start(src, src)` на подходящем H.264/MP4 запускает копирование с `fopen(dst, "wb")`:
временный исходник уменьшился с 1522 до 0 байтов, callback вернул ошибку уже после потери данных.
`video_extract_thumbnail` не проверяет fwrite/fclose: запись в `/dev/full` вернула 0 и лог успеха.
Короткое видео H.264 с задержанными кадрами возвращает -1 без превью: при EOF не выполняется drain
декодера; тот же файл штатный FFmpeg преобразует в JPEG. Контрольный intra-файл получает превью.
В video.h также уточнить синхронное чтение при probe, глобальный лимит одного transcode до done,
время жизни callback info, ошибки/стабы без FFmpeg и фактические условия needs_transcode.
Отдельно проверить игнорируемые ошибки финального drain/close, частичную настройку audio и обрезание путей.
Исправления реализации не вносились. Стенд /tmp/utun-video-audit.c, сборка /tmp/utun-video-audit.mk;
логи /tmp/utun-video-audit-intra.log, /tmp/utun-video-audit-full.log, /tmp/utun-video-audit-delayed.log.
[+] **video: сохранность файлов, JPEG и подготовка MP4** — исправлено 22.10.2026:
Одинаковые файлы/алиасы и недопустимые пути отклоняются без изменения исходника.
JPEG и MP4 пишутся в эксклюзивный временный файл; запись, drain, trailer и close проверяются.
Только успешный completion публикует результат; отмена до callback сохраняет старое назначение.
Превью получает задержанные B-кадры. MOV/H.264/AAC проходит remux в MP4; остальные профили
перекодируются с audio FIFO, сохранением временного смещения и хвоста ресемплера.
Атомарный global slot удерживается до completion, ошибки имеют точную фазу и контекст в логе.
Контракты описаны в src/video/video.h и doc/service_lifecycle.md.
test_video проверяет реальные кадры/сигнал, 1080p→720p, PCM/MP3/AAC, resample 12345→12000 Гц,
файловые ошибки, отмену, повтор из callback и конкурентные start; test_video_no_ffmpeg — стабы.
Оба теста, test_services и test_attachment_send прошли ASAN/UBSan с detect_leaks=1.
Отдельная конфигурация всего ядра/тестов без FFmpeg собрана, оба video-теста прошли.
Логи: /tmp/video-asan-final.log, /tmp/video-services-asan.log, /tmp/video-attachment-send-asan.log,
/tmp/video-without-ffmpeg-build-final.log; общий прогон: /tmp/video-full-check-final.log.
[+] **tcp_io: владение connect-таймером и повторный FIN** — 21.10.2026:
Замена таймаута сохраняет старый таймер при ошибке создания нового; <=0 отменяет таймер.