00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #include "avfilter.h"
00025 #include "libavutil/audioconvert.h"
00026
00027 typedef struct {
00028 int64_t channel_layout;
00029 int64_t sample_rate;
00030 } ANullContext;
00031
00032 static int init(AVFilterContext *ctx, const char *args, void *opaque)
00033 {
00034 ANullContext *priv = ctx->priv;
00035 char channel_layout_str[128] = "";
00036
00037 priv->sample_rate = 44100;
00038 priv->channel_layout = AV_CH_LAYOUT_STEREO;
00039
00040 if (args)
00041 sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str);
00042
00043 if (priv->sample_rate < 0) {
00044 av_log(ctx, AV_LOG_ERROR, "Invalid negative sample rate: %"PRId64"\n", priv->sample_rate);
00045 return AVERROR(EINVAL);
00046 }
00047
00048 if (*channel_layout_str)
00049 if (!(priv->channel_layout = av_get_channel_layout(channel_layout_str))
00050 && sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) {
00051 av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n",
00052 channel_layout_str);
00053 return AVERROR(EINVAL);
00054 }
00055
00056 return 0;
00057 }
00058
00059 static int config_props(AVFilterLink *outlink)
00060 {
00061 ANullContext *priv = outlink->src->priv;
00062 char buf[128];
00063 int chans_nb;
00064
00065 outlink->sample_rate = priv->sample_rate;
00066 outlink->channel_layout = priv->channel_layout;
00067
00068 chans_nb = av_get_channel_layout_nb_channels(priv->channel_layout);
00069 av_get_channel_layout_string(buf, sizeof(buf), chans_nb, priv->channel_layout);
00070 av_log(outlink->src, AV_LOG_INFO,
00071 "sample_rate:%"PRId64 " channel_layout:%"PRId64 " channel_layout_description:'%s'\n",
00072 priv->sample_rate, priv->channel_layout, buf);
00073
00074 return 0;
00075 }
00076
00077 static int request_frame(AVFilterLink *link)
00078 {
00079 return -1;
00080 }
00081
00082 AVFilter avfilter_asrc_anullsrc = {
00083 .name = "anullsrc",
00084 .description = NULL_IF_CONFIG_SMALL("Null audio source, never return audio frames."),
00085
00086 .init = init,
00087 .priv_size = sizeof(ANullContext),
00088
00089 .inputs = (AVFilterPad[]) {{ .name = NULL}},
00090
00091 .outputs = (AVFilterPad[]) {{ .name = "default",
00092 .type = AVMEDIA_TYPE_AUDIO,
00093 .config_props = config_props,
00094 .request_frame = request_frame, },
00095 { .name = NULL}},
00096 };