# TODO
-# - libnut enabled no
+# - libnut enabled no (http://www.nut-container.org/)
#
# Conditional build:
-%bcond_with amr # build 3GPP Adaptive Multi Rate (AMR) speech codec
+%bcond_with amr # 3GPP Adaptive Multi Rate (AMR) codec support; makes package non-distributable
%bcond_without autoreqdep # don't care about package name deps generated by rpm
%bcond_without imlib2 # don't build imlib2 vhook module
#
-%define _snap 2007-01-28
+%define _snap 2008-09-08
%define snap %(echo %{_snap} | tr -d -)
-%define _rel 0.1
+%define rel 1
Summary: Realtime audio/video encoder and streaming server
-Summary(pl): Koder audio/wideo czasu rzeczywistego oraz serwer strumieni
+Summary(pl.UTF-8): Koder audio/wideo czasu rzeczywistego oraz serwer strumieni
Name: ffmpeg
Version: 0.4.9
-Release: 3.%{snap}.%{_rel}
+Release: 4.%{snap}.%{rel}
# LGPL or GPL, chosen at configure time (GPL version is more featured)
-# (postprocessing, a52, xvid, x264, dts, faad)
-License: GPL with LGPL parts
+# (postprocessing, ac3, xvid, x264, faad)
+License: GPL v2+ with LGPL v2.1+ parts
Group: Applications/Multimedia
#Source0: http://dl.sourceforge.net/ffmpeg/%{name}-%{version}-pre1.tar.gz
Source0: http://ffmpeg.mplayerhq.hu/%{name}-export-snapshot.tar.bz2
-# Source0-md5: 9d428b61ab99f838c42958d421084ab3
+# Source0-md5: 9b2ef1d3f550420264124836107fc008
Source1: ffserver.init
Source2: ffserver.sysconfig
Source3: ffserver.conf
-Patch0: %{name}-link.patch
-Patch2: %{name}-gcc4.patch
-Patch3: %{name}-system-amr.patch
-Patch4: %{name}-x264-symbol.patch
-Patch5: %{name}-kill-mabi_altivec.patch
-Patch6: %{name}-img_convert_symbol.patch
+Patch0: %{name}-img_convert_symbol.patch
URL: http://ffmpeg.mplayerhq.hu/
BuildRequires: SDL-devel
%if %{with amr}
-BuildRequires: amrnb-devel
-BuildRequires: amrwb-devel >= 5.3.0
+BuildRequires: amrnb-devel >= 6.1.0.4
+BuildRequires: amrwb-devel >= 7.0.0.1
%endif
+BuildRequires: dirac-devel
BuildRequires: faac-devel
BuildRequires: faad2-devel
BuildRequires: freetype-devel
# require version with altivec support fixed
BuildRequires: gcc >= 5:3.3.2-3
%endif
-%{?with_imlib2:BuildRequires: imlib2-devel >= 1.1.0-2}
+BuildRequires: a52dec-libs-devel
+%{?with_imlib2:BuildRequires: imlib2-devel >= 1.3.0}
BuildRequires: lame-libs-devel
-BuildRequires: libdts-devel
+BuildRequires: libdc1394-devel
BuildRequires: libgsm-devel
-BuildRequires: libogg-devel
BuildRequires: libraw1394-devel
-BuildRequires: libtheora >= 1.0-0.alpha7
+BuildRequires: libtheora-devel >= 1.0-0.alpha7
BuildRequires: libtool >= 2:1.4d-3
BuildRequires: libvorbis-devel
-BuildRequires: libx264-devel >= 0.1.2-1.20061024_2245.1
+BuildRequires: libx264-devel >= 0.1.2-1.20080801
%ifarch %{ix86}
%ifnarch i386 i486
BuildRequires: nasm
%endif
%endif
BuildRequires: perl-tools-pod
-BuildRequires: rpmbuild(macros) >= 1.268
+BuildRequires: pkgconfig
+BuildRequires: rpmbuild(macros) >= 1.470
+BuildRequires: schroedinger-devel
BuildRequires: tetex
BuildRequires: texinfo
%{?with_amr:BuildRequires: unzip}
encoding. Sound is compressed in MPEG audio layer 2 or using an AC3
compatible stream.
-%description -l pl
+%description -l pl.UTF-8
ffmpeg jest bardzo szybkim koderem audio/wideo w czasie rzeczywistym
-oraz serwerem strumieni multimedialnych. ffmpeg potrafi zrzucaæ dane
-ze standardowego urz±dzenia Video4Linux i przekonwertowaæ je w kilka
-formatów plików bazuj±cych na kodowaniu DCT/kompensacji ruchu. D¼wiêk
-jest kompresowany do strumienia MPEG audio layer 2 lub u¿ywaj±c
+oraz serwerem strumieni multimedialnych. ffmpeg potrafi zrzucać dane
+ze standardowego urządzenia Video4Linux i przekonwertować je w kilka
+formatów plików bazujących na kodowaniu DCT/kompensacji ruchu. Dźwięk
+jest kompresowany do strumienia MPEG audio layer 2 lub używając
strumienia kompatybilnego z AC3.
%package libs
Summary: ffmpeg libraries
-Summary(pl): Biblioteki ffmpeg
+Summary(pl.UTF-8): Biblioteki ffmpeg
Group: Libraries
%description libs
This package contains ffmpeg shared libraries.
-%description libs -l pl
-Ten pakiet zawiera biblioteki wspó³dzielone ffmpeg.
+%description libs -l pl.UTF-8
+Ten pakiet zawiera biblioteki współdzielone ffmpeg.
%package devel
Summary: ffmpeg header files
-Summary(pl): Pliki nag³ówkowe ffmpeg
+Summary(pl.UTF-8): Pliki nagłówkowe ffmpeg
Group: Development/Libraries
Requires: %{name}-libs = %{version}-%{release}
# for libavcodec:
Requires: amrnb-devel
Requires: amrwb-devel >= 5.3.0
%endif
+Requires: dirac-devel
Requires: faac-devel
Requires: faad2-devel
Requires: lame-libs-devel
-Requires: libdts-devel
Requires: libgsm-devel
Requires: libtheora-devel >= 1.0-0.alpha7
Requires: libvorbis-devel
%description devel
ffmpeg header files.
-%description devel -l pl
-Pliki nag³ówkowe ffmpeg.
+%description devel -l pl.UTF-8
+Pliki nagłówkowe ffmpeg.
%package static
Summary: ffmpeg static libraries
-Summary(pl): Statyczne biblioteki ffmpeg
+Summary(pl.UTF-8): Statyczne biblioteki ffmpeg
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
%description static
ffmpeg static libraries (libavcodec and libavformat).
-%description static -l pl
+%description static -l pl.UTF-8
Statyczne biblioteki ffmpeg (libavcodec i libavformat).
%package ffplay
Summary: FFplay - SDL-based media player
-Summary(pl): FFplay - odtwarzacz mediów oparty na SDL
+Summary(pl.UTF-8): FFplay - odtwarzacz mediów oparty na SDL
Group: Applications/Multimedia
Requires: %{name}-libs = %{version}-%{release}
libraries and the SDL library. It is mostly used as a test bench for
the various APIs of FFmpeg.
-%description ffplay -l pl
-FFplay to bardzo prosty i przeno¶ny odtwarzacz mediów u¿ywaj±cy
-bibliotek FFmpeg oraz biblioteki SDL. Jest u¿ywany g³ównie do
-testowania ró¿nych API FFmpeg.
+%description ffplay -l pl.UTF-8
+FFplay to bardzo prosty i przenośny odtwarzacz mediów używający
+bibliotek FFmpeg oraz biblioteki SDL. Jest używany głównie do
+testowania różnych API FFmpeg.
%package vhook-imlib2
Summary: imlib2 based hook
-Summary(pl): Modu³ przej¶ciowy oparty o imlib2
+Summary(pl.UTF-8): Moduł przejściowy oparty o imlib2
Group: Libraries
Requires: %{name}-libs = %{version}-%{release}
is passed through strftime so that it is easy to imprint the date and
time onto the image.
-%description vhook-imlib2 -l pl
-Ten modu³ implementuje tekstow± nak³adkê dla obrazu. Aktualnie
-obs³uguje sta³± nak³adkê lub wczytywanie tekstu z pliku. £añcuch jest
-przepuszczany przez strftime, wiêc ³atwo umie¶ciæ datê i czas na
+%description vhook-imlib2 -l pl.UTF-8
+Ten moduł implementuje tekstową nakładkę dla obrazu. Aktualnie
+obsługuje stałą nakładkę lub wczytywanie tekstu z pliku. Łańcuch jest
+przepuszczany przez strftime, więc łatwo umieścić datę i czas na
obrazie.
%package ffserver
Summary: FFserver video server
-Summary(pl): FFserver - serwer strumieni obrazu
+Summary(pl.UTF-8): FFserver - serwer strumieni obrazu
Group: Daemons
Requires(post,preun): /sbin/chkconfig
Requires: %{name}-libs = %{version}-%{release}
feeds (you can seek to positions in the past on each live feed,
provided you specify a big enough feed storage in ffserver.conf).
-%description ffserver -l pl
-FFserver to serwer strumieni dla d¼wiêku i obrazu. Obs³uguje kilka
-¼róde³ na ¿ywo, przekazywanie strumieni z plików i przesuwanie w
-czasie dla ¼róde³ na ¿ywo (mo¿na przeskakiwaæ na po³o¿enia w
-przesz³o¶ci dla ka¿dego ¼ród³a na ¿ywo, pod warunkiem odpowiednio
-du¿ej przestrzeni na dane skonfigurowanej w ffserver.conf).
+%description ffserver -l pl.UTF-8
+FFserver to serwer strumieni dla dźwięku i obrazu. Obsługuje kilka
+źródeł na żywo, przekazywanie strumieni z plików i przesuwanie w
+czasie dla źródeł na żywo (można przeskakiwać na położenia w
+przeszłości dla każdego źródła na żywo, pod warunkiem odpowiednio
+dużej przestrzeni na dane skonfigurowanej w ffserver.conf).
%prep
%setup -q -n %{name}-export-%{_snap}
%patch0 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
+
+# package the grep result for mplayer, the result formatted as mplayer/configure
+cat <<EOF > ffmpeg-config
+#! /bin/sh
+_libavdecoders_all="`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' libavcodec/allcodecs.c | tr '[a-z]' '[A-Z]'`"
+_libavencoders_all="`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' libavcodec/allcodecs.c | tr '[a-z]' '[A-Z]'`"
+_libavparsers_all="`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' libavcodec/allcodecs.c | tr '[a-z]' '[A-Z]'`"
+_libavbsfs_all="`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' libavcodec/allcodecs.c | tr '[a-z]' '[A-Z]'`"
+_libavdemuxers_all="`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' libavformat/allformats.c | tr '[a-z]' '[A-Z]'`"
+_libavmuxers_all="`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' libavformat/allformats.c | tr '[a-z]' '[A-Z]'`"
+_libavprotocols_all="`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' libavformat/allformats.c | tr '[a-z]' '[A-Z]'`"
+EOF
+cat <<'EOF' >> ffmpeg-config
+
+case "$1" in
+--decoders)
+ echo $_libavdecoders_all
+ ;;
+--encoders)
+ echo $_libavencoders_all
+ ;;
+--parsers)
+ echo $_libavparsers_all
+ ;;
+--bsfs)
+ echo $_libavbsfs_all
+ ;;
+--demuxers)
+ echo $_libavdemuxers_all
+ ;;
+--muxers)
+ echo $_libavmuxers_all
+ ;;
+--protocols)
+ echo $_libavprotocols_all
+ ;;
+*)
+ cat <<USAGE
+Usage: $0 [OPTION]
+Options:
+ --decoders
+ --encoders
+ --parsers
+ --bsfs
+ --demuxers
+ --muxers
+ --protocols
+USAGE
+ exit 1;;
+esac
+
+exit 0
+EOF
%build
# notes:
# - it's not autoconf configure
-# - --disable-debug, --disable-opts, tune=generic causes not to override our optflags
+# - --disable-debug, --disable-optimizations, tune=generic causes not to override our optflags
./configure \
+ --arch=%{_target_base_arch} \
--prefix=%{_prefix} \
--libdir=%{_libdir} \
--shlibdir=%{_libdir} \
--mandir=%{_mandir} \
- --disable-strip \
- --enable-a52 \
- --enable-a52bin \
- --enable-dts \
- --enable-faac \
- --enable-faad \
- --enable-faadbin \
+ --cc="%{__cc}" \
+ --extra-cflags="-D_GNU_SOURCE=1 %{rpmcppflags} %{rpmcflags}" \
+ --extra-ldflags="%{rpmldflags}" \
+ --disable-debug \
+ --disable-optimizations \
+ --disable-stripping \
--enable-gpl \
+ --enable-liba52 \
+ --enable-liba52bin \
+ --enable-libfaac \
+ --enable-libfaad \
+ --enable-libfaadbin \
+ --enable-libdc1394 \
+ --enable-libdirac \
--enable-libgsm \
- --enable-libogg \
+ --enable-libmp3lame \
+ --enable-libschroedinger \
--enable-libtheora \
- --enable-mp3lame \
- --enable-pp \
+ --enable-libvorbis \
+ --enable-libx264 \
+ --enable-libxvid \
+ --enable-postproc \
--enable-pthreads \
--enable-shared \
- --enable-swscaler \
- --enable-vorbis \
- --enable-x264 \
- --enable-xvid \
+ --enable-swscale \
%ifnarch %{ix86} %{x8664}
--disable-mmx \
%endif
--disable-mmx \
%endif
%if %{with amr}
- --enable-amr_nb \
- --enable-amr_wb \
+ --enable-nonfree \
+ --enable-libamr-nb \
+ --enable-libamr-wb
%endif
- --cc="%{__cc}" \
- --extra-cflags="%{rpmcflags}" \
- --extra-ldflags="%{rpmldflags}" \
- --disable-debug \
- --disable-opts \
%{__make}
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{_sbindir},/etc/{sysconfig,rc.d/init.d}} \
+ $RPM_BUILD_ROOT%{_includedir}/ffmpeg \
$RPM_BUILD_ROOT/var/{cache,log}/ffserver
%{__make} install \
DESTDIR=$RPM_BUILD_ROOT
-install xvmc_render.h $RPM_BUILD_ROOT%{_includedir}/ffmpeg
install config.h $RPM_BUILD_ROOT%{_includedir}/ffmpeg
-install libavformat/allformats.h $RPM_BUILD_ROOT%{_includedir}/ffmpeg
+install libavutil/intreadwrite.h $RPM_BUILD_ROOT%{_includedir}/libavutil
install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/ffserver
install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/ffserver
install %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/ffserver.conf
mv -f $RPM_BUILD_ROOT{%{_bindir},%{_sbindir}}/ffserver
+# install as ffmpeg-avconfig to avoid with possible programs looking for
+# ffmpeg-config and expecting --libs output from it which is not implemented
+# simple to do (by querying pkgconfig), but why?
+install ffmpeg-config $RPM_BUILD_ROOT%{_bindir}/ffmpeg-avconfig
+
%clean
rm -rf $RPM_BUILD_ROOT
%files libs
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libavcodec.so.*.*.*
+%attr(755,root,root) %{_libdir}/libavdevice.so.*.*.*
%attr(755,root,root) %{_libdir}/libavformat.so.*.*.*
%attr(755,root,root) %{_libdir}/libavutil.so.*.*.*
%attr(755,root,root) %{_libdir}/libpostproc.so.*.*.*
%attr(755,root,root) %{_libdir}/libswscale.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libavcodec.so.51
+%attr(755,root,root) %ghost %{_libdir}/libavdevice.so.52
+%attr(755,root,root) %ghost %{_libdir}/libavformat.so.52
+%attr(755,root,root) %ghost %{_libdir}/libavutil.so.49
+%attr(755,root,root) %ghost %{_libdir}/libpostproc.so.51
+%attr(755,root,root) %ghost %{_libdir}/libswscale.so.0
%dir %{_libdir}/vhook
%attr(755,root,root) %{_libdir}/vhook/drawtext.so
%attr(755,root,root) %{_libdir}/vhook/fish.so
%defattr(644,root,root,755)
%doc doc/optimization.txt
%attr(755,root,root) %{_libdir}/libavcodec.so
+%attr(755,root,root) %{_libdir}/libavdevice.so
%attr(755,root,root) %{_libdir}/libavformat.so
%attr(755,root,root) %{_libdir}/libavutil.so
%attr(755,root,root) %{_libdir}/libpostproc.so
%attr(755,root,root) %{_libdir}/libswscale.so
+%attr(755,root,root) %{_bindir}/ffmpeg-avconfig
%{_includedir}/ffmpeg
-%{_includedir}/postproc
+%{_includedir}/libavcodec
+%{_includedir}/libavdevice
+%{_includedir}/libavformat
+%{_includedir}/libavutil
+%{_includedir}/libpostproc
+%{_includedir}/libswscale
%{_pkgconfigdir}/*.pc
%files static