Consolidate EOF error codes. Currently we have ~15 error codes which indicate an EOF condition. One should suffice, so drop all codes except the generic E_EOF and use that everywhere.
Merge topic branch t/overflow into master This series implements a new memory allocation API which checks for overflows. The first part of the series just renames the main allocation functions. Later patches in the series implement allocators which take two size_t arguments (like calloc(3)) and check whether the multiplication overflows by employing the __builtin_mul_overflow() primitive supported by gcc and clang. This requires us to bump the lowest supported gcc and clang version. * refs/heads/t/overflow: build: Compile with -ftrapv. string: Introduce arr_zalloc(). string: Introduce arr_alloc(). string: Introduce arr_realloc() and check for integer overflow. string: Rename para_calloc() -> zalloc(). string: Rename para_malloc() -> alloc(). string: Overhaul para_strdup().
Rename ->{pre,post}_select methods to ->{pre,post}_monitor. The word "monitor" is neutral and continues to be correct after the switch from select(2) to poll(2). Pure rename, nothing to see here.
string: Rename para_calloc() -> zalloc(). Reword the documentation a bit since the function has never been a wrapper for calloc(3). No code changes.
string: Rename para_malloc() -> alloc(). Just because it's shorter and matches the naming of the new allocators we are about to introduce. The bulk of this patch was created with sed -i 's/para_malloc/alloc/g' *.c *.h yy/mp.y
compress: Demote log level of clip message. These messages trigger from time to time without having much audible effect, so they are usually not serious.
compress: Overhaul the meaning of --aggressiveness. Large values for the argument to --aggressiveless are next to useless because they correspond to gain factors which are much too large. The default value of four is already too large as it allows for a 16-fold volume amplification. This patch changes the meaning of the argument to be a multiplication rather than a shift. Admissible values are restricted to the range 0..10, which allows for fine-grained control over the maximal gain factor. The maximal gain factor is four, so the inertia argument must not exceed 14 to guarantee that no integer overflow can happen.
compress: Apply damping later. This changes the algorithm of the compress filter to apply the right shift defined by the --damp argument *after* the peak value of the current block has been computed. This makes damping orthogonal to the dynamic volume adjustments. However, we increase the downshift so that the initial value of the gain multiplier results in a right shift by one. Hence the expected peak value is 16384, so make this the default target gain.
compress: Warn when samples are clipped.
compress: Document and sanity-check command line options. The arguments of most of the options to the compress filter are used as shifts and therefore have rather tight requirements on the range of admissible/useful values. Let's document these values and make sure to print a meaningful error message if an argument is out of range.
compress: Use unsigned constant for definition of mask. Without this, the integer constant is of signed type, which may cause problems when blocksize is 31.
Shorten copyright notice. The GPLv2 line does not add any additional information, so drop it. This leaves a single line of legalese text for most files, which is about the amount of screen real estate it deserves. This patch was created with the following script (plus some manual fixups): awk '{ if (NR <= 5) { gs = gensub(/.*Copyright.* ([0-9]+).*Andre Noll.*/, "\\1", "g") if (gs != $0) year = gs next } if (NR == 6 && year != "") printf("/* Copyright (C) %s Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */\n", year) print }'
Convert filters to lopsub. This replaces the *_filter.m4 gengetopt files by the filter_cmd lopsub suite, where each filter is realized as a subcommand. Due to this change, para_filter needs to be linked with -llopsub. The filter structure is now stored in the user_data pointer provided by lopsub, allowing to get rid of the global filters[] array, the FILTER_ENUM macro and the corresponding enumeration constants. The removal of the ->goo_help member of struct filter makes this structure constant. Hence ->init() of struct filter can also go away. We still can tell whether a filter is supported by checking the user_data pointer: if it is NULL, the filter is unsupported. The new filter_supported() helper in filter_common.c is provided for convenience. Parsing of the filter command line options is now performed generically, and the ->parse_config() method is renamed to ->setup(), an optional function which is supposed to perform semantic checks and the one-time setup of the filter, if any. It is accompanied by ->teardown() which replaces ->free_config(). The conversion of the individual filters is easy since most filters have a simple syntax or take no arguments at all. The resample_filter, however, needs a different way to copy the wav parameters from the lopsub parse result to the wav parms structure. A suitable macro, LLS_COPY_WAV_PARMS is added to check_wav.h for this purpose. The old COPY_WAV_PARMS needs to stay until para_write, the only other user of the macro, has been converted as well. The section heading of the manual page has changed slightly, causing t0005 to fail. Hence this test needs a slight adjustment.
Update year in copyright headers. Done with files=$(git grep -l 'Copyright (C) [0-9]\{4\}\(-2014\)* Andre Noll') sed --in-place= -e 's/Copyright (C) \([0-9]\{4\}\)-2014 Andre Noll/Copyright (C) \1 Andre Noll/1' $files In previous years we ran a similar script to set the second year in the range to the current year. This is kind of silly, so let's get rid of this useless information. This commit replaces "Copyright (C) A-B" by "Copyright (C) A" in all file headers, i.e. only the first year (A) is left in. Accurate information including time stamps for each change can be obtained from the git history.
doc: Change email address to maan@tuebingen.mpg.de The mail server on systemlinux.org was down for more than a week lately, so let's use an alternative official address. This commit changes all maan@systemlinux.org addresses to maan@tuebingen.mpg.de. Most .c and .h files contain the email address in the copyright header, so they must all be patched. Three other files contain the address for a different reason: * README lists email and git, gitweb and home page URLs * configure.ac needs it for configure -h * version.c contains it for the -V option of all commands
sched: Directly pass context pointer to pre/post_select(). The patch is large, but it's fairly straight forward: Instead of a task pointer all ->pre_select() and ->post_select() methods now receive the context pointer that was passed to the scheduler when the task was registered. This allows to kill the public task_context(). Two pre_select/post_select functions are not directly called by the scheduler: session_post_select(), generic_recv_pre_select(). These are changed to receive a proper struct rather than a void pointer. Note that generic_filter_pre_select() is not changed in this manner because some filters do not provide a pre_select wrapper but set task->pre_select to generic_filter_pre_select().
task_register() conversion: filter tasks
Change copyright year to 2014. This year, we're really on time. The changes in this patch were created by the following silly script: files=$(git grep -l 'Copyright (C) [0-9]\{4\}\(-2013\)* Andre Noll') sed --in-place= -e 's/Copyright (C) \([0-9]\{4\}\)-2013 Andre Noll/Copyright (C) \1-2014 Andre Noll/1' $files sed --in-place= -e 's/Copyright (C) 2013 Andre Noll/Copyright (C) 2013-2014 Andre Noll/1' $files
Merge branch 't/versioning_improvements' Cooking for ~2 weeks. 15e99a version.c: Mark version_git() as const. 9bdebf Remove CODENAME macro. be2f6b gui: Use version_single_line(). d60dae Improve man page layout. 5dbc9a afh/play: Include supported audio formats in help output. 042767 Use self-made help to avoid recompilations on version changes. 48f1fc Provide "purpose" texts. aa74a9 Revamp ggo help. 9f7a49 afh_recv: Replace ggo text section by description. b59e0e Make gengetopt descriptions work. 06b3e7 Introduce version.c to limit recompilation on version changes. 75feac Make all commands print git version and improve version string. b01605 Avoid unwanted log messages during startup. 625fdb Don't check return value of command line parsers unnecessarily. 533b03 Build receivers, filters and writers without -h and -V support. b59a3c filter: Wrap lines in the available filter list. 9e56d3 audioc: Print config file errors. e5264d doc: Rewrite udp sender description 5ec373 client: Fix typo in comment. 6d5159 client: Remove duplicate include.
Merge branch 't/compress' Well tested an cooked. 0a6c0e compress: Further optimize inner loop. be761d compress: Remove log statement in inner loop. 15a54f compress: Avoid PARA_ABS and PARA_MAX in inner loop. 28c03c compress: Compile with -O3.