LINUX.ORG.RU
ФорумTalks

Иногда OpenSource таки раздражает

 ,


0

1

Был пакет dvswitch (видео-микшер), вдруг в новом Debian решили, что он давно не обновлялся и вообще коммутировать DV-входы уже никому не нужно. Выкинули.

Ладно, решил скомпилить просто из официальных исходников.

Ok. Ищем исходники. Нашёл. https://alioth.debian.org/frs/?group_id=31092

Скачать исходник dvswitch-0.8.3.6.tar.gz от 2011 ещё года. Ого, wtf, какого ещё надо логин/пароль для скачивания?! Ну хрен с вами нашёл поиском на https://launchpad.net/ubuntu/ source/dvswitch/0.8.3.6-1.1 и скачал.

cmake и постепенно все нужные пакеты доставил и установил. Хотя отдельно замечу, что для установки всего для alsa оказалось проще всего apt-get build-dep alsa-tools иначе х.з., чего-то всё время не хватало.

Ладно, cmake отработал, получился Makefile.

make и читаем вывод.

[  7%] Built target dvsink-command
...
[ 14%] Built target dvsink-files
...
[ 22%] Built target dvsource-alsa
...
[ 29%] Built target dvsource-dvgrab
...
[ 38%] Built target dvsource-file
...

Отлично, всё собирается, ура... И вдруг.

Scanning dependencies of target dvswitch
[ 40%] Building CXX object src/CMakeFiles/dvswitch.dir/dvswitch.o
In file included from /home/val/dvswitch/dvswitch-0.8.3.6/src/dv_display_widget.hpp:13:0,
                 from /home/val/dvswitch/dvswitch-0.8.3.6/src/mixer_window.hpp:21,
                 from /home/val/dvswitch/dvswitch-0.8.3.6/src/dvswitch.cpp:20:
/home/val/dvswitch/dvswitch-0.8.3.6/src/auto_codec.hpp:22:36: error: ‘CodecID’ was not declared in this scope
 auto_codec auto_codec_open_decoder(CodecID);

И дальше ошибки. Так и хочется сказать, ну {.....} твою так перетак.

сам файл короткий

// Copyright 2008 Ben Hutchings <ben@decadent.org.uk>.
// See the file "COPYING" for licence details.

#ifndef INC_AUTO_CODEC_HPP
#define INC_AUTO_CODEC_HPP

#include "auto_handle.hpp"

#include "avcodec_wrap.h"

struct auto_codec_closer
{
    void operator()(AVCodecContext * context) const;
};
struct auto_codec_factory
{
    AVCodecContext * operator()() const { return 0; }
};
typedef auto_handle<AVCodecContext *, auto_codec_closer, auto_codec_factory>
auto_codec;

auto_codec auto_codec_open_decoder(CodecID);
void auto_codec_open_decoder(const auto_codec &, CodecID);
auto_codec auto_codec_open_encoder(CodecID);
void auto_codec_open_encoder(const auto_codec &, CodecID);

#endif // !INC_AUTO_CODEC_HPP

И вот по такой жаре ещё и сушить мозги выискивая где и что протухло, куда CodecID заховали и как пропатчить. Очень противно, ещё и результат не факт, что будет в течение ближайших часов. Подозреваю, что в libavcodec чего-то поменяли. Или не исключено в борьбе за соответствие стандартам gcc-4.9 чего-то не стал компилировать, что раньше компилировал. Или хотя cmake-у всего хватило, но чего-то неправильное скачал не то что надо на самом деле. Зла не хватает...

Подозреваю, что в libavcodec чего-то поменяли.

Там постоянно что-то меняют. CodecID переименовали в AVCodecID.

i-rinat ★★★★★ ()

Guix

В Guix'е если программу собрали и запустили однажды, то она будет собираться и запускаться всегда.

Но пока никто dvswitch для Guix'а не опакетил.

Camel ★★★★★ ()

С тех пор столько воды утекло что CodecID вряд ли будет единственной проблемой. И хорошо если это только вопрос переименования.

true_admin ★★★★★ ()
Ответ на: комментарий от Deleted

Чудес не бывает

