Date: Sat, 2 Nov 2002 19:02:10 -0300 From: Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org> To: Steve O'Hara-Smith <steve@sohara.org> Cc: Carl Makin <carl@stagecraft.cx>, freebsd-multimedia@FreeBSD.ORG Subject: Re: ffmpeg compile optimisation helps no end! was Re: FreeBSD 4.7R: no sound when recording with ffmpeg? Message-ID: <20021102220232.40685.qmail@exxodus.fedaykin.here> In-Reply-To: <20021102173507.352ddc71.steve@sohara.org> References: <20021028063325.224adec5.steve@sohara.org> <CB5FB6EA-EA6F-11D6-8981-0050E445BE6D@stagecraft.cx> <20021102173507.352ddc71.steve@sohara.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--VS++wcV0S1rZb1Fb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sat, Nov 02, 2002 at 05:34:45PM +0100, Steve O'Hara-Smith wrote: > On Mon, 28 Oct 2002 23:21:32 +1100 > Carl Makin <carl@stagecraft.cx> wrote: > > CM> I have a Celeron 600 and the above ffmpeg parms give me excellent > CM> video with only the occasional jerkyness, however the audio goes out > > I've just noticed something silly, ffmpeg is compiled > completely without optimisation. Try applying the attached patch in > /usr/ports/graphics/ffmpeg (it adds -O3-fomit-frame-pointer to the > compile options). > > I think this is worth committing, with it I can use default > motion estimation and even high quality settings at full resolution > without dropping frames. Humm, I am improved a bit on your idea. :) First, ffmpeg is now CFLAGS safe (I'm a bit confused as to why it was not before); meaning that it will use your CFLAGS now. Second, it will add some optimizations if WITH_OPTIMIZED_CFLAGS is enabled. Third, if not defined WITHOUT_LIBA52, ffmpeg will now use ports' liba52 port instead of internal code. liba52 in ports is faster than ffmpeg's version. Finally, ffmpeg will now use FreeBSD byteswap optimized routines IF you happen to be using a FreeBSD 4.7-RELEASE or later (any 5.x-CURRENT applies) #if defined(__FreeBSD__) && __FreeBSD_version >= 470000 #endif It will use both 16 and 32 bits kernel byteswap routines available in /usr/include/sys/endian.h instead of its own version of them. As far as I can tell, these byteswap routines are only used with mpeg video. However, mpeg video seems to be used a lot by booktree users so it should help a bit. :) I tested these changes with several mpeg output formats: mpeg1video mpeg4 msmpeg4v1 msmpeg4v2 msmpeg4. Everything seems fine but I did not benchmark anything. Steve? Could you try some benchmarks since you've been timing stuff? Unfortunaly, I do not have a booktree board to test capture performance. Regards, -- Mario S F Ferreira - DF - Brazil - "I guess this is a signature." Computer Science Undergraduate | FreeBSD Committer | CS Developer flames to beloved devnull@someotherworldbeloworabove.org feature, n: a documented bug | bug, n: an undocumented feature --VS++wcV0S1rZb1Fb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=patch-ffmpeg diff -ruN /usr/ports/graphics/ffmpeg/Makefile ffmpeg/Makefile --- /usr/ports/graphics/ffmpeg/Makefile Wed Oct 16 05:33:47 2002 +++ ffmpeg/Makefile Sat Nov 2 18:41:01 2002 @@ -26,7 +26,6 @@ USE_REINPLACE= yes CONFIGURE_ARGS= --cc="${CC}" --prefix="${PREFIX}" \ --make="${GMAKE}" --enable-shared \ - --extra-cflags="-I${LOCALBASE}/include" \ --extra-libs="-lm -L${LOCALBASE}/lib" PLIST_SUB= SHLIB_VERSION=${SHLIB_VERSION} INSTALLS_SHLIB= yes @@ -58,6 +57,16 @@ ## support activation ## +## disable a52 +.ifndef(WITHOUT_A52) +LIB_DEPENDS+= a52.0:${PORTSDIR}/audio/liba52 + +CONFIGURE_ARGS+= --enable-a52 \ + --enable-a52bin +.else +CONFIGURE_ARGS+= --enable-a52 \ + --disable-a52bin +.endif ## disable mmx .ifdef(WITHOUT_MMX) CONFIGURE_ARGS+= --disable-mmx @@ -68,6 +77,13 @@ CONFIGURE_ARGS+= --enable-mp3lame .endif +## optimization +.ifdef(WITH_OPTIMIZED_CFLAGS) +CONFIGURE_ARGS+= --extra-cflags="${CFLAGS} -I${LOCALBASE}/include \ + -O3 -ffast-math -fomit-frame-pointer" +.else +CONFIGURE_ARGS+= --extra-cflags="${CFLAGS} -I${LOCALBASE}/include" +.endif ## vorbis .ifdef(WITH_VORBIS) LIB_DEPENDS+= vorbisenc.2:${PORTSDIR}/audio/libvorbis @@ -76,12 +92,20 @@ .endif pre-everything:: +.ifndef(WITHOUT_LIBA52) + @${ECHO_MSG} "You can disable liba52 support by defining WITHOUT_LIBA52" +.endif .ifndef(WITHOUT_MMX) @${ECHO_MSG} "Define WITHOUT_MMX if your system does not support MMX" .endif .ifndef(WITH_MP3) @${ECHO_MSG} 'Define WITH_MP3 to enable lame MP3 codec' .endif +.ifndef(WITH_OPTIMIZED_CFLAGS) + @${ECHO_MSG} + @${ECHO_MSG} 'You can enable additional compilation optimizations' + @${ECHO_MSG} 'by defining WITH_OPTIMIZED_CFLAGS' +.endif .ifndef(WITH_VORBIS) @${ECHO_MSG} 'Define WITH_VORBIS to enable libvorbisenc VORBIS codec' .endif @@ -117,6 +141,10 @@ @${REINPLACE_CMD} -e \ "s!VIDEO_INPUT METEOR_INPUT_DEV0!VIDEO_INPUT METEOR_INPUT_DEV${WITH_BKTR_DEV}!" \ ${WRKSRC}/libav/grab_bsdbktr.c +.endif +.ifndef(WITHOUT_LIBA52) + @${REINPLACE_CMD} -e 's|-ldl||' \ + ${WRKSRC}/configure .endif post-install: Binary files /usr/ports/graphics/ffmpeg/ffmpeg-cvs.tar.gz and ffmpeg/ffmpeg-cvs.tar.gz differ diff -ruN /usr/ports/graphics/ffmpeg/files/patch-libavcodec::bswap.h ffmpeg/files/patch-libavcodec::bswap.h --- /usr/ports/graphics/ffmpeg/files/patch-libavcodec::bswap.h Wed Dec 31 21:00:00 1969 +++ ffmpeg/files/patch-libavcodec::bswap.h Sat Nov 2 14:00:01 2002 @@ -0,0 +1,37 @@ +--- libavcodec/bswap.h.orig Sat Nov 2 13:54:00 2002 ++++ libavcodec/bswap.h Sat Nov 2 13:59:41 2002 +@@ -5,6 +5,10 @@ + #include <byteswap.h> + #else + ++#if defined(__FreeBSD__) && __FreeBSD_version >= 470000 ++#include <sys/endian.h> ++#endif ++ + #ifdef ARCH_X86 + inline static unsigned short ByteSwap16(unsigned short x) + { +@@ -13,7 +17,11 @@ + "0" (x)); + return x; + } ++#if defined(__FreeBSD__) && __FreeBSD_version >= 470000 ++#define bswap_16(x) (be16toh(x)) ++#else + #define bswap_16(x) ByteSwap16(x) ++#endif + + inline static unsigned int ByteSwap32(unsigned int x) + { +@@ -29,7 +37,11 @@ + "0" (x)); + return x; + } ++#if defined(__FreeBSD__) && __FreeBSD_version >= 470000 ++#define bswap_32(x) (be32toh(x)) ++#else + #define bswap_32(x) ByteSwap32(x) ++#endif + + inline static unsigned long long int ByteSwap64(unsigned long long int x) + { --VS++wcV0S1rZb1Fb-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021102220232.40685.qmail>