Paul B Mahol <one...@gmail.com> 于2019年11月2日周六 下午6:34写道: > > You mixed functional and non-functional changes in single patch. Lesson learned. I'll submit a new patch. Thanks a lot. Today is a good day. > This is big no. > > On 11/2/19, Tao Zhang <nowe...@gmail.com> wrote: > > Good weekend. Is it ok or any more suggestions? > > > > Tao Zhang <nowe...@gmail.com> 于2019年10月28日周一 下午2:53写道: > >> > >> ping > >> > >> leozhang <leozh...@qiyi.com> 于2019年10月24日周四 下午5:18写道: > >> > > >> > Reviewed-by: Paul B Mahol <one...@gmail.com> > >> > Reviewed-by: Jun Zhao <myp...@gmail.com> > >> > Signed-off-by: leozhang <leozh...@qiyi.com> > >> > --- > >> > libavfilter/vf_bilateral.c | 57 > >> > ++++++++++++++++++++++++++++++++++------------ > >> > 1 file changed, 43 insertions(+), 14 deletions(-) > >> > > >> > diff --git a/libavfilter/vf_bilateral.c b/libavfilter/vf_bilateral.c > >> > index 3c9d800..4d7bf68 100644 > >> > --- a/libavfilter/vf_bilateral.c > >> > +++ b/libavfilter/vf_bilateral.c > >> > @@ -29,6 +29,8 @@ > >> > #include "internal.h" > >> > #include "video.h" > >> > > >> > +#include <float.h> > >> > + > >> > typedef struct BilateralContext { > >> > const AVClass *class; > >> > > >> > @@ -54,7 +56,7 @@ typedef struct BilateralContext { > >> > } BilateralContext; > >> > > >> > #define OFFSET(x) offsetof(BilateralContext, x) > >> > -#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM > >> > +#define FLAGS > >> > AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM > >> > > >> > static const AVOption bilateral_options[] = { > >> > { "sigmaS", "set spatial sigma", OFFSET(sigmaS), > >> > AV_OPT_TYPE_FLOAT, {.dbl=0.1}, 0.0, 10, FLAGS }, > >> > @@ -91,19 +93,27 @@ static int query_formats(AVFilterContext *ctx) > >> > return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); > >> > } > >> > > >> > -static int config_input(AVFilterLink *inlink) > >> > +static int init_lut(BilateralContext *s) > >> > { > >> > - BilateralContext *s = inlink->dst->priv; > >> > - const AVPixFmtDescriptor *desc = > >> > av_pix_fmt_desc_get(inlink->format); > >> > float inv_sigma_range; > >> > > >> > - s->depth = desc->comp[0].depth; > >> > inv_sigma_range = 1.0f / (s->sigmaR * ((1 << s->depth) - 1)); > >> > > >> > //compute a lookup table > >> > for (int i = 0; i < (1 << s->depth); i++) > >> > s->range_table[i] = expf(-i * inv_sigma_range); > >> > > >> > + return 0; > >> > +} > >> > + > >> > +static int config_input(AVFilterLink *inlink) > >> > +{ > >> > + BilateralContext *s = inlink->dst->priv; > >> > + const AVPixFmtDescriptor *desc = > >> > av_pix_fmt_desc_get(inlink->format); > >> > + > >> > + s->depth = desc->comp[0].depth; > >> > + init_lut(s); > >> > + > >> > s->planewidth[1] = s->planewidth[2] = AV_CEIL_RSHIFT(inlink->w, > >> > desc->log2_chroma_w); > >> > s->planewidth[0] = s->planewidth[3] = inlink->w; > >> > s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, > >> > desc->log2_chroma_h); > >> > @@ -325,6 +335,24 @@ static int filter_frame(AVFilterLink *inlink, > >> > AVFrame *in) > >> > return ff_filter_frame(outlink, out); > >> > } > >> > > >> > +static int process_command(AVFilterContext *ctx, const char *cmd, const > >> > char *args, > >> > + char *res, int res_len, int flags) > >> > +{ > >> > + BilateralContext *s = ctx->priv; > >> > + int ret; > >> > + float old_sigmaR = s->sigmaR; > >> > + > >> > + if ((ret = ff_filter_process_command(ctx, cmd, args, res, res_len, > >> > flags)) < 0) { > >> > + return ret; > >> > + } > >> > + > >> > + if (fabs(old_sigmaR - s->sigmaR) > FLT_EPSILON && (ret = > >> > init_lut(s)) < 0) { > >> > + s->sigmaR = old_sigmaR; > >> > + } > >> > + > >> > + return ret; > >> > +} > >> > + > >> > static av_cold void uninit(AVFilterContext *ctx) > >> > { > >> > BilateralContext *s = ctx->priv; > >> > @@ -358,13 +386,14 @@ static const AVFilterPad bilateral_outputs[] = { > >> > }; > >> > > >> > AVFilter ff_vf_bilateral = { > >> > - .name = "bilateral", > >> > - .description = NULL_IF_CONFIG_SMALL("Apply Bilateral filter."), > >> > - .priv_size = sizeof(BilateralContext), > >> > - .priv_class = &bilateral_class, > >> > - .uninit = uninit, > >> > - .query_formats = query_formats, > >> > - .inputs = bilateral_inputs, > >> > - .outputs = bilateral_outputs, > >> > - .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, > >> > + .name = "bilateral", > >> > + .description = NULL_IF_CONFIG_SMALL("Apply Bilateral filter."), > >> > + .priv_size = sizeof(BilateralContext), > >> > + .priv_class = &bilateral_class, > >> > + .uninit = uninit, > >> > + .query_formats = query_formats, > >> > + .inputs = bilateral_inputs, > >> > + .outputs = bilateral_outputs, > >> > + .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, > >> > + .process_command = process_command, > >> > }; > >> > -- > >> > 1.8.3.1 > >> > > >> > _______________________________________________ > >> > ffmpeg-devel mailing list > >> > ffmpeg-devel@ffmpeg.org > >> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > >> > > >> > To unsubscribe, visit link above, or email > >> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".