Медиакомбайн VLC вызывает у меня исключительно теплые чувства. Отличная поддержка видео- и аудиоформатов без установки кодеков, широкие возможности и высокое качество работы сделали эту программу неотъемлемым атрибутом компьютеров, за которыми я провожу свое время.
Я стараюсь использовать актуальные версии этого приложения, и вчера я решил обновить VLC в своём Debian Squeeze. Выкачав последние исходники, я обнаружил, что не могу их скомпилировать.
Вообще, сборка последних версий VLC в таком "старье", как замшелое окружение стабильных версий Debian - занятие, требующее дополнительных телодвижений. Как минимум, придется обновить пакет libavcodec52 для получения совместимой версии кодировщика ffmpeg. Можно делать это вручную, можно подключить репозиторий Debian Multimedia и обновить пакет оттуда. Я лично подключил репозиторий.
Располагая свежим ffmpeg, я выкачал исходники VLC 2.0.1, но при компиляции получил странным образом выглядящую ошибку:
switcher.c: In function 'VideoGetBuffer':
switcher.c:847:34: error: 'FF_I_TYPE' undeclared (first use in this function)
switcher.c:847:34: note: each undeclared identifier is reported only once for each function it appears in
switcher.c:856:34: error: 'FF_P_TYPE' undeclared (first use in this function)
switcher.c:935:10: error: 'FF_B_TYPE' undeclared (first use in this function)
Пройдясь по спискам рассылки VLC, я обнаружил источник проблемы.
Появляется вышеуказанная ошибка при компиляции исходников с опцией --enable-switcher . В заголовочном файле исходников ffmpeg-0.10.2 (/usr/include/libavcodec/avcodec.h) присутствует вот такое определение:
[code]
#if FF_API_OLD_FF_PICT_TYPES
/* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values */
#define FF_I_TYPE AV_PICTURE_TYPE_I ///< Intra
#define FF_P_TYPE AV_PICTURE_TYPE_P ///< Predicted
#define FF_B_TYPE AV_PICTURE_TYPE_B ///< Bi-dir predicted
#define FF_S_TYPE AV_PICTURE_TYPE_S ///< S(GMC)-VOP MPEG4
#define FF_SI_TYPE AV_PICTURE_TYPE_SI ///< Switching Intra
#define FF_SP_TYPE AV_PICTURE_TYPE_SP ///< Switching Predicted
#define FF_BI_TYPE AV_PICTURE_TYPE_BI
#endif
[/code]
Т.е. использование констант FF_*_TYPE является устаревшим для свежих версий ffmpeg. Что есть свежие версии? Ответ на вопрос дает файл /usr/include/libavcodec/version.h:
[code]#define FF_API_OLD_FF_PICT_TYPES (LIBAVCODEC_VERSION_MAJOR < 54)[/code] Т.е. для версий ниже 54ой следует использовать старые константы.
Казалось бы, должно работать. Авторы исходников позаботились об совместимости со старыми версиями библиотек. Но авторы VLC, по-видимому, не учли этот момент, и в исходниках самого VLC в файле /modules/codec/avcodec.h, который как раз и включен в злосчастный switcher.c, мы находим определение:
[code]#if LIBAVCODEC_VERSION_MAJOR < 54
# define AV_PICTURE_TYPE_B FF_B_TYPE
# define AV_PICTURE_TYPE_I FF_I_TYPE
# define AV_PICTURE_TYPE_P FF_P_TYPE[/code]
Собранные вместе, эти файлы создают зацикленные друг на друга директивы (AV_PICTURE_TYPE_I -> FF_I_TYPE -> AV_PICTURE_TYPE_I), что сводит с ума компилятор GCC, и он попросту игнорирует определение всех этих констант.
Ричард Гренвиль, выполнивший этот анализ кода, просто заменил все константы FF_*_TYPE на AV_PICTURE_TYPE_* в файле /modules/stream_out/switcher.c. Я сделал то же самое, и VLC 2.0.1 был успешно собран и установлен.
Подведем итоги
Чтобы заполучить VLC 2.0.1 на Debian 6 Squeeze (или другом любом дистрибутиве с libavcodec версии меньше 54), нужно:
- Заменить все константы FF_*_TYPE на AV_PICTURE_TYPE_* в файле /modules/stream_out/switcher.c
- Подключить репозиторий Debian-Multimedia и выполнить apt-get install libavcodec52
- Выполнить команды компиляции, которые указаны в руководстве по самостоятельной сборке плеера:
[code]apt-get dep-build vlc
./bootstrap
./configure --prefix=/usr --enable-xvideo --enable-sdl --enable-wma-fixed --enable-shine --enable-omxil --enable-iomx --enable-crystalhd --enable-mad --enable-avcodec --enable-libva --enable-dxva2 --enable-switcher --enable-avformat --enable-swscale --enable-twolame --enable-real --enable-a52 --enable-dca --enable-flac --enable-libmpeg2 --enable-vorbis --enable-tremor --enable-speex --enable-theora --enable-dirac --enable-x264 --enable-png --enable-libass --enable-kate --with-x --enable-fontconfig --enable-freetype --enable-pulse --enable-alsa --enable-oss --enable-portaudio --enable-jack --enable-skins2 --enable-libtar --enable-qt4 --enable-xosd
make
checkinstall --nodoc --fstran=no[/code]
Кстати, мою готовую сборку для Debian x64 вы можете заполучить здесь. Приятной компиляции!
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Спасибо за проделанную работу)
@Дмитрий
Всегда рад
вот так вот пишет мне на 2.6.32-5-686 debian 6
~/vlc-2.0.1# apt-get build-dep vlc
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Пакеты, имеющие неудовлетворённые зависимости:
libnotify-dev : Зависит: libgtk2.0-dev (>= 2.18) но он не будет установлен
librsvg2-dev : Зависит: libgtk2.0-dev (>= 2.16.0-1) но он не будет установлен
Зависит: libcairo2-dev (>= 1.2.0) но он не будет установлен
xulrunner-dev : Зависит: libnss3-dev но он не будет установлен
E: Зависимости для сборки vlc не могут быть удовлетворены.
что с этим делать не знаю , подскажите плиззз
http://packages.debian.org/squeeze/libgtk2.0-dev, текущая версия 2.20.1-2.
По каким-то причинам пакетный менеджер у вас этот пакет не находит
Ваш /etc/apt/sources.list покажите, плиз?