Quantcast
Channel: Linux — Winreview.ru
Viewing all articles
Browse latest Browse all 34

Самостоятельная сборка VLC 2.0.1 под Linux

$
0
0

Медиакомбайн 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) присутствует  вот такое определение:

Код: Выделить всё

#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

Т.е. использование констант FF_*_TYPE является устаревшим для свежих версий ffmpeg. Что есть свежие версии? Ответ на вопрос дает файл /usr/include/libavcodec/version.h:

Код: Выделить всё
#define FF_API_OLD_FF_PICT_TYPES (LIBAVCODEC_VERSION_MAJOR < 54)
Т.е. для версий ниже 54ой следует использовать старые константы.

Казалось бы, должно работать. Авторы исходников позаботились об совместимости со старыми версиями библиотек. Но авторы VLC, по-видимому, не учли этот момент, и в исходниках самого VLC в файле /modules/codec/avcodec.h, который как раз и включен в злосчастный switcher.c, мы находим определение:

Код: Выделить всё
#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

Собранные вместе, эти файлы создают зацикленные друг на друга директивы (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), нужно:

  1. Заменить все константы FF_*_TYPE на AV_PICTURE_TYPE_* в файле /modules/stream_out/switcher.c
  2. Подключить репозиторий Debian-Multimedia и выполнить apt-get install libavcodec52
  3. Выполнить команды компиляции, которые указаны в руководстве по самостоятельной сборке плеера:
    Код: Выделить всё
    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

Кстати, мою готовую сборку для Debian x64 вы можете заполучить здесь. Приятной компиляции!


Viewing all articles
Browse latest Browse all 34

Trending Articles