[FFmpeg-devel] [PATCH v2][GSOC] Audio Tones Source Filter
Paul B Mahol
onemda at gmail.com
Fri Mar 13 16:08:53 EET 2020
Patch should not be difference from previous sent patch.
But always difference to current ffmpeg master tree.
So use git to rebase your work correctly.
On 3/13/20, Marshall Murmu <marshallmax1991 at gmail.com> wrote:
> Renamed the filter from fluidsynth to atone
> ---
> Changelog | 2 +-
> configure | 2 +-
> doc/filters.texi | 5 +-
> libavfilter/Makefile | 2 +-
> libavfilter/allfilters.c | 2 +-
> .../{asrc_fluidsynth.c => asrc_atone.c} | 47 +++++++++----------
> 6 files changed, 29 insertions(+), 31 deletions(-)
> rename libavfilter/{asrc_fluidsynth.c => asrc_atone.c} (86%)
>
> diff --git a/Changelog b/Changelog
> index 2a22599969..f9770f8857 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -46,7 +46,7 @@ version <next>:
> - High Voltage Software ADPCM decoder
> - LEGO Racers ALP (.tun & .pcm) demuxer
> - AMQP 0-9-1 protocol (RabbitMQ)
> -- fluidsynth filter
> +- atone filter
>
>
> version 4.2:
> diff --git a/configure b/configure
> index b22a09fac1..23c0ea6df3 100755
> --- a/configure
> +++ b/configure
> @@ -3466,6 +3466,7 @@ asr_filter_deps="pocketsphinx"
> ass_filter_deps="libass"
> atempo_filter_deps="avcodec"
> atempo_filter_select="rdft"
> +atone_filter_deps="libfluidsynth"
> avgblur_opencl_filter_deps="opencl"
> avgblur_vulkan_filter_deps="vulkan libglslang"
> azmq_filter_deps="libzmq"
> @@ -3511,7 +3512,6 @@ find_rect_filter_deps="avcodec avformat gpl"
> firequalizer_filter_deps="avcodec"
> firequalizer_filter_select="rdft"
> flite_filter_deps="libflite"
> -fluidsynth_filter_deps="libfluidsynth"
> framerate_filter_select="scene_sad"
> freezedetect_filter_select="scene_sad"
> frei0r_filter_deps="frei0r libdl"
> diff --git a/doc/filters.texi b/doc/filters.texi
> index cdf96d1ba1..92f132ec9a 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -6010,7 +6010,7 @@ ffplay -f lavfi flite=text='No more be grieved for
> which that thou hast done.'
> For more information about libflite, check:
> @url{http://www.festvox.org/flite/}
>
> - at section fluidsynth
> + at section atone
>
> Synthesize random notes using libfluidsynth library.
>
> @@ -6034,6 +6034,9 @@ Enter the location of the soundfont. Without loading
> the soundfont fluidsynth wo
>
> @item chan
> Set the MIDI channel. Default value is 0.
> +
> + at item seed
> +Set the seed value for the PRNG
> @end table
>
> @section anoisesrc
> diff --git a/libavfilter/Makefile b/libavfilter/Makefile
> index 626d7c0f09..020c4553cb 100644
> --- a/libavfilter/Makefile
> +++ b/libavfilter/Makefile
> @@ -147,8 +147,8 @@ OBJS-$(CONFIG_AEVALSRC_FILTER) += aeval.o
> OBJS-$(CONFIG_AFIRSRC_FILTER) += asrc_afirsrc.o
> OBJS-$(CONFIG_ANOISESRC_FILTER) += asrc_anoisesrc.o
> OBJS-$(CONFIG_ANULLSRC_FILTER) += asrc_anullsrc.o
> +OBJS-$(CONFIG_ATONE_FILTER) += asrc_atone.o
> OBJS-$(CONFIG_FLITE_FILTER) += asrc_flite.o
> -OBJS-$(CONFIG_FLUIDSYNTH_FILTER) += asrc_fluidsynth.o
> OBJS-$(CONFIG_HILBERT_FILTER) += asrc_hilbert.o
> OBJS-$(CONFIG_SINC_FILTER) += asrc_sinc.o
> OBJS-$(CONFIG_SINE_FILTER) += asrc_sine.o
> diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
> index a1e812093c..d167499cf1 100644
> --- a/libavfilter/allfilters.c
> +++ b/libavfilter/allfilters.c
> @@ -141,8 +141,8 @@ extern AVFilter ff_asrc_aevalsrc;
> extern AVFilter ff_asrc_afirsrc;
> extern AVFilter ff_asrc_anoisesrc;
> extern AVFilter ff_asrc_anullsrc;
> +extern AVFilter ff_asrc_atone;
> extern AVFilter ff_asrc_flite;
> -extern AVFilter ff_asrc_fluidsynth;
> extern AVFilter ff_asrc_hilbert;
> extern AVFilter ff_asrc_sinc;
> extern AVFilter ff_asrc_sine;
> diff --git a/libavfilter/asrc_fluidsynth.c b/libavfilter/asrc_atone.c
> similarity index 86%
> rename from libavfilter/asrc_fluidsynth.c
> rename to libavfilter/asrc_atone.c
> index be98815c56..f3ebab906e 100644
> --- a/libavfilter/asrc_fluidsynth.c
> +++ b/libavfilter/asrc_atone.c
> @@ -26,7 +26,7 @@
> #include "formats.h"
> #include "internal.h"
>
> -typedef struct FluidSynthContext {
> +typedef struct AToneContext {
> const AVClass *class;
> fluid_settings_t *settings;
> fluid_synth_t *synth;
> @@ -37,13 +37,14 @@ typedef struct FluidSynthContext {
> char *soundfont;
> int64_t pts;
> int64_t duration;
> + int64_t seed;
> AVLFG c;
> -} FluidSynthContext;
> +} AToneContext;
>
> -#define OFFSET(x) offsetof(FluidSynthContext, x)
> +#define OFFSET(x) offsetof(AToneContext, x)
> #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
>
> -static const AVOption fluidsynth_options[] = {
> +static const AVOption atone_options[] = {
> {"sample_rate", "set sample rate",
> OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64=44100}, 1,
> INT_MAX, FLAGS},
> {"r", "set sample rate",
> OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64=44100}, 1,
> INT_MAX, FLAGS},
> {"nb_samples", "set number of samples per requested frame",
> OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64=1024}, 1,
> INT64_MAX, FLAGS},
> @@ -52,14 +53,15 @@ static const AVOption fluidsynth_options[] = {
> {"d", "set duration",
> OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64=10000000}, 0,
> INT64_MAX, FLAGS},
> {"soundfont", "location of soundfont",
> OFFSET(soundfont), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN,
> CHAR_MAX, FLAGS},
> {"chan", "set MIDI channel",
> OFFSET(chan), AV_OPT_TYPE_INT, {.str=0}, 0, 15,
> FLAGS},
> + {"seed", "set random seed",
> OFFSET(seed), AV_OPT_TYPE_INT64, {.i64=-1}, -1,
> INT64_MAX, FLAGS},
> { NULL }
> };
>
> -AVFILTER_DEFINE_CLASS(fluidsynth);
> +AVFILTER_DEFINE_CLASS(atone);
>
> static av_cold int init(AVFilterContext *ctx)
> {
> - FluidSynthContext *fluidsynth = ctx->priv;
> + AToneContext *fluidsynth = ctx->priv;
> fluidsynth->soundfont_id = -1;
> /// Initialize the fluidsynth setting
> fluidsynth->settings = new_fluid_settings();
> @@ -78,26 +80,21 @@ static av_cold int init(AVFilterContext *ctx)
> if(fluidsynth->soundfont_id < 0) {
> av_log(ctx, AV_LOG_ERROR, "Failed to load soundfont\n");
> }
> -
> return 0;
> }
>
> static av_cold void uninit(AVFilterContext *ctx)
> {
> - FluidSynthContext *fluidsynth = ctx->priv;
> -
> + AToneContext *fluidsynth = ctx->priv;
> delete_fluid_synth(fluidsynth->synth);
> delete_fluid_settings(fluidsynth->settings);
> -
> }
>
> static int query_formats(AVFilterContext *ctx)
> {
> - FluidSynthContext *fluidsynth = ctx->priv;
> -
> + AToneContext *fluidsynth = ctx->priv;
> AVFilterChannelLayouts *chanlayout = NULL;
> int64_t chanlayouts =
> av_get_default_channel_layout(2*fluid_synth_count_audio_channels(fluidsynth->synth));
> -
> AVFilterFormats *formats = NULL;
> AVFilterFormats *sample_rate = NULL;
> int ret;
> @@ -112,13 +109,14 @@ static int query_formats(AVFilterContext *ctx)
> return 0;
> }
>
> -
> static int config_output(AVFilterLink *outlink)
> {
> AVFilterContext *ctx = outlink->src;
> - FluidSynthContext *fluidsynth = ctx->priv;
> + AToneContext *fluidsynth = ctx->priv;
>
> - av_lfg_init(&fluidsynth->c, av_get_random_seed());
> + if(fluidsynth->seed == -1)
> + fluidsynth->seed = av_get_random_seed();
> + av_lfg_init(&fluidsynth->c, fluidsynth->seed);
>
> outlink->sample_rate = fluidsynth->sample_rate;
> fluidsynth->duration = av_rescale(fluidsynth->duration,
> fluidsynth->sample_rate, AV_TIME_BASE);
> @@ -129,7 +127,7 @@ static int config_output(AVFilterLink *outlink)
> static int request_frame(AVFilterLink *outlink)
> {
> AVFrame *frame;
> - FluidSynthContext *fluidsynth = outlink->src->priv;
> + AToneContext *fluidsynth = outlink->src->priv;
> int nb_samples, key;
>
> if (fluidsynth->duration) {
> @@ -143,18 +141,15 @@ static int request_frame(AVFilterLink *outlink)
> return AVERROR(ENOMEM);
>
> key = av_lfg_get(&fluidsynth->c) % 128 ;
> -
> fluid_synth_noteon(fluidsynth->synth, fluidsynth->chan, key, 100);
> fluid_synth_write_float(fluidsynth->synth, nb_samples, frame->data[0],
> 0, 2, frame->data[0], 1, 2);
> fluid_synth_noteoff(fluidsynth->synth, fluidsynth->chan, key);
> -
> frame->pts = fluidsynth->pts;
> fluidsynth->pts += nb_samples;
> -
> return ff_filter_frame(outlink, frame);
> }
>
> -static const AVFilterPad fluidsynth_outputs[] = {
> +static const AVFilterPad atone_outputs[] = {
> {
> .name = "default",
> .type = AVMEDIA_TYPE_AUDIO,
> @@ -164,14 +159,14 @@ static const AVFilterPad fluidsynth_outputs[] = {
> { NULL }
> };
>
> -AVFilter ff_asrc_fluidsynth = {
> - .name = "fluidsynth",
> +AVFilter ff_asrc_atone = {
> + .name = "atone",
> .description = NULL_IF_CONFIG_SMALL("Synthesize tones using
> libfluidsynth."),
> .query_formats = query_formats,
> .init = init,
> .uninit = uninit,
> - .priv_size = sizeof(FluidSynthContext),
> + .priv_size = sizeof(AToneContext),
> .inputs = NULL,
> - .outputs = fluidsynth_outputs,
> - .priv_class = &fluidsynth_class,
> + .outputs = atone_outputs,
> + .priv_class = &atone_class,
> };
> --
> 2.25.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list