Browse Source

Record x265 reconfiguration defect and validated dependency patch

master
evgeny 5 days ago
parent
commit
e20f4113a4
  1. 49
      doc/call_video.txt
  2. 6
      doc/tasks.md
  3. 12
      tools/chatgui/ffmpeg/patches/x265-4.1-reconfigure-param-owner.patch

49
doc/call_video.txt

@ -224,3 +224,52 @@ desktop / DataStore Android и передаётся в общий chat_setting.
Полный ./check.sh вне sandbox: 154/154, proxy 9/9, burst/load PASS;
/tmp/call-range-check-final.log. Первый запуск в sandbox блокировался запретом сокетов.
Настройки и регулятор готовы; подключение камеры/codec/render остаётся отдельным этапом.
Проверка реального x265 перед подключением backend, 14.10.2026
Добавлена ручная цель probe_call_x265 (EXCLUDE_FROM_ALL, не входит в ctest), если
найден x265 через pkg-config. Сборка/запуск:
cmake --build tools/chatgui/build --target probe_call_x265 -j4
./tools/chatgui/build/probe_call_x265
./tools/chatgui/build/probe_call_x265 --frame-rc
Один encoder, 640x360@30, Main 8-bit/Main tier/level 3.1, reference=1,
B=0/lookahead=0, ABR+VBV, буфер 1000 кбит. Три участка по 120 кадров:
4 Мбит/с -> 300 кбит/с -> 4 Мбит/с. Детерминированная шумовая сцена требует полосы;
измерение каждого участка исключает первые 30 кадров переходного процесса.
Код 0 — измерение прошло; 1 — ошибка API/потеря PTS; 2 — непригодный rate control.
Допуск измерения 0.5..1.5 target — диагностический, не гарантия CBR для любой сцены.
Установленная библиотека 4.1+1-1d117be (пакет 4.1-4) не проходит пробу:
target 4000000: output 4016866 бит/с;
target 300000: output 4006669 бит/с, несмотря на getter bitrate=300/vbv=300 кбит/с;
target 4000000: output 3945016 бит/с.
Лог: /tmp/call-x265-system.log. Return reconfigure=0 и getter недостаточны.
frame-rc также непригоден для этого zerolatency-профиля: output около 40 кбит/с
на всех трёх участках; /tmp/call-x265-frame-rc.log.
Причина проверена по исходникам именно установленного выпуска:
https://deb.debian.org/debian/pool/main/x/x265/x265_4.1.orig.tar.xz
SHA256 85abb8a850000bf693947459c42a666a3ecd6de10a2ac6b3c6647554b14d3270
Encoder::configure(p) теперь присваивает this->m_param=p. Вызов из
x265_encoder_reconfig с m_latestParam переключает encoder на новый объект, но
RateControl::m_param остаётся прежним адресом. Последующий x265_copy_params
копирует latest в него самого; reconfigureRC читает старые параметры rate control.
Для frame-rc обнаружен отдельный дефект: tuneQscaleToUpdatedBitrate делит
frameBitsTotal на i=0 при пустом lookahead, что в этой пробе приводит к QP=69.
Проверенный минимальный патч сохраняет активный m_param до configure(latest)
и восстанавливает его после. Файл для дальнейшего подключения:
tools/chatgui/ffmpeg/patches/x265-4.1-reconfigure-param-owner.patch
Применён только к отдельной копии исходников в /tmp/call-x265-source;
библиотека собрана в /tmp/call-x265-build без установки в систему.
С тем же тестом и frame-rc=off output=4016866 / 298165 / 4213269 бит/с.
Логи: /tmp/call_x265_probe_fixed.log и /tmp/call-x265-fixed.log.
Дополнительная проверка ffprobe: 360/360 кадров декодируются, Main, level=93
(HEVC level 3.1), has_b_frames=0. Системная библиотека и приложение не заменены.
ChatGUI успешно собирается; /tmp/call-x265-desktop-build.log.
Рекомендуемое продолжение: закрепить проверенную версию x265 и патч в локальной
сборке зависимости, повторить codec-пробу для рабочих разрешений и decoder,
затем подключить direct API к backend звонка. Непрошедший проверку backend
не объявлять в capabilities; H.264 остаётся альтернативой, когда H.265 недоступен.
Патч пока не подключён к build_ffmpeg.sh; изменение поставки зависимости и
интеграция backend остановлены по правилу AGENTS.md о выявленной нестыковке.

6
doc/tasks.md

@ -21,6 +21,12 @@
достигает обеих границ без неограниченного роста очереди; сетевой тест смены диапазона проходит.
ChatGUI собран, Android assembleDebug + 81 unit-тест прошли; итоговый check.sh 154/154 + proxy/burst/load PASS.
Камера/codec/render ещё не подключены.
Перед интеграцией H.265 найден дефект x265 4.1: reconfigure/getter сообщают 300 кбит/с,
реальный выход остаётся 4 Мбит/с. Ручная цель probe_call_x265 воспроизводит отказ.
Минимальный патч владения параметрами проверен на отдельной библиотеке в /tmp:
реальный выход 4.02 -> 0.298 -> 4.21 Мбит/с, декодируются 360/360 кадров.
Патч сохранён в tools/chatgui/ffmpeg/patches, к сборке/приложению пока не подключён.
Согласно AGENTS.md остановлено перед изменением зависимости; подробности и варианты в плане.
Контракты, этапы и проверки: `doc/call_video.txt`.
[+] **Android live: увеличение и перемещение видео как в просмотрщике файлов** — 14.10.2026:

12
tools/chatgui/ffmpeg/patches/x265-4.1-reconfigure-param-owner.patch

@ -0,0 +1,12 @@
--- a/source/encoder/api.cpp
+++ b/source/encoder/api.cpp
@@ -339,7 +339,9 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
}
else
{
+ x265_param* activeParam = encoder->m_param;
encoder->configure(encoder->m_latestParam);
+ encoder->m_param = activeParam;
if (strlen(encoder->m_latestParam->scalingLists) && strcmp(encoder->m_latestParam->scalingLists, encoder->m_param->scalingLists))
{
if (encoder->m_param->bRepeatHeaders)
Loading…
Cancel
Save