No description
Find a file
Mans Rullgard 06eb4f0885 configure: do not disable av_always_inline with --enable-small
Currently, --enable-small turns av_always_inline into plain inline,
which is more or less ignored by the compiler.  While the intent of
this is probably to reduce code size by avoiding some inlining, it
has more far-reaching effects.

We use av_always_inline in two situations:

1. The body of a function is smaller than the call overhead.
   Instances of these are abundant in libavutil, the bswap.h
   functions being good examples.

2. The function is a template relying on constant propagation
   through inlined calls for sane code generation.  These are
   often found in motion compensation code.

Both of these types of functions should be inlined even if targeting
small code size.

Although GCC has heuristics for detecting the first of these types,
it is not always reliable, especially when the function uses inline
assembler, which is often the reason for having those functions in
the first place, so making it explicit is generally a good idea.

The size increase from inlining template-type functions is usually
much smaller than it seems due to different branches being mutually
exclusive between the different invocations.  The dead branches can,
however, only be removed after inlining and constant propagation have
been performed, which means the initial cost estimate for inlining
these is much higher than is actually the case, resulting in GCC
often making bad choices if left to its own devices.

Furthermore, the GCC inliner limits how much it allows a function to
grow due to automatic inlining of calls, and this appears to not take
call overhead into account.  When nested inlining is used, the limit
may be hit before the innermost level is reached.  In some cases, this
has prevented inlining of type 1 functions as defined above, resulting
in significant performance loss.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-07-03 16:10:54 +01:00
doc doc: Remind devs to check return values, especially for malloc() et al 2012-07-02 10:56:54 +02:00
libavcodec snow: remove a VLA used for edge emulation 2012-07-03 16:31:23 +03:00
libavdevice Remove unnecessary inclusions of [sys/]time.h 2012-06-20 11:46:46 +01:00
libavfilter x86: lavfi: fix gradfun/yadif build with mmx/sse disabled 2012-07-03 14:14:13 +01:00
libavformat flvdec: initial stream switch support 2012-07-03 15:35:51 +02:00
libavresample lavr: x86: fix ff_conv_fltp_to_flt_6ch function prototypes 2012-06-26 12:29:35 -04:00
libavutil intfloat: Don't use designated initializers in the public headers 2012-07-02 14:05:40 +03:00
libswscale bfin: libswscale: add const where appropriate to fix warnings 2012-06-20 02:15:33 +01:00
presets presets: spelling error in libvpx 1080p50_60 2011-10-22 00:28:56 +02:00
tests movenc: Add channel layouts for PCM. 2012-06-27 13:47:58 -07:00
tools Replace usleep() calls with av_usleep() 2012-06-22 17:15:36 +01:00
.gitignore build: Do not delete tests/vsynth2 directory, which is no longer created. 2012-06-13 12:27:49 +02:00
arch.mak build: Consistently handle conditional compilation for all optimization OBJS. 2012-04-12 09:00:49 +02:00
avconv.c cmdutils: Pass the actual chosen encoder to filter_codec_opts 2012-06-30 15:44:10 +03:00
avplay.c avplay: fix write on freed memory for rawvideo 2012-07-03 15:35:51 +02:00
avprobe.c avprobe: Identify codec probe failures rather than calling them unsupported codecs. 2012-06-05 09:51:51 -07:00
avserver.c Remove unnecessary inclusions of [sys/]time.h 2012-06-20 11:46:46 +01:00
Changelog MS ATC Screen (aka MSS3) decoder 2012-07-02 07:14:44 +02:00
cmdutils.c cmdutils: Pass the actual chosen encoder to filter_codec_opts 2012-06-30 15:44:10 +03:00
cmdutils.h cmdutils: Pass the actual chosen encoder to filter_codec_opts 2012-06-30 15:44:10 +03:00
cmdutils_common_opts.h avtools: add -v as alias for -loglevel 2011-10-09 16:53:06 +01:00
common.mak build: Drop leftover .exp pattern from LIBSUFFIXES list. 2012-05-05 16:32:56 +02:00
configure configure: do not disable av_always_inline with --enable-small 2012-07-03 16:10:54 +01:00
COPYING.GPLv2 Rename COPYING.GPL --> COPYING.GPLv2 and COPYING.LGPL --> COPYING.LGPLv2.1. 2009-06-05 09:51:31 +00:00
COPYING.GPLv3 Add configure option to upgrade (L)GPL to version 3. 2009-06-05 11:04:03 +00:00
COPYING.LGPLv2.1 cosmetics: Delete empty lines at end of file. 2012-02-09 12:26:45 +01:00
COPYING.LGPLv3 Add configure option to upgrade (L)GPL to version 3. 2009-06-05 11:04:03 +00:00
CREDITS partially rename FFmpeg to Libav 2011-03-16 21:54:39 +01:00
Doxyfile Fix a bunch of platform name and other typos. 2012-01-11 13:48:30 +01:00
INSTALL doc: clarify configure features 2011-04-07 02:54:12 +02:00
library.mak build: Only clean the architecture subdirectory we build for. 2012-03-26 13:29:03 +02:00
LICENSE Remove libpostproc. 2012-02-23 19:36:16 +01:00
Makefile build: Add 'check' target to run all compile and test targets. 2012-05-15 19:10:46 +02:00
README cosmetics: fix dashed line length after 070c5d0 2011-03-28 09:53:40 +02:00
RELEASE Prepare for 0.8 Release 2012-01-21 14:54:31 +01:00
version.sh Drop git- prefix from version labels 2011-06-19 19:41:23 +01:00

Libav README
------------

1) Documentation
----------------

* Read the documentation in the doc/ directory.

2) Licensing
------------

* See the LICENSE file.