Mplayer для OpenSolaris

Приложение Mplayer — это открытая кроссплатформенная программа с широкими возможностями для просмотра видео и прослушивания музыки в различных форматах (http://www.mplayerhq.hu/DOCS/codecs-status.html).

Пакет с Mplayer для OpenSolaris доступен из репозитория http://ips.homeunix.com:10906/ . Однако если данный пакет будет установлен на компьютер с процессором AMD Duron 750MGHz, то приложение при запуске завершится с ошибкой, так как процессор не держивает некоторые инструкции из бинарного кода. В этом случае, если бы исходный код был закрыт, пришлось бы искать другую программу, а в данном случае мы можем воспользоваться преимуществом от свободного доступа к коду.

По адресу ftp://ftp.mplayerhq.hu/MPlayer/releases/ находим желаемую версию исходников и скачиваем ее, распаковывает и переходим в получившийся каталог. Например так:
wget ftp://ftp.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc3.tar.bz2
tar xf MPlayer-1.0rc3.tar.bz2
cd MPlayer-1.0rc3

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

$ ./configure —enable-gui
Detected operating system: SunOS
Detected host architecture: i386
Checking for host cc … gcc
Checking for cross compilation … yes
./configure[1579]: gcc: not found [No such file or directory]
./configure[1584]: gcc: not found [No such file or directory]
./configure[1611]: gcc: not found [No such file or directory]
./configure: line 1617: ./cpuinfo: not found
./configure: line 1618: ./cpuinfo: not found
./configure: line 1619: ./cpuinfo: not found
./configure: line 1620: ./cpuinfo: not found
./configure: line 1621: ./cpuinfo: not found
./configure: line 1623: ./cpuinfo: not found
Checking for CPU vendor … (::)
Checking for CPU type …
Checking for mtrr support … auto
Checking for GCC & CPU optimization abilities … CPU optimization disabled. CPU not recognized or your compiler is too old.
error
Checking for byte order … failed to autodetect byte order, defaulting to little-endian
Checking for extern symbol prefix …
Error: Symbol mangling check failed.

Check «configure.log» if you do not understand why it failed.

Строка «gcc: not found» подсказывает причину остановки конфигурирования — отсутствие компилятора gcc. Установим его и заголовочные файл для работы с Xorg.

pfexec pkg install gcc-dev SUNWxorg-headers

Следующий запуск скрипта конфигурирования приведет к следующему сообщению об ошибке:

/usr/bin/esd-config[42]: pkg-config: not found [No such file or directory]

Checking for GTK+ version … GTK-2 devel packages were not found, trying GTK 1.2
Checking for GTK version …
Error: The GUI requires GTK devel packages (which were not found).

Проблема решается установкой пакета, содержащего pkg-config и файлы для разработки на GTK

pfexec pkg install SUNWgnome-common-devel

Повторный запуск ./configure завершился удачно:

Config files successfully generated by ./configure —enable-gui !

Install prefix: /usr/local
Data directory: /usr/local/share/mplayer
Config direct.: /usr/local/etc/mplayer

Byte order: little-endian
Optimizing for: athlon

Languages:
Messages/GUI: en
Manual pages: en

Enabled optional drivers:
Input: dvdnav(internal) ftp tv libdvdcss(internal) dvdread(internal) vcd smb network
Codecs: xvid libdv libavcodec(internal) qtx xanim win32 faad2(internal) faac libdca libmpeg2(internal) liba52(internal) mp3lib(internal) libtheora speex tremor(internal) libmad
Audio output: esd oss sdl mpegpes(file)
Video output: sdl pnm jpeg png mpegpes(file) xvidix cvidix opengl vdpau xv x11 xover yuv4mpeg md5sum tga

Disabled optional drivers:
Input: vstream pvr radio tv-teletext tv-v4l2 tv-v4l1 tv-dshow live555 nemesi cddb cdda dvb
Codecs: libschroedinger libdirac x264 libamr_wb libamr_nb real musepack toolame twolame liblzo gif
Audio output: sun alsa openal jack pulse nas arts v4l2 ivtv dxr2
Video output: zr zr2 v4l2 ivtv dxr3 dxr2 vesa gif89a fbdev svga caca aa ggi xmga mga winvidix 3dfx dga xvmc dfbmga directfb bl xvr100 tdfx_vid wii s3fb tdfxfb

‘config.h’ and ‘config.mak’ contain your configuration options.
Note: If you alter theses files (for instance CFLAGS) MPlayer may no longer
compile *** DO NOT REPORT BUGS if you tweak these files ***

‘make’ will now compile MPlayer and ‘make install’ will install it.
Note: On non-Linux systems you might need to use ‘gmake’ instead of ‘make’.

Please check mtrr settings at /proc/mtrr (see DOCS/HTML/en/video.html#mtrr)

Check configure.log if you wonder why an autodetection failed (make sure
development headers/packages are installed).

NOTE: The —enable-* parameters unconditionally force options on, completely
skipping autodetection. This behavior is unlike what you may be used to from
autoconf-based configure scripts that can decide to override you. This greater
level of control comes at a price. You may have to provide the correct compiler
and linker flags yourself.
If you used one of these options (except —enable-gui and similar ones that
turn on internal features) and experience a compilation or linking failure,
make sure you have passed the necessary compiler/linker flags to configure.

If you suspect a bug, please read DOCS/HTML/en/bugreports.html.

Следуя рекомендациям, вводим команду

$ gmake
help/help_create.sh help/help_mp-en.h UTF-8
cc -O -DCODECS2HTML -I. -o codec-cfg codec-cfg.c
In file included from libmpdemux/aviheader.h:8,
from codec-cfg.c:41:
./mpbswap.h:9: error: conflicting types for ‘swab’
/usr/include/stdlib.h:161: error: previous declaration of ‘swab’ was here
./mpbswap.h:9: error: conflicting types for ‘swab’
/usr/include/stdlib.h:161: error: previous declaration of ‘swab’ was here
awk -f vidix/pci_db2c.awk vidix/pci.db 1

Из выведенной командой сборки информации следует, что удобно, что не установлена SunStudio, так как сс в нашем случае это gcc, а не ее сишный компилятор. Ошибка заключается в том, что функция swab объявлена дважды: один раз в системном файле /usr/include/stdlib.h, другой — во внутреннем mpbswap.h. Решение проблемы — в файле config.h делаем изменения, говорящие, что следует обращаться к функции из системного каталога:
-#undef HAVE_SWAB
+#define HAVE_SWAB 1

Следующая ошибка компиляции возникла при компиляции файла osdep/swab.c, в котором определена функция swab и в который подключен заголовочный файл содержащий другое объявление swab.

cc -Wundef -Wdisabled-optimization -Wdeclaration-after-statement -std=gnu99 -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -march=athlon -mtune=athlon -pipe -ffast-math -fomit-frame-pointer -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -I. -I/usr/X11/include -I/usr/include/SDL -D_REENTRANT -Ilibdvdread4 -I/usr/include/freetype2 -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/X11/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -c -o osdep/swab.o osdep/swab.c
osdep/swab.c:25: error: conflicting types for ‘swab’
/usr/include/stdlib.h:161: error: previous declaration of ‘swab’ was here
osdep/swab.c:25: error: conflicting types for ‘swab’
/usr/include/stdlib.h:161: error: previous declaration of ‘swab’ was here

Проблема решается просто — определение функции swab следует закомментировать, чтобы оно не мешалось, раз не будет использоваться.

osdep/swab.c
/*
#include «mpbswap.h»
#include

void swab(const void *from, void *to, ssize_t n) {
const int16_t *in = (int16_t*)from;
int16_t *out = (int16_t*)to;
int i;
n /= 2;
for (i = 0 ; i < n; i++) {
out[i] = bswap_16(in[i]);
}
}
*/

В конце, на этапе линковки, сборка завершилась ошибкой:
cc: unrecognized option `-rdynamic’
Решение проблемы — переход в каталог, где выполнялась команда сборки и выполнение в каталоге той же команды линковки, только без опции -rdynamic.

Mplayer собран, однако тормозит при проигрывании видео. Что очень удобно, программа выводит на консоль подсказки, как повысить производительность через задание дополнительных параметров командной строки. На основе этих данных был создан скрипт mplayer.sh, которым фильмы проигрывались уже нормально. Ниже приведен его текст.

#!/bin/sh
exec mplayer -framedrop -cache 8192 -vfm ffmpeg -lavdopts lowres=1:skiploopfilter=all «$@»

HostLife - лучший платный хостинг


Systemintegra

Speak Your Mind

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Пожертвование