commit -m "better"
2.96K subscribers
868 photos
105 videos
3 files
2.07K links
just random thoughts
Download Telegram
#gstreamer #plugins #gold

OSS, построенный на консалтинге - зло, так же как и OSS, основанный на продаже вендорам закрытых версий своего же OSS кода.

Пока за фичу кто-то не заплатит, хрен она появится в публичной репе, даже если будут желающие ее запилить просто так.

Вот, например, авторы gstreamer последние 15 лет всем рассказывают, как же динамически загружаемые плагины - это круто.

Но стоило появиться Хуавею, который покрутил пальцем у виска, сказал, что хочет все, как у белых людей, и дал денег, так gstreamer сразу переехал в монорепу, и запилил "почти" статическую сборку.

https://www.collabora.com/news-and-blog/news-and-events/generate-mininal-gstreamer-build-tailored-to-your-needs.html

Конечно, все это сделано максимально говенным способом, накрутили каких-то скриптов поверх meson https://github.com/GStreamer/gst-build/blob/master/scripts/generate_init_static_plugins.py, накостылили прокидывание настроек из основного meson файла в вспомогательные, и, самая мякотка - сказали, "а мы будем собирать все, что найдем, как обычно, а вы потом в отдельном файлике имплементируйте функцию, которая зарегистрирует все нужные вам плагины".

Понять по названию кодека, чо там за плагин ему нужен, я не знаю, как, поэтому у меня в epiphany до сих пор видосы не смотрятся, потому что это адовый итерационный процесс - пересобирать браузер, смотреть, чо ему дальше не хватает, и добавлять в эту фабрику.

Написал однажды, и напишу еще раз.

Самый лучший опенсорс - это опенсорс от больших компаний, который:

* решает побочную для этих компаний задачу, поэтому им нет смысла вот так вот мелко гадить, типа chromium, protobuf, tensorflow, llvm, catboost, etc

* который делается по нормальным корпоративным лекалам, с тестами и KPI
🔥7👍3👎1🤔1
https://www.phoronix.com/news/Qt-6.5-LTS-Released

Вышел новый #QT, и ничего такого не случилось - все приложения собрались, и продолжили работать, как им и положено.

Разве что, разрабы опять сломали сборку в кросс-компилируемом окружении, но они это делают наждый раз, я даже начинаю думать, что разрабы берут деньги за суппорт. Хммм...

"With Qt 6.5's multimedia support the FFmpeg back-end is now the default for macOS / Windows / Android / desktop Linux while for embedded systems GStreamer is the default"

Теперь, по умолчанию, для проигрывания видосов используется ffmpeg, и это очень, очень хорошо. Чем быстрее помрет фабрика по загрузке .so с диска под названием #gstreamer, тем лучше.

Но, на самом деле, мой глаз зацепился за фразу "The Qt 6.5 toolkit brings improved theme and styling support, including better support around dark mode handling on Windows", и я вспомнил, что уже какое-то время хочу рассказать, что, наконец, понял, почему авторы #gtk/#gnome так хейтят сторонние темы!

Считайте меня слоупоком, но я это понял совсем недавно.

В #gtk виджеты не совсем виджеты, а, по сути, настройки для канвы.

Все очень и очень похоже на html + css, берешь любой div, приделываешь к нему рамки из картинок, навешиваешь onClick(), и, пожалуйста, это не div, а уже кнопка.

Поэтому сделать кастомную тему для gtk - это как сделать кастомную css тему для нескольких веб сайтов одновременно. Иногда даже может работать, но, чаще всего, ползет какая-то херня из всех углов!

Что я пока не понимаю - перешли ли разработчики QT на темную сторону со своими qt quick, или еще не перешли.
👍4🔥21🤮1
commit -m "better"
#gstreamer #plugins #gold OSS, построенный на консалтинге - зло, так же как и OSS, основанный на продаже вендорам закрытых версий своего же OSS кода. Пока за фичу кто-то не заплатит, хрен она появится в публичной репе, даже если будут желающие ее запилить…
Будни #bootstrap

Я вот как-то писал, что #gstreamer получил "упрощенный" режим сборки (балагодаря Хуавею), когда не нужно разбираться, что же у него за такие "The Good, the Bad and the Ugly" плагины (я не шучу), а можно собрать одну "Full" библиотеку.

Оказалось:

* https://github.com/GStreamer/gstreamer/blob/main/meson.build#L385-L397 gstreamer теперь сам умеет себе строить gst_init_static_plugins(), без необходимости указывать их вручную.

* А если его особенно хорошо попросить - https://github.com/GStreamer/gstreamer/blob/main/subprojects/gstreamer/gst/gst.c#L122-L124, то он даже позовет эту функцию инициализации сам - https://github.com/GStreamer/gstreamer/blob/main/subprojects/gstreamer/gst/gst.c#L625-L627 без изъебов с dlopen.

В совокупности с тем, что у него есть биндинги в ffmpeg, а все остальное гуано из него можно выпилить, gstreamer превращается в почти безвредную библиотеку, с существованием которой можно смириться (ну предоставляет себе API ffmpeg немножко иначе, ну и хрен с ним, это не загрузка плагинов на любой чих).
👍14🔥5🆒3
Будни #bootstrap

Я тут запилил звук в #gstreamer. Раньше его не было, и порно приходилось смотреть без звука, потому что мой браузер (webkit) зачем-то использует gstreamer. А это, как вы понимаете, никуда не годится!

Это было не так просто, потому что я использую #sndiod (пробовал #cras, но пока вот так), а плагин для него в gstreamer находится в плачевном состоянии.

В конце-концов, протоптал дорожку через OpenAL: gstreamer -> openal -> sndio, потому что поддержка в openal у sndio вполне норм, а поддержка openal в gstreamer сильно лучше, чем sndio.

Пришлось по пути соорудить #herobora, потому что openal плагин лежит в gstreamer-bad, и если оттуда включить хоть один плагин, то в библиотеку начинает приезжать тонна говна, потому что все плагины по умолчанию "auto", а не "disabled": https://github.com/GStreamer/gstreamer/blob/main/subprojects/gst-plugins-bad/meson_options.txt

В meson вроде как есть [--auto-features {enabled,disabled,auto}]

https://mesonbuild.com/Commands.html

Но как это прокинуть в subproject, я не понял, даже в cmake лучше сделано.

Поэтому я поступил по-рабоче-крестьянски (а тут реально две черточки нужны?):

https://github.com/pg83/ix/blob/main/pkgs/lib/gstreamer/ix.sh#L65-L66
😁12👍5🍓4🔥2🐳2
https://www.opennet.ru/opennews/art.shtml?num=62441

29 новых уязвимостей в #gstreamer.

Текст про описание подхода - https://github.blog/security/vulnerability-research/uncovering-gstreamer-secrets/

TL;DR - был использован fuzzer, отдельный интерес представляет то, как коллега строил корпус для фаззинга.

Полагаю, что это только начало, потому что он нашел ошибки только в тех контейнерах, которые он явно таргетировал, а таргетировал он далеко не все, что бывает (mkv/mp4).
🔥15👍5🆒3