diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-09-25 01:56:58 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-09-25 01:56:58 +0000 |
commit | 1ee410f330d3b57b0ea1ccb915977f2ba4d99815 (patch) | |
tree | 735cbaa2b222cd3e8231fad931d2294266f9a527 | |
parent | 6afd569e1df3cb02f89f85d9bc70e53edc1d23c6 (diff) | |
download | ffmpeg-1ee410f330d3b57b0ea1ccb915977f2ba4d99815.tar.gz |
Add asrc_anullsrc - null audio source.
Based on a patch by "S.N. Hemanth Meenakshisundaram" smeenaks!ucsd!edu.
Originally committed as revision 25188 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | doc/filters.texi | 34 | ||||
-rw-r--r-- | libavfilter/Makefile | 2 | ||||
-rw-r--r-- | libavfilter/allfilters.c | 2 | ||||
-rw-r--r-- | libavfilter/asrc_anullsrc.c | 96 | ||||
-rw-r--r-- | libavfilter/avfilter.h | 2 |
5 files changed, 135 insertions, 1 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index 1dc222a119..e6e187dec0 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -14,6 +14,40 @@ Pass the audio source unchanged to the output. @c man end AUDIO FILTERS +@chapter Audio Sources +@c man begin AUDIO SOURCES + +Below is a description of the currently available audio sources. + +@section anullsrc + +Null audio source, never return audio frames. It is mainly useful as a +template and to be employed in analysis / debugging tools. + +It accepts as optional parameter a string of the form +@var{sample_rate}:@var{channel_layout}. + +@var{sample_rate} specify the sample rate, and defaults to 44100. + +@var{channel_layout} specify the channel layout, and can be either an +integer or a string representing a channel layout. The default value +of @var{channel_layout} is 3, which corresponds to CH_LAYOUT_STEREO. + +Check the channel_layout_map definition in +@file{libavcodec/audioconvert.c} for the correspondance between string +and channel layout values. + +Follow some examples: +@example +# set the sample rate to 48000 Hz and the channel layout to CH_LAYOUT_MONO. +anullsrc=48000:4 + +# same as +anullsrc=48000:mono +@end example + +@c man end AUDIO SOURCES + @chapter Video Filters @c man begin VIDEO FILTERS diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 3fe15daac1..29fbb62fe0 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -16,6 +16,8 @@ OBJS = allfilters.o \ OBJS-$(CONFIG_ANULL_FILTER) += af_anull.o +OBJS-$(CONFIG_ANULLSRC_FILTER) += asrc_anullsrc.o + OBJS-$(CONFIG_ASPECT_FILTER) += vf_aspect.o OBJS-$(CONFIG_CROP_FILTER) += vf_crop.o OBJS-$(CONFIG_FIFO_FILTER) += vf_fifo.o diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c index c879f11e32..a29a2740e3 100644 --- a/libavfilter/allfilters.c +++ b/libavfilter/allfilters.c @@ -36,6 +36,8 @@ void avfilter_register_all(void) REGISTER_FILTER (ANULL, anull, af); + REGISTER_FILTER (ANULLSRC, anullsrc, asrc); + REGISTER_FILTER (ASPECT, aspect, vf); REGISTER_FILTER (CROP, crop, vf); REGISTER_FILTER (FIFO, fifo, vf); diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c new file mode 100644 index 0000000000..e1c6480e2c --- /dev/null +++ b/libavfilter/asrc_anullsrc.c @@ -0,0 +1,96 @@ +/* + * This file is part of FFmpeg. + * + * 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. + * + * 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 + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * null audio source + */ + +#include "avfilter.h" +#include "libavcodec/audioconvert.h" + +typedef struct { + int64_t channel_layout; + int64_t sample_rate; +} ANullContext; + +static int init(AVFilterContext *ctx, const char *args, void *opaque) +{ + ANullContext *priv = ctx->priv; + char channel_layout_str[128] = ""; + + priv->sample_rate = 44100; + priv->channel_layout = CH_LAYOUT_STEREO; + + if (args) + sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str); + + if (priv->sample_rate < 0) { + av_log(ctx, AV_LOG_ERROR, "Invalid negative sample rate: %"PRId64"\n", priv->sample_rate); + return AVERROR(EINVAL); + } + + if (*channel_layout_str) + if (!(priv->channel_layout = avcodec_get_channel_layout(channel_layout_str)) + && sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) { + av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n", + channel_layout_str); + return AVERROR(EINVAL); + } + + return 0; +} + +static int config_props(AVFilterLink *outlink) +{ + ANullContext *priv = outlink->src->priv; + char buf[128]; + int chans_nb; + + outlink->sample_rate = priv->sample_rate; + outlink->channel_layout = priv->channel_layout; + + chans_nb = avcodec_channel_layout_num_channels(priv->channel_layout); + avcodec_get_channel_layout_string(buf, sizeof(buf), chans_nb, priv->channel_layout); + av_log(outlink->src, AV_LOG_INFO, + "sample_rate:%"PRId64 " channel_layout:%"PRId64 " channel_layout_description:'%s'\n", + priv->sample_rate, priv->channel_layout, buf); + + return 0; +} + +static int request_frame(AVFilterLink *link) +{ + return -1; +} + +AVFilter avfilter_asrc_anullsrc = { + .name = "anullsrc", + .description = NULL_IF_CONFIG_SMALL("Null audio source, never return audio frames."), + + .init = init, + .priv_size = sizeof(ANullContext), + + .inputs = (AVFilterPad[]) {{ .name = NULL}}, + + .outputs = (AVFilterPad[]) {{ .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_props, + .request_frame = request_frame, }, + { .name = NULL}}, +}; diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 39e5bc942a..f4fb3e6365 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -25,7 +25,7 @@ #include "libavutil/avutil.h" #define LIBAVFILTER_VERSION_MAJOR 1 -#define LIBAVFILTER_VERSION_MINOR 42 +#define LIBAVFILTER_VERSION_MINOR 43 #define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |