[bglug] AMR_NB (3gp support) per gentoo

k|b|s kbs@bglug.it
Mar 14 Feb 2006 10:15:41 CET


L'ebuild di serie di ffmpeg per gentoo non ha il supporto per amr_nb, in
pratica i filmati in 3gp per i cellulari. C'Ú un ebuild in rete ma Ú per una
vecchia versione e tra l'altro nun funge. Stow non Ú di aiuto, pertanto ho
fatto l'ebuild.

Cosa fare:
Un emerge sync dovrebbe darvi come ultima versione disponibile
ffmpeg-0.4.9_p20051216.ebuild.
Assicuratevi di avere il port_overlay nel make conf (usr/local/portage)
# mkdir -p /usr/local/portage/media-video/ffmpeg
# cp -a /usr/portage/media-video/ffmpeg/files /usr/local/portage/media-video/ffmpeg

copiate l'ebuild in /usr/local/portage/media-video/ffmpeg
spostatevi nella directory, e date ebuild ffmpeg-ecc-ecc digest
Ora siete pronti per un emerge ffmpeg.
Probabilmente dovrete ricompilare vlc.

ciao ;^)

ffmpeg-0.4.9_p20051216.ebuild:

--8<-- CUT HERE --8<--	
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-video/ffmpeg/ffmpeg-0.4.9_p20051216.ebuild,v 1.18 2006/01/13 12:11:26 vapier Exp $

inherit eutils flag-o-matic multilib toolchain-funcs

DESCRIPTION="Complete solution to record, convert and stream audio and video. Includes libavcodec."
HOMEPAGE="http://ffmpeg.sourceforge.net/"
MY_P=${P/_/-}
S=${WORKDIR}
S_BASE=${WORKDIR}/${MY_P}
S_STATIC=${S_BASE}-static
S_SHARED=${S_BASE}-shared

SRC_URI="mirror://gentoo/${MY_P}.tar.bz2
		amr_nb? (http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26073-530.zip)
		amr_nb? (http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26104-540.zip)
		"

LICENSE="GPL-2"
SLOT="0"
# ~alpha need to test aac useflag
# ~ia64 ~arm ~mips ~hppa
#KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc-macos ~ppc64 ~sparc ~x86"
KEYWORDS="-* alpha amd64 arm hppa ia64 ppc ~ppc-macos ppc64 sparc x86"
IUSE="aac altivec debug doc ieee1394 a52 encode imlib mmx ogg vorbis oss test theora threads truetype v4l xvid dts network zlib sdl"

DEPEND="imlib? ( media-libs/imlib2 )
	truetype? ( >=media-libs/freetype-2 )
	sdl? ( >=media-libs/libsdl-1.2.1 )
	doc? ( app-text/texi2html )
	encode? ( media-sound/lame )
	ogg? ( media-libs/libogg )
	vorbis? ( media-libs/libvorbis )
	theora? ( media-libs/libtheora )
	aac? ( media-libs/faad2 media-libs/faac )
	a52? ( >=media-libs/a52dec-0.7.4-r4 )
	xvid? ( >=media-libs/xvid-1.0.3 )
	zlib? ( sys-libs/zlib )
	dts? ( media-libs/libdts )
	ieee1394? ( =media-libs/libdc1394-1*
	            sys-libs/libraw1394 )
	test? ( net-misc/wget )"

