Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 22 May 2012 21:40:58 +0000 (23:40 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 22 May 2012 21:42:17 +0000 (23:42 +0200)
* qatar/master:
  dwt: check malloc calls
  ppc: Drop unused header regs.h
  af_resample: remove an extra space in the log output
  Convert vector_fmul range of functions to YASM and add AVX versions
  lavfi: add an audio split filter
  lavfi: rename vf_split.c to split.c

Conflicts:
doc/filters.texi
libavcodec/ppc/regs.h
libavfilter/Makefile
libavfilter/allfilters.c
libavfilter/f_split.c
libavfilter/split.c
libavfilter/version.h
libavfilter/vf_split.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
16 files changed:
1  2 
Changelog
doc/filters.texi
libavcodec/aacsbrdata.h
libavcodec/aactab.c
libavcodec/aactab.h
libavcodec/dsputil.h
libavcodec/dwt.c
libavcodec/ra288.c
libavcodec/ra288.h
libavcodec/sbr.h
libavcodec/sinewin.h
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/dsputil_yasm.asm
libavfilter/Makefile
libavfilter/split.c
libavfilter/version.h

diff --cc Changelog
+++ b/Changelog
@@@ -1,85 -1,48 +1,86 @@@
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version <next>:
 -
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 +version next:
 +- v408 Quicktime and Microsoft AYUV Uncompressed 4:4:4:4 encoder and decoder
 +- setfield filter
  - CDXL demuxer and decoder
  - Apple ProRes encoder
 +- ffprobe -count_packets and -count_frames options
  - Sun Rasterfile Encoder
 -- remove libpostproc
  - ID3v2 attached pictures reading and writing
  - WMA Lossless decoder
 -- XBM encoder
 +- bluray protocol
 +- blackdetect filter
 +- libutvideo encoder wrapper (--enable-libutvideo)
 +- swapuv filter
 +- bbox filter
 +- XBM encoder and decoder
  - RealAudio Lossless decoder
  - ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 +- tile video filter
 +- Metal Gear Solid: The Twin Snakes demuxer
 +- OpenEXR image decoder
 +- removelogo filter
 +- drop support for ffmpeg without libavfilter
 +- drawtext video filter: fontconfig support
 +- ffmpeg -benchmark_all option
 +- super2xsai filter ported from libmpcodecs
 +- add libavresample audio conversion library for compatibility
 +- MicroDVD decoder
 +- Avid Meridien (AVUI) encoder and decoder
 +- accept + prefix to -pix_fmt option to disable automatic conversions.
  - audio filters support in libavfilter and avconv
  - add fps filter
+ - audio split filter
  
  
 -version 0.8:
 -
 +version 0.10:
 +- Fixes: CVE-2011-3929, CVE-2011-3934, CVE-2011-3935, CVE-2011-3936,
 +         CVE-2011-3937, CVE-2011-3940, CVE-2011-3941, CVE-2011-3944,
 +         CVE-2011-3945, CVE-2011-3946, CVE-2011-3947, CVE-2011-3949,
 +         CVE-2011-3950, CVE-2011-3951, CVE-2011-3952
 +- v410 Quicktime Uncompressed 4:4:4 10-bit encoder and decoder
 +- SBaGen (SBG) binaural beats script demuxer
 +- OpenMG Audio muxer
 +- Timecode extraction in DV and MOV
 +- thumbnail video filter
 +- XML output in ffprobe
 +- asplit audio filter
 +- tinterlace video filter
 +- astreamsync audio filter
 +- amerge audio filter
 +- ISMV (Smooth Streaming) muxer
  - GSM audio parser
  - SMJPEG muxer
 -
 -
 -version 0.8_beta2:
 -
 +- XWD encoder and decoder
  - Automatic thread count based on detection number of (available) CPU cores
 -- Deprecate libpostproc. If desired, the switch --enable-postproc will
 -  enable it but it may be removed in a later Libav release.
 +- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
 +- ffprobe -show_error option
 +- Avid 1:1 10-bit RGB Packer codec
 +- v308 Quicktime Uncompressed 4:4:4 encoder and decoder
 +- yuv4 libquicktime packed 4:2:0 encoder and decoder
 +- ffprobe -show_frames option
 +- silencedetect audio filter
 +- ffprobe -show_program_version, -show_library_versions, -show_versions options
  - rv34: frame-level multi-threading
  - optimized iMDCT transform on x86 using SSE for for mpegaudiodec
 +- Improved PGS subtitle decoder
 +- dumpgraph option to lavfi device
 +- r210 and r10k encoders
 +- ffwavesynth decoder
 +- aviocat tool
 +- ffeval tool
  
  
 -version 0.8_beta1:
 +version 0.9:
  
 +- openal input device added
 +- boxblur filter added
  - BWF muxer
  - Flash Screen Video 2 decoder
 -- ffplay/ffprobe/ffserver renamed to avplay/avprobe/avserver
 -- ffmpeg deprecated, added avconv, which is almost the same for now, except
 +- lavfi input device added
 +- added avconv, which is almost the same for now, except
  for a few incompatible changes in the options, which will hopefully make them
  easier to use. The changes are:
      * The options placement is now strictly enforced! While in theory the
@@@ -309,229 -144,12 +309,235 @@@ Split input audio into several identica
  The filter accepts a single parameter which specifies the number of outputs. If
  unspecified, it defaults to 2.
  
 -For example
 +For example:
  @example
 -avconv -i INPUT -filter_complex asplit=5 OUTPUT
 +[in] asplit [out0][out1]
 +@end example
 +
 +will create two separate outputs from the same input.
 +
 +To create 3 or more outputs, you need to specify the number of
 +outputs, like in:
 +@example
 +[in] asplit=3 [out0][out1][out2]
 +@end example
 +
++@example
++ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
+ @end example
+ will create 5 copies of the input audio.
++
 +@section astreamsync
 +
 +Forward two audio streams and control the order the buffers are forwarded.
 +
 +The argument to the filter is an expression deciding which stream should be
 +forwarded next: if the result is negative, the first stream is forwarded; if
 +the result is positive or zero, the second stream is forwarded. It can use
 +the following variables:
 +
 +@table @var
 +@item b1 b2
 +number of buffers forwarded so far on each stream
 +@item s1 s2
 +number of samples forwarded so far on each stream
 +@item t1 t2
 +current timestamp of each stream
 +@end table
 +
 +The default value is @code{t1-t2}, which means to always forward the stream
 +that has a smaller timestamp.
 +
 +Example: stress-test @code{amerge} by randomly sending buffers on the wrong
 +input, while avoiding too much of a desynchronization:
 +@example
 +amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
 +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
 +[a2] [b2] amerge
 +@end example
 +
 +@section earwax
 +
 +Make audio easier to listen to on headphones.
 +
 +This filter adds `cues' to 44.1kHz stereo (i.e. audio CD format) audio
 +so that when listened to on headphones the stereo image is moved from
 +inside your head (standard for headphones) to outside and in front of
 +the listener (standard for speakers).
 +
 +Ported from SoX.
 +
 +@section pan
 +
 +Mix channels with specific gain levels. The filter accepts the output
 +channel layout followed by a set of channels definitions.
 +
 +This filter is also designed to remap efficiently the channels of an audio
 +stream.
 +
 +The filter accepts parameters of the form:
 +"@var{l}:@var{outdef}:@var{outdef}:..."
 +
 +@table @option
 +@item l
 +output channel layout or number of channels
 +
 +@item outdef
 +output channel specification, of the form:
 +"@var{out_name}=[@var{gain}*]@var{in_name}[+[@var{gain}*]@var{in_name}...]"
 +
 +@item out_name
 +output channel to define, either a channel name (FL, FR, etc.) or a channel
 +number (c0, c1, etc.)
 +
 +@item gain
 +multiplicative coefficient for the channel, 1 leaving the volume unchanged
 +
 +@item in_name
 +input channel to use, see out_name for details; it is not possible to mix
 +named and numbered input channels
 +@end table
 +
 +If the `=' in a channel specification is replaced by `<', then the gains for
 +that specification will be renormalized so that the total is 1, thus
 +avoiding clipping noise.
 +
 +@subsection Mixing examples
 +
 +For example, if you want to down-mix from stereo to mono, but with a bigger
 +factor for the left channel:
 +@example
 +pan=1:c0=0.9*c0+0.1*c1
 +@end example
 +
 +A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
 +7-channels surround:
 +@example
 +pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
 +@end example
 +
 +Note that @command{ffmpeg} integrates a default down-mix (and up-mix) system
 +that should be preferred (see "-ac" option) unless you have very specific
 +needs.
 +
 +@subsection Remapping examples
 +
 +The channel remapping will be effective if, and only if:
 +
 +@itemize
 +@item gain coefficients are zeroes or ones,
 +@item only one input per channel output,
 +@end itemize
 +
 +If all these conditions are satisfied, the filter will notify the user ("Pure
 +channel mapping detected"), and use an optimized and lossless method to do the
 +remapping.
 +
 +For example, if you have a 5.1 source and want a stereo audio stream by
 +dropping the extra channels:
 +@example
 +pan="stereo: c0=FL : c1=FR"
 +@end example
 +
 +Given the same source, you can also switch front left and front right channels
 +and keep the input channel layout:
 +@example
 +pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
 +@end example
 +
 +If the input is a stereo audio stream, you can mute the front left channel (and
 +still keep the stereo channel layout) with:
 +@example
 +pan="stereo:c1=c1"
 +@end example
 +
 +Still with a stereo audio stream input, you can copy the right channel in both
 +front left and right:
 +@example
 +pan="stereo: c0=FR : c1=FR"
 +@end example
 +
 +@section silencedetect
 +
 +Detect silence in an audio stream.
 +
 +This filter logs a message when it detects that the input audio volume is less
 +or equal to a noise tolerance value for a duration greater or equal to the
 +minimum detected noise duration.
 +
 +The printed times and duration are expressed in seconds.
 +
 +@table @option
 +@item duration, d
 +Set silence duration until notification (default is 2 seconds).
 +
 +@item noise, n
 +Set noise tolerance. Can be specified in dB (in case "dB" is appended to the
 +specified value) or amplitude ratio. Default is -60dB, or 0.001.
 +@end table
 +
 +Detect 5 seconds of silence with -50dB noise tolerance:
 +@example
 +silencedetect=n=-50dB:d=5
 +@end example
 +
 +Complete example with @command{ffmpeg} to detect silence with 0.0001 noise
 +tolerance in @file{silence.mp3}:
 +@example
 +ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null -
 +@end example
 +
 +@section volume
 +
 +Adjust the input audio volume.
 +
 +The filter accepts exactly one parameter @var{vol}, which expresses
 +how the audio volume will be increased or decreased.
 +
 +Output values are clipped to the maximum value.
 +
 +If @var{vol} is expressed as a decimal number, the output audio
 +volume is given by the relation:
 +@example
 +@var{output_volume} = @var{vol} * @var{input_volume}
 +@end example
 +
 +If @var{vol} is expressed as a decimal number followed by the string
 +"dB", the value represents the requested change in decibels of the
 +input audio power, and the output audio volume is given by the
 +relation:
 +@example
 +@var{output_volume} = 10^(@var{vol}/20) * @var{input_volume}
 +@end example
 +
 +Otherwise @var{vol} is considered an expression and its evaluated
 +value is used for computing the output audio volume according to the
 +first relation.
 +
 +Default value for @var{vol} is 1.0.
 +
 +@subsection Examples
 +
 +@itemize
 +@item
 +Half the input audio volume:
 +@example
 +volume=0.5
 +@end example
 +
 +The above example is equivalent to:
 +@example
 +volume=1/2
 +@end example
 +
 +@item
 +Decrease input audio power by 12 decibels:
 +@example
 +volume=-12dB
 +@end example
 +@end itemize
 +
  @section asyncts
  Synchronize audio data with timestamps by squeezing/stretching it and/or
  dropping samples/adding silence when needed.
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -39,39 -25,18 +39,39 @@@ OBJS = allfilters.
         vf_scale.o                                                       \
         video.o                                                          \
  
 +
 +OBJS-$(CONFIG_AVCODEC)                       += avcodec.o
 +OBJS-$(CONFIG_AVFORMAT)                      += lavfutils.o
 +OBJS-$(CONFIG_SWSCALE)                       += lswsutils.o
 +
 +OBJS-$(CONFIG_ACONVERT_FILTER)               += af_aconvert.o
  OBJS-$(CONFIG_AFORMAT_FILTER)                += af_aformat.o
 +OBJS-$(CONFIG_AMERGE_FILTER)                 += af_amerge.o
  OBJS-$(CONFIG_ANULL_FILTER)                  += af_anull.o
- OBJS-$(CONFIG_ASPLIT_FILTER)                 += f_split.o
 +OBJS-$(CONFIG_ARESAMPLE_FILTER)              += af_aresample.o
 +OBJS-$(CONFIG_ASHOWINFO_FILTER)              += af_ashowinfo.o
+ OBJS-$(CONFIG_ASPLIT_FILTER)                 += split.o
 +OBJS-$(CONFIG_ASTREAMSYNC_FILTER)            += af_astreamsync.o
  OBJS-$(CONFIG_ASYNCTS_FILTER)                += af_asyncts.o
 +OBJS-$(CONFIG_EARWAX_FILTER)                 += af_earwax.o
 +OBJS-$(CONFIG_PAN_FILTER)                    += af_pan.o
  OBJS-$(CONFIG_RESAMPLE_FILTER)               += af_resample.o
 +OBJS-$(CONFIG_SILENCEDETECT_FILTER)          += af_silencedetect.o
 +OBJS-$(CONFIG_VOLUME_FILTER)                 += af_volume.o
  
 +OBJS-$(CONFIG_AEVALSRC_FILTER)               += asrc_aevalsrc.o
 +OBJS-$(CONFIG_AMOVIE_FILTER)                 += src_movie.o
  OBJS-$(CONFIG_ANULLSRC_FILTER)               += asrc_anullsrc.o
  
 +OBJS-$(CONFIG_ABUFFERSINK_FILTER)            += sink_buffer.o
  OBJS-$(CONFIG_ANULLSINK_FILTER)              += asink_anullsink.o
  
 +OBJS-$(CONFIG_ASS_FILTER)                    += vf_ass.o
 +OBJS-$(CONFIG_BBOX_FILTER)                   += bbox.o vf_bbox.o
 +OBJS-$(CONFIG_BLACKDETECT_FILTER)            += vf_blackdetect.o
  OBJS-$(CONFIG_BLACKFRAME_FILTER)             += vf_blackframe.o
  OBJS-$(CONFIG_BOXBLUR_FILTER)                += vf_boxblur.o
 +OBJS-$(CONFIG_COLORMATRIX_FILTER)            += vf_colormatrix.o
  OBJS-$(CONFIG_COPY_FILTER)                   += vf_copy.o
  OBJS-$(CONFIG_CROP_FILTER)                   += vf_crop.o
  OBJS-$(CONFIG_CROPDETECT_FILTER)             += vf_cropdetect.o
@@@ -109,12 -69,7 +109,12 @@@ OBJS-$(CONFIG_SETSAR_FILTER
  OBJS-$(CONFIG_SETTB_FILTER)                  += vf_settb.o
  OBJS-$(CONFIG_SHOWINFO_FILTER)               += vf_showinfo.o
  OBJS-$(CONFIG_SLICIFY_FILTER)                += vf_slicify.o
- OBJS-$(CONFIG_SPLIT_FILTER)                  += f_split.o
+ OBJS-$(CONFIG_SPLIT_FILTER)                  += split.o
 +OBJS-$(CONFIG_SUPER2XSAI_FILTER)             += vf_super2xsai.o
 +OBJS-$(CONFIG_SWAPUV_FILTER)                 += vf_swapuv.o
 +OBJS-$(CONFIG_THUMBNAIL_FILTER)              += vf_thumbnail.o
 +OBJS-$(CONFIG_TILE_FILTER)                   += vf_tile.o
 +OBJS-$(CONFIG_TINTERLACE_FILTER)             += vf_tinterlace.o
  OBJS-$(CONFIG_TRANSPOSE_FILTER)              += vf_transpose.o
  OBJS-$(CONFIG_UNSHARP_FILTER)                += vf_unsharp.o
  OBJS-$(CONFIG_VFLIP_FILTER)                  += vf_vflip.o
index 0000000,83ad765..ec34eed
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,134 +1,134 @@@
 - * This file is part of Libav.
+ /*
+  * Copyright (c) 2007 Bobby Bingham
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
 -    .inputs    = (AVFilterPad[]) {{ .name            = "default",
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /**
+  * @file
+  * audio and video splitter
+  */
+ #include "avfilter.h"
+ #include "audio.h"
+ static int split_init(AVFilterContext *ctx, const char *args, void *opaque)
+ {
+     int i, nb_outputs = 2;
+     if (args) {
+         nb_outputs = strtol(args, NULL, 0);
+         if (nb_outputs <= 0) {
+             av_log(ctx, AV_LOG_ERROR, "Invalid number of outputs specified: %d.\n",
+                    nb_outputs);
+             return AVERROR(EINVAL);
+         }
+     }
+     for (i = 0; i < nb_outputs; i++) {
+         char name[32];
+         AVFilterPad pad = { 0 };
+         snprintf(name, sizeof(name), "output%d", i);
+         pad.type = ctx->filter->inputs[0].type;
+         pad.name = av_strdup(name);
+         avfilter_insert_outpad(ctx, i, &pad);
+     }
+     return 0;
+ }
+ static void split_uninit(AVFilterContext *ctx)
+ {
+     int i;
+     for (i = 0; i < ctx->output_count; i++)
+         av_freep(&ctx->output_pads[i].name);
+ }
+ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
+ {
+     AVFilterContext *ctx = inlink->dst;
+     int i;
+     for (i = 0; i < ctx->output_count; i++)
+         avfilter_start_frame(ctx->outputs[i],
+                              avfilter_ref_buffer(picref, ~AV_PERM_WRITE));
+ }
+ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
+ {
+     AVFilterContext *ctx = inlink->dst;
+     int i;
+     for (i = 0; i < ctx->output_count; i++)
+         avfilter_draw_slice(ctx->outputs[i], y, h, slice_dir);
+ }
+ static void end_frame(AVFilterLink *inlink)
+ {
+     AVFilterContext *ctx = inlink->dst;
+     int i;
+     for (i = 0; i < ctx->output_count; i++)
+         avfilter_end_frame(ctx->outputs[i]);
+     avfilter_unref_buffer(inlink->cur_buf);
+ }
+ AVFilter avfilter_vf_split = {
+     .name      = "split",
+     .description = NULL_IF_CONFIG_SMALL("Pass on the input to two outputs."),
+     .init   = split_init,
+     .uninit = split_uninit,
++    .inputs    = (const AVFilterPad[]) {{ .name      = "default",
+                                     .type            = AVMEDIA_TYPE_VIDEO,
+                                     .get_video_buffer= avfilter_null_get_video_buffer,
+                                     .start_frame     = start_frame,
+                                     .draw_slice      = draw_slice,
+                                     .end_frame       = end_frame, },
+                                   { .name = NULL}},
+     .outputs   = (AVFilterPad[]) {{ .name = NULL}},
+ };
+ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
+ {
+     AVFilterContext *ctx = inlink->dst;
+     int i;
+     for (i = 0; i < ctx->output_count; i++)
+         ff_filter_samples(inlink->dst->outputs[i],
+                           avfilter_ref_buffer(samplesref, ~AV_PERM_WRITE));
+ }
+ AVFilter avfilter_af_asplit = {
+     .name        = "asplit",
+     .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."),
+     .init   = split_init,
+     .uninit = split_uninit,
+     .inputs  = (const AVFilterPad[]) {{ .name             = "default",
+                                         .type             = AVMEDIA_TYPE_AUDIO,
+                                         .get_audio_buffer = ff_null_get_audio_buffer,
+                                         .filter_samples   = filter_samples },
+                                       { .name = NULL }},
+     .outputs = (const AVFilterPad[]) {{ .name = NULL }},
+ };
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/avutil.h"
  
  #define LIBAVFILTER_VERSION_MAJOR  2
- #define LIBAVFILTER_VERSION_MINOR 75
 -#define LIBAVFILTER_VERSION_MINOR  19
 -#define LIBAVFILTER_VERSION_MICRO  0
++#define LIBAVFILTER_VERSION_MINOR 76
 +#define LIBAVFILTER_VERSION_MICRO 100
  
  #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                 LIBAVFILTER_VERSION_MINOR, \