Lab027C. Динамическое сравнение асинхронного и синхронного BASE + ROI

Цель: визуально сравнить ранее выбранный асинхронный профиль BASE 1 fps + ROI 2 fps с тремя синхронными профилями BASE 2 fps + ROI 2 fps.

Исходное видео: data\raw\lab026_rover_source.mp4
Исходное разрешение: 1280x720
Исходный FPS: 30.000000
Число кадров: 623
Длительность: 20.766667 с
ROI: x=0.20...0.80, y=0.42...1.00; пиксели x=256...1024, y=302...720.

Результат ручной оценки предыдущей Lab027:
- пользователь выбрал вариант B;
- граница ROI не мешает;
- обновление BASE один раз в секунду мешает;
- рассинхронное движение BASE и ROI мешает;
- принято решение сравнить с синхронным обновлением 2 fps.

async_reference: BASE и ROI обновляются независимо. Единого logical_frame_id нет; используются отдельные BASE ID и ROI ID. Mismatch для этого режима неприменим.
Синхронные профили: BASE и ROI формируются из одного source frame, получают единые composite ID и timestamp и атомарно заменяют отображаемый составной кадр.

Фактические результаты четырёх профилей:
async_reference: mode=asynchronous, BASE=240x135, 1.000 fps, Q25, base_frames=21, base_bytes=50858, base_bitrate=19.592167 kbit/s; ROI=320x180, 2.000 fps, Q35, roi_frames=42, roi_bytes=191270, roi_bitrate=73.683467 kbit/s; total_bytes=242128, total_bitrate=93.275634 kbit/s, sync_frames=N/A, timestamp_mismatch=N/A, frame_id_mismatch=N/A
sync_base160_q25_roi320_q35: mode=synchronous, BASE=160x90, 2.000 fps, Q25, base_frames=42, base_bytes=59958, base_bitrate=23.097785 kbit/s; ROI=320x180, 2.000 fps, Q35, roi_frames=42, roi_bytes=191270, roi_bitrate=73.683467 kbit/s; total_bytes=251228, total_bitrate=96.781252 kbit/s, sync_frames=42, timestamp_mismatch=0, frame_id_mismatch=0
sync_base240_q20_roi320_q30: mode=synchronous, BASE=240x135, 2.000 fps, Q20, base_frames=42, base_bytes=89696, base_bitrate=34.553836 kbit/s; ROI=320x180, 2.000 fps, Q30, roi_frames=42, roi_bytes=173455, roi_bitrate=66.820546 kbit/s; total_bytes=263151, total_bitrate=101.374382 kbit/s, sync_frames=42, timestamp_mismatch=0, frame_id_mismatch=0
sync_base240_q25_roi320_q35: mode=synchronous, BASE=240x135, 2.000 fps, Q25, base_frames=42, base_bytes=102283, base_bitrate=39.402761 kbit/s; ROI=320x180, 2.000 fps, Q35, roi_frames=42, roi_bytes=191270, roi_bitrate=73.683467 kbit/s; total_bytes=293553, total_bitrate=113.086228 kbit/s, sync_frames=42, timestamp_mismatch=0, frame_id_mismatch=0

Количество обновлений:
async_reference: BASE=21, ROI=42, synchronized=N/A.
sync_base160_q25_roi320_q35: BASE=42, ROI=42, synchronized=42.
sync_base240_q20_roi320_q30: BASE=42, ROI=42, synchronized=42.
sync_base240_q25_roi320_q35: BASE=42, ROI=42, synchronized=42.

Mismatch-проверка:
async_reference: timestamp=N/A, frame_id=N/A.
sync_base160_q25_roi320_q35: timestamp=0, frame_id=0.
sync_base240_q20_roi320_q30: timestamp=0, frame_id=0.
sync_base240_q25_roi320_q35: timestamp=0, frame_id=0.

Preview: data\raw\lab027c_previews\lab027c_synchronous_roi_preview.mp4
Формат: MP4/mp4v.
Радиопротокол, CRC, FEC, фрагментация и служебный трафик пока не учитываются.
Программа не выбирает лучший профиль и не объявляет режим безопасным автоматически.
Следующий шаг: ручной выбор пользователем после просмотра preview-видео.