src_unpack() {
	unpack ${A} || die
	cd ${S_BASE}

	mkdir ${S_BASE}/libavcodec/amr ${S_BASE}/libavcodec/amr_float
	unzip /usr/portage/distfiles/26073-530.zip -d ${S_BASE}/libavcodec/amr
	unzip ${S_BASE}/libavcodec/amr/26073-530_ANSI_C_source_code.zip -d ${S_BASE}/libavcodec/amr
	mv ${S_BASE}/libavcodec/amr/c-code/* ${S_BASE}/libavcodec/amr
	unzip /usr/portage/distfiles/26104-540.zip -d ${S_BASE}/libavcodec/amr_float
	unzip ${S_BASE}/libavcodec/amr_float/26104-540_ANSI_C_source_code.zip -d ${S_BASE}/libavcodec/amr_float
	mv ${S_BASE}/libavcodec/amr_float/c-code/* ${S_BASE}/libavcodec/amr_float
	
	sed -i 's/-pedantic-errors/-DMMS_IO/' ${S_BASE}/libavcodec/amr/makefile

	#Append -fomit-frame-pointer to avoid some common issues
	use debug || append-flags "-fomit-frame-pointer"

	# for some reason it tries to #include <X11/Xlib.h>, but doesn't use it
	sed -i s:\#define\ HAVE_X11:\#define\ HAVE_LINUX: ffplay.c

	epatch ${FILESDIR}/ffmpeg-unknown-options.patch
	epatch ${FILESDIR}/ffmpeg-soname-symlink.patch

	# ffmpeg doesn'g use libtool, so the condition for PIC code
	# is __PIC__, not PIC.
	sed -i -e 's/#\(\(.*def *\)\|\(.*defined *\)\|\(.*defined(*\)\)PIC/#\1__PIC__/' \
		libavcodec/i386/dsputil_mmx{.c,_rnd.h,_avg.h} \
		libavcodec/msmpeg4.c \
		libavutil/common.h \
		|| die "sed failed (__PIC__)"

	# Make it use pic always since we don't need textrels
	sed -i -e "s:LIBOBJFLAGS=\"\":LIBOBJFLAGS=\'\$\(PIC\)\':" configure

	# To make sure the ffserver test will work
	sed -i -e "s:-e debug=off::" tests/server-regression.sh
	cd ${S}
	cp -R ${S_BASE} ${S_STATIC}
	mv ${S_BASE} ${S_SHARED}
}

src_compile() {
	#Note; library makefiles don't propogate flags from config.mak so
	#use specified CFLAGS are only used in executables
	filter-flags -fforce-addr -momit-leaf-frame-pointer
	replace-flags -O0 -O2

	local myconf=""

	#disable mmx accelerated code if not requirested, or if PIC is required
	# as the provided asm decidedly isn't PIC.
	if ( ! has_pic && use mmx ) || use amd64; then
		myconf="${myconf} --enable-mmx"
	else
		myconf="${myconf} --disable-mmx"
	fi

	if use elibc_FreeBSD; then
		myconf="${myconf} --enable-memalign-hack"
	fi

	myconf="${myconf}
		$(use_enable altivec) \
		$(use_enable debug) \
		$(use_enable encode mp3lame) \
		$(use_enable a52) --disable-a52bin \
		$(use_enable oss audio-oss) \
		$(use_enable v4l) \
		$(use_enable ieee1394 dv1394) $(use_enable ieee1394 dc1394) \
		$(use_enable threads pthreads) \
		$(use_enable xvid) \
		$(use_enable ogg libogg) \
		$(use_enable vorbis) \
		$(use_enable theora) \
		$(use_enable dts) \
		$(use_enable network) \
		$(use_enable zlib) \
		$(use_enable sdl ffplay) \
		$(use_enable aac faad) $(use_enable aac faac) --disable-faadbin \
		--enable-gpl \
		--enable-pp \
		--enable-amr_nb \
		--disable-opts"

	cd ${S_STATIC}
	econf --disable-shared-pp --disable-shared --enable-static ${myconf} || die "Configure failed"
	emake CC="$(tc-getCC)" || die "static failed"

	cd ${S_SHARED}
	econf --enable-shared-pp --enable-shared --disable-static ${myconf} || die "Configure failed"
	emake CC="$(tc-getCC)" || die "shared failed"
}

src_install() {
	for d in ${S_STATIC} ${S_SHARED}; do
		cd ${d}

		make DESTDIR=${D} \
			prefix=${D}/usr \
			libdir=${D}/usr/$(get_libdir) \
			mandir=${D}/usr/share/man \
			infodir=${D}/usr/share/info \
			bindir=${D}/usr/bin \
			install installlib || die "Install Failed"
	done

	cd ${S_SHARED}
	use doc && make documentation
	dodoc ChangeLog README INSTALL
	dodoc doc/*

	cd ${S_STATIC}/libavcodec/libpostproc
	make prefix=${D}/usr libdir=${D}/usr/$(get_libdir) \
		install || die "Failed to install libpostproc.a!"

	cd ${S_SHARED}/libavcodec/libpostproc
	make prefix=${D}/usr libdir=${D}/usr/$(get_libdir) \
		SHARED_PP="yes" \
		install || die "Failed to install libpostproc.so!"

	# Some stuff like transcode can use this one.
	dolib ${S_STATIC}/libavcodec/libpostproc/libpostproc.a

	preplib /usr
}

# Never die for now...
src_test() {

	for d in ${S_STATIC} ${S_SHARED}; do
		cd ${d}/tests
		for t in "codectest libavtest test-server" ; do
			make ${t} || ewarn "Some tests in ${t} failed for ${d}"
		done
	done
}

pkg_postinst() {

	ewarn "ffmpeg may had ABI changes, if ffmpeg based programs"
	ewarn "like xine-lib or vlc stop working as expected please"
	ewarn "rebuild them."

}
--8<-- CUT HERE --8<-- 


-- 
No message found in this outgoing virus.
k|b|s > mailto `echo ti.gulgb@sbk|'rev'`


Maggiori informazioni sulla lista bglug