On Sat, Mar 11, 2017 at 5:57 PM, Paul B Mahol <one...@gmail.com> wrote:
> On 3/11/17, Sanchit Sinha <sanchit15...@iiitd.ac.in> wrote: > > Patch details: > > File added avfilter/af_ambisonic.c > > Entries made in avfilter/Makefile and avfilter/allfilters.c > > Entry made in Changelog > > Learn not to top post. > > > From bb9915658d1089e36f5b3131ec5851a058a57c62 Mon Sep 17 00:00:00 2001 > > From: Sanchit Sinha <sanchit15...@iiitd.ac.in> > > Date: Sat, 11 Mar 2017 17:04:47 +0530 > > Subject: [PATCH] avfiler/af_ambisonic.c: file added > avfilter/allfilters.c and > > Makefile: entry added Changelog: entry mentioned > > > > --- > > Changelog | 1 + > > libavfilter/Makefile | 1 + > > libavfilter/af_ambisonic.c | 137 ++++++++++++++++++++++++++++++ > +++++++++++++++ > > libavfilter/allfilters.c | 1 + > > 4 files changed, 140 insertions(+) > > create mode 100644 libavfilter/af_ambisonic.c > > > > diff --git a/Changelog b/Changelog > > index 13628ca..b917ac2 100644 > > --- a/Changelog > > +++ b/Changelog > > @@ -26,6 +26,7 @@ version <next>: > > - native Opus encoder > > - ScreenPressor decoder > > - incomplete ClearVideo decoder > > +- Ambisonic Decoder > > > > version 3.2: > > - libopenmpt demuxer > > diff --git a/libavfilter/Makefile b/libavfilter/Makefile > > index 0ba1c74..16fd612 100644 > > --- a/libavfilter/Makefile > > +++ b/libavfilter/Makefile > > @@ -47,6 +47,7 @@ OBJS-$(CONFIG_ALOOP_FILTER) += > f_loop.o > > OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o > > OBJS-$(CONFIG_AMETADATA_FILTER) += f_metadata.o > > OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o > > +OBJS-$(CONFIG_AMBISONIC_FILTER) += af_ambisonic.o > > B comes before I > > > OBJS-$(CONFIG_ANEQUALIZER_FILTER) += af_anequalizer.o > > OBJS-$(CONFIG_ANULL_FILTER) += af_anull.o > > OBJS-$(CONFIG_APAD_FILTER) += af_apad.o > > diff --git a/libavfilter/af_ambisonic.c b/libavfilter/af_ambisonic.c > > new file mode 100644 > > index 0000000..32f3c0c > > --- /dev/null > > +++ b/libavfilter/af_ambisonic.c > > @@ -0,0 +1,137 @@ > > +/* > > + * 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 > > + */ > > + > > +#include <stdio.h> > > +#include "libavutil/avstring.h" > > +#include "libavutil/channel_layout.h" > > +#include "libavutil/opt.h" > > +#include "audio.h" > > +#include "avfilter.h" > > +#include "formats.h" > > +#include <math.h> > > + > > +typedef struct AmbisonicContext { > > + const AVClass *class; > > + /*Not needed, if any new variables are to be used, this struct can > be populated(f)*/ > > + > > +} AmbisonicContext; > > + > > +#define OFFSET(x) offsetof(AmbisonicContext, x) > > + > > +static const AVOption ambisonic_options[] = { //square will be an > option > > +{NULL} > > +}; > > + > > +AVFILTER_DEFINE_CLASS(ambisonic); > > +static int query_formats(AVFilterContext *ctx) > > +{ > > + AVFilterFormats *formats = NULL; > > + AVFilterChannelLayouts *layout = NULL; > > + int ret; > > + if ((ret = ff_add_format (&formats, AV_SAMPLE_FMT_FLTP )) < > 0 || > > + (ret = ff_set_common_formats (ctx , formats )) < 0 || > > + (ret = ff_add_channel_layout (&layout , AV_CH_LAYOUT_4POINT0)) > < 0 || > > + (ret = ff_set_common_channel_layouts (ctx , layout )) < 0) > > + return ret; > > + formats = ff_all_samplerates(); > > + return ff_set_common_samplerates(ctx, formats); > > +} > > +static int filter_frame(AVFilterLink *inlink, AVFrame *in) > > +{ > > + AVFilterContext *ctx = inlink->dst; > > + AVFilterLink *outlink = ctx->outputs[0]; > > + /*If variables used, this has to be created*/ > > + // AmbisonicContext *s = ctx->priv; > > + // const float *src = (const float *)in->data[0]; > > + // float *dst; > > + AVFrame *out; > > + int itr; > > + float *w,*x,*y; > > + float root8= sqrt(8); > > + float lf=0,lb=0,rb=0,rf=0; > > + > > + if (av_frame_is_writable(in)) > > + { > > + out = in; > > + } > > + else > > + { > > Code style is awful. > > > + out = ff_get_audio_buffer(inlink, in->nb_samples); > > + if (!out) > > + { > > Please do not change code style of code you copied. > Instead follow its style to the end. > > > + av_frame_free(&in); > > + return AVERROR(ENOMEM); > > + } > > + av_frame_copy_props(out, in); > > + } > > + > > + /*If planar samples are used, output must be put in dst*/ > > + //dst = (float *)out->data[0]; > > Remove those remnants. > > > + > > + w=(float *)in->extended_data[0]; > > + x=(float *)in->extended_data[1]; > > + y=(float *)in->extended_data[2]; > > + > > + for(itr=0;itr<in->nb_samples;itr++) > > + { > > For loops { comes in line above. > > > + /*Float pointers to the samples*/ > > Please remove this, maybe this is still hopeful for you, but > I really hope not. If you still have problems with pointers I advise > you to look at other projects. > > > + > > + lf = root8 * (2*(w[itr])+x[itr]+y[itr]); > > + lb = root8 * (2*(w[itr])-x[itr]+y[itr]); > > + rb = root8 * (2*(w[itr])-x[itr]-y[itr]); > > + rf = root8 * (2*(w[itr])+x[itr]-y[itr]); > > + > > + out->extended_data[0][itr]= lf; > > + out->extended_data[1][itr]= lb; > > + out->extended_data[2][itr]= rb; > > + out->extended_data[3][itr]= rf; > > This is wrong. Must use similar pointers like what was done for > in->extended_data. > > > + } > > + > > + if (out != in) > > + av_frame_free(&in); > > Wrong indentation. > > > + return ff_filter_frame(outlink, out); > > +} > > + > > +static const AVFilterPad inputs[] = { > > + { > > + .name = "default", > > Indentation is wrong. > > > + .type = AVMEDIA_TYPE_AUDIO, > > + .filter_frame = filter_frame, > > + // .config_props = config_input, > > Remove commented out stuff. > > > + }, > > + { NULL } > > +}; > > + > > +static const AVFilterPad outputs[] = { > > + { > > + .name = "default", > > + .type = AVMEDIA_TYPE_AUDIO, > > + }, > > + { NULL } > > +}; > > + > > +AVFilter ff_af_ambisonic = { > > + .name = "ambisonic", > > + .description = NULL_IF_CONFIG_SMALL("An ambisonic filter"), > > + .query_formats = query_formats, > > + .priv_size = sizeof(AmbisonicContext), > > + .priv_class = &ambisonic_class, > > + // .uninit = uninit, > > Remove commented out stuff. > > > + .inputs = inputs, > > + .outputs = outputs, > > +}; > > \ No newline at end of file > > diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c > > index df1af8d..59aeb6d 100644 > > --- a/libavfilter/allfilters.c > > +++ b/libavfilter/allfilters.c > > @@ -56,6 +56,7 @@ static void register_all(void) > > REGISTER_FILTER(ALIMITER, alimiter, af); > > REGISTER_FILTER(ALLPASS, allpass, af); > > REGISTER_FILTER(ALOOP, aloop, af); > > + REGISTER_FILTER(AMBISONIC, ambisonic, af); > > REGISTER_FILTER(AMERGE, amerge, af); > > REGISTER_FILTER(AMETADATA, ametadata, af); > > REGISTER_FILTER(AMIX, amix, af); > > -- > > 2.7.4 > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > -- Sanchit Sinha B.Tech- CSE IIIT-Delhi Roll-2015083
From 5d75865b9af710a51cfe17c2128b66a16bfd6574 Mon Sep 17 00:00:00 2001 From: Sanchit Sinha <sanchit15...@iiitd.ac.in> Date: Sat, 11 Mar 2017 18:54:41 +0530 Subject: [PATCH] avfiler/af_ambisonic.c: sound quality improvement Signed-off-by: Sanchit Sinha <sanchit15...@iiitd.ac.in> --- libavfilter/af_ambisonic.c | 50 ++++++++++++++-------------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/libavfilter/af_ambisonic.c b/libavfilter/af_ambisonic.c index 32f3c0c..351ffe9 100644 --- a/libavfilter/af_ambisonic.c +++ b/libavfilter/af_ambisonic.c @@ -27,13 +27,11 @@ typedef struct AmbisonicContext { const AVClass *class; - /*Not needed, if any new variables are to be used, this struct can be populated(f)*/ - } AmbisonicContext; #define OFFSET(x) offsetof(AmbisonicContext, x) -static const AVOption ambisonic_options[] = { //square will be an option +static const AVOption ambisonic_options[] = { {NULL} }; @@ -55,68 +53,52 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; - /*If variables used, this has to be created*/ - // AmbisonicContext *s = ctx->priv; - // const float *src = (const float *)in->data[0]; - // float *dst; AVFrame *out; int itr; - float *w,*x,*y; - float root8= sqrt(8); + float *w,*x,*y,*c1,*c2,*c3,*c4; + float root8 = sqrt(8); float lf=0,lb=0,rb=0,rf=0; - - if (av_frame_is_writable(in)) - { + if (av_frame_is_writable(in)) { out = in; - } - else - { + } else { out = ff_get_audio_buffer(inlink, in->nb_samples); - if (!out) - { + if (!out){ av_frame_free(&in); return AVERROR(ENOMEM); } av_frame_copy_props(out, in); } - - /*If planar samples are used, output must be put in dst*/ - //dst = (float *)out->data[0]; - w=(float *)in->extended_data[0]; x=(float *)in->extended_data[1]; y=(float *)in->extended_data[2]; - for(itr=0;itr<in->nb_samples;itr++) - { - /*Float pointers to the samples*/ + c1=(float *)out->extended_data[0]; + c2=(float *)out->extended_data[1]; + c3=(float *)out->extended_data[2]; + c4=(float *)out->extended_data[3]; + for(itr=0;itr<in->nb_samples;itr++){ lf = root8 * (2*(w[itr])+x[itr]+y[itr]); lb = root8 * (2*(w[itr])-x[itr]+y[itr]); rb = root8 * (2*(w[itr])-x[itr]-y[itr]); rf = root8 * (2*(w[itr])+x[itr]-y[itr]); - - out->extended_data[0][itr]= lf; - out->extended_data[1][itr]= lb; - out->extended_data[2][itr]= rb; - out->extended_data[3][itr]= rf; + c1[itr] = lf; + c2[itr] = rf; + c3[itr] = lb; + c4[itr] = rb; } - if (out != in) av_frame_free(&in); return ff_filter_frame(outlink, out); } - static const AVFilterPad inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_AUDIO, .filter_frame = filter_frame, - // .config_props = config_input, }, { NULL } }; - static const AVFilterPad outputs[] = { { .name = "default", @@ -124,14 +106,12 @@ static const AVFilterPad outputs[] = { }, { NULL } }; - AVFilter ff_af_ambisonic = { .name = "ambisonic", .description = NULL_IF_CONFIG_SMALL("An ambisonic filter"), .query_formats = query_formats, .priv_size = sizeof(AmbisonicContext), .priv_class = &ambisonic_class, - // .uninit = uninit, .inputs = inputs, .outputs = outputs, }; \ No newline at end of file -- 2.7.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel