# Что отложено Список того, что известно и сознательно не сделано. Не «когда-нибудь починим», а «знаем, чего это стоит, и решили пока не платить». ## macOS: собирается, но работает наполовину Сборка проверена. В тулчейне fpcupdeluxe уже стоит всё нужное: кросс-компиляторы, Apple SDK (10.13, 11.0, 12.3) и виджетсет cocoa для обеих архитектур. Обе цели собираются с первого раза: ./build.sh macos → nlve_intel (Mach-O x86_64) nlve_arm (Mach-O arm64) Чего не будет, пока не сделано: **Предпросмотра нет.** Встраивание mpv написано под два случая: X11 (под gtk2 создаётся своё дочернее окно и его номер отдаётся mpv в `wid`) и Windows (там у панели есть настоящий HWND). Под cocoa нужен третий путь — отдать mpv указатель на NSView. Это не правка на десять строк: нужно разобраться, как LCL под cocoa отдаёт NSView панели, и проверить, что mpv рисует именно в неё. **Окно зависимостей врёт.** Списки в `uDeps.pas` разделены на два случая: Windows и всё остальное. Мак попадает во второй и получает совет `sudo apt install ffmpeg`. Нужен свой список: `brew install ffmpeg mpv` или готовые сборки. **Проверить нечем.** У нас нет мака. Собранный, но ни разу не запущенный файл — это предположение, а не сборка. Всё, что можно утверждать сейчас: компилятор и компоновщик отработали без ошибок. **Двух файлов может оказаться мало.** Intel и Apple Silicon сейчас раздаются отдельно. Склеить их в один универсальный умеет `lipo`, но в тулчейне он есть только для powerpc — для x86_64 и arm64 его надо доставить. **Обёртка .app не настроена.** lazbuild её создаёт, но внутри лежит ссылка на файл с именем `nlve`, которого после переименования нет. Сейчас она просто удаляется. Настоящему приложению нужны свой Info.plist, значок и, для раздачи, подпись и нотаризация у Apple. ## Лицензия не выбрана libmpv грузится в наш процесс, а её сборки — GPL (в Ubuntu GPL-3+ из-за libsmbclient, у shinchiro тоже GPL). По толкованию FSF это делает совместную работу производной, и при раздаче программа должна быть под GPL-3+ или совместимой. Пока ничего не раздаётся — вопрос не стоит. Решать его перед первой раздачей сборок. Возможный обход: отказаться от libmpv в пользу своего вывода кадров через ffmpeg, но это большая работа и заметно хуже по плавности. ffmpeg проблемой не является: он запускается отдельной программой. ## Настоящая прозрачность в исходном файле Цветовой ключ выбивает цвет, но бывает и прозрачность, записанная в самом файле: WebM с VP8/VP9, ProRes 4444, QuickTime Animation. ffmpeg их распаковывает в кадр с альфа-каналом, и ключ таким файлам не нужен — достаточно не выбрасывать альфу по дороге. Что для этого потребуется, когда дойдут руки: - при добавлении файла запоминать, есть ли у него альфа (`pix_fmt` с буквой «a»: yuva420p, yuva444p10le, argb); - такой клип считать несплошным так же, как клип с ключом, — то есть собирать участок слоями; - в цепочке фильтров следить, чтобы альфа не терялась: `scale` её сохраняет, а `pad` — только с прозрачным цветом полей; - аппаратное декодирование к таким файлам не применять: альфа в VP9 лежит отдельным потоком, и видеокарта его не отдаёт. Чего не будет в любом случае: раздать готовый ролик с прозрачностью в MP4/H.264 нельзя — контейнер и кодек альфу не хранят. Для этого нужен отдельный вывод в VP9 или ProRes 4444. ## Мелочи, до которых не дошли руки **Значок файла программы под Windows.** Значок окна задаётся из `uIconData`, а значок самого `.exe` в проводнике берётся из ресурса при сборке — там он до сих пор стандартный. **Кэш наложений не убирается.** Каждая правка наплыва создаёт в кэше проекта новый файл; старые остаются лежать. Клипы с ключом и прозрачностью сюда больше не попадают — их показывает сам плеер, — так что расти кэшу теперь почти не с чего. **Окно кадрирования открывается около четырёх секунд.** Оно синхронно достаёт два кадра ffmpeg-ом (по 2.2 с каждый на шестигигабайтном файле) и только потом показывается. Лечится показом окна сразу и дорисовкой кадра по готовности, либо одним кадром вместо двух.