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 /libavfilter | |
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
Diffstat (limited to 'libavfilter')
-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 |
4 files changed, 101 insertions, 1 deletions
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, \ |