И чудесным образом всё будет патчиться само?

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

Camel ★★★★★ ()
Ответ на: комментарий от vazgen05

Нет, это пример того, что скомпилировать что-то самому нетриваильная задача.

И насчёт древнего заброшенного. Современный аналог не подскажешь, которым можно в реалтайме микшировать куда хочется видеопотоки с нескольких видеокамер?

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от anonymous_incognito

Заброшенный хлам

микшировать куда хочется видеопотоки с нескольких видеокамер?

С нескольких DV-камер, так что

Пользуюсь древним заброшенным хламом
Во всем опенсорс виноват

Не хочу, однако, сказать ничего плохого про ваше оборудование. Но opensource ни в чём не виноват.

Camel ★★★★★ ()
Ответ на: комментарий от anonymous_incognito

Там хлам какой-то в исходниках. Попробовал собрать, словил несколько ошибок. Стал смотреть одну — жалуется на отсутствие определения переменной. А она на самом деле не определена! Не какие-то там поломанные API, сами исходники поломанные. Не понимаю, из чего вообще собирали пакеты в репозитории.

i-rinat ★★★★★ ()
Ответ на: Заброшенный хлам от Camel

С нескольких DV-камер, так что

Не хочу, однако, сказать ничего плохого про ваше оборудование. Но opensource ни в чём не виноват.

Оборудование не моё, но есть люди которые до сих пор пользуются им и которым эта программа нужна. Более того, которые на 50% только из-за неё и поставили Linux, а тут такая засада =)

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от i-rinat

Не понимаю, из чего вообще собирали пакеты в репозитории.

Тоже к сабжевому вопросу. Ладно, попробую Sid, видимо это самый простой путь.

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от anonymous_incognito

скомпилировать что-то самому нетриваильная задача.

Ну а как ты хотел, это не для конечного пользователя придумано. Попробуй такую же древнюю libavcodec взять.

Современный аналог

Я вообще далек от этой темы. В репах только такое есть:

% yaourt video mixer
1 aur/glmixer-svn 1.4.992-1

vazgen05 ★★★ ()
Ответ на: комментарий от anonymous_incognito

Не было печали, апдейтов накачали

Оборудование не моё, но есть люди которые до сих пор пользуются им и которым эта программа нужна.

А зачем им свежий дистрибутив? Почему бы им не продолжать пользоваться говном мамонта с рабочим dvswitch?

Если у них на этом большие бабки замешаны, то уж извини, пришло время инвестировать в свежее оборудование и программы.

Camel ★★★★★ ()
Ответ на: комментарий от i-rinat

Мы однажды проект целую неделю собирали, и оказалось надо знать магические комбинации команд. Например, используются классы вебсервисов, исходников от которых нет - их оказывается надо генерить вручную спецтулзой (которой нет в репозитории). Или сразу после чекаута менять вручную некоторые маленькие буквы в названиях файлов на большие и наоборот. Или подкладывать распакованые rpm'ки которых в репозитории нет (но их можно нагуглить)

может твой кот тоже надо уметь готовить как-то? Например, определения переменных генерятся отдельным запуском какого-то безвестного бат-файла. Плюс она захована как статик в каком-то отдалённом инклуде.

т.е. необязательно, что если переменная не объявлена, её действительно нет

stevejobs ★★★★☆ ()

Проект официально мёртв Для того, чтобы его скомпилить, придётся пересобирать и всякие libav в /usr/local.

То, что лежит в сиде - про него просто забыли. Там много трупиков.

Deleted ()
Ответ на: комментарий от devsdc

Как бы и не причём, но речь об общей что ли культуре и что подход «если надо исправь сам» работает сейчас не очень-то. Тут не то что исправить, банально скомпилировать то, что не в репах текущего дистра не всегда просто.

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от anonymous_incognito

если надо исправь сам

Кстати говоря, в данном конкретном случае (софт, на который уже даже авторы забили) это скорее плюс, чем минус.

devsdc ★★ ()
Ответ на: комментарий от anonymous_incognito

Но да, злоупотребление этим подходом - это мерзко.

devsdc ★★ ()
Ответ на: комментарий от anonymous_incognito

Кстати, там в обсуждении похорон dvswitch, обсуждается gst-switch (которому делают новую морду), попробуй его, может оно лучше будет? Я почитал описание - там даже opencv используется, для слежения за выступающим.

Deleted ()
Ответ на: комментарий от EXL

Кстати, полагаться на LIBAVCODEC_VERSION_MAJOR — плохой способ. Из-за долгоживущих веток и сложного слияния бывает так, что в старых версиях фичи нет, с какой-то версии она появляется, потом исчезает, потом снова появляется.

i-rinat ★★★★★ ()

Протухло, потому и выбросили :}

Deleted ()
Ответ на: комментарий от i-rinat

Этакие тесты autotools внутри CMake. Круто, не знал, что так можно.

Но подобное не будет работать со старой версией ffmpeg, в полудохлых и древних дистрах. То есть AV_CODEC_ID_NONE как бы есть, но он CODEC_ID_NONE. В итоге тесты выдадут фейлы на старой библиотеке.

Вот подобные переименования и излом API жутко бесят. Ну и накой им понадобилось добавить префикс AV к сущностям? Чтобы перфекционизм свой потешить? А коль переименовали, почему не добавили сахарку для совместимости?

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

EXL ★★★★★ ()
Ответ на: комментарий от EXL

То есть AV_CODEC_ID_NONE как бы есть, но он CODEC_ID_NONE. В итоге тесты выдадут фейлы на старой библиотеке.

На фейл сборки и был расчёт. Потом в нужных местах вставляешь переименования или функции-обёртки:

#if !HAVE_AVCodecID
#define AV_CODEC_ID_H264        CODEC_ID_H264
#endif // !HAVE_AVCodecID

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

А если вообще хедеров ffmpeg не будет, CMake сам будет ругаться. Круто, возьму себе такой хинт на вооружение, спасибо.

EXL ★★★★★ ()
Ответ на: комментарий от Deleted

Нет, она будет судя по всему собираться с прибитыми гвоздями версиями библиотек(привет дыры!)

Pinkbyte ★★★★★ ()
Ответ на: комментарий от anonymous_incognito

Нет, это пример того, что скомпилировать что-то самому нетриваильная задача.

То ли дело закрытый код - компиляй, не хочу!

Axon ★★★★★ ()
Ответ на: комментарий от EXL

Вот подобные переименования и излом API жутко бесят. Ну и накой им понадобилось добавить префикс AV к сущностям? Чтобы перфекционизм свой потешить? А коль переименовали, почему не добавили сахарку для совместимости?

Они там не только CodecID переименовали, а много чего ещё поломали, уже даже не стал разбираться детальнее.

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от Deleted

Кстати, там в обсуждении похорон dvswitch, обсуждается gst-switch (которому делают новую морду), попробуй его, может оно лучше будет?

Спасибо, не знаю как оно работать будет (мне самому сейчас не на чём проверить), но по крайней мере собралось после удаления -Werror, что не есть хорошо, вообще говоря, так что ещё надо смотреть что вышло.

anonymous_incognito ★★★★★ ()
Ответ на: комментарий от Chaser_Andrey

По разному бывает. =) Но «срок годности» у него обычно всё-таки не меньше 10 лет, если разработчики не совсем криворукие и не прибивали гвоздями системные вещи. Но это достигается часто за счёт подхода «всё своё ношу с собой», в отличие от. Но с таким подходом и в Linux бинарники ещё 90-х годов могут запуститься. Так что всё имеет плюсы и минусы.

anonymous_incognito ★★★★★ ()

но ведь это же well known?

столкнулся с этим 13 лет назад, когда только перешел на линукс. и когда с лимитом 20 мегабайт в месяц не качал rpmки с сотметровыми зависимостями, а компилял исходники под себя со своим старым дистром, который смог найти на местном рынке

wieker ★★ ()
Ответ на: комментарий от wieker

Известно-то известно, но сейчас обычно всё-таки хватает софта из репов, а когда не хватает, то вот такие приключения бывают.

anonymous_incognito ★★★★★ ()

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

MiniRoboDancer ★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.