[FFmpeg-cvslog] avfilter/vf_spp: Use preinit instead of init_dict
Andreas Rheinhardt
git at videolan.org
Sun Sep 19 06:14:28 EEST 2021
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Mon Sep 13 16:54:58 2021 +0200| [a85d2de45f37aace0cbdb754881effa0c9689784] | committer: Andreas Rheinhardt
avfilter/vf_spp: Use preinit instead of init_dict
By using preinit, the AVDCT already exists directly after
allocating the filter, so that the filter's AVClass's child_next
becomes usable for setting options with the AV_OPT_SEARCH_CHILDREN
search flag. This means that it is no longer necessary to use
the init_dict callback for this filter.
Furthermore, the earlier code did not abide by the documentation
of the init_dict callback at all: Instead of only returning the
options that have not been recognized it always returned all options
on any av_opt_set() error and errored out in this case, even if it
is just an unrecognized option. This behaviour has been inherited by
avfilter_init_dict(), contradicting its documentation. This is also
fixed in this commit.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a85d2de45f37aace0cbdb754881effa0c9689784
---
libavfilter/vf_spp.c | 26 ++++++++------------------
1 file changed, 8 insertions(+), 18 deletions(-)
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
index b3a52fc99b..6c15dbaf66 100644
--- a/libavfilter/vf_spp.c
+++ b/libavfilter/vf_spp.c
@@ -338,6 +338,12 @@ static int config_input(AVFilterLink *inlink)
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
const int bps = desc->comp[0].depth;
+ s->store_slice = store_slice_c;
+ switch (s->mode) {
+ case MODE_HARD: s->requantize = hardthresh_c; break;
+ case MODE_SOFT: s->requantize = softthresh_c; break;
+ }
+
av_opt_set_int(s->dct, "bits_per_sample", bps, 0);
avcodec_dct_init(s->dct);
@@ -451,30 +457,14 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
return AVERROR(ENOSYS);
}
-static av_cold int init_dict(AVFilterContext *ctx, AVDictionary **opts)
+static av_cold int preinit(AVFilterContext *ctx)
{
SPPContext *s = ctx->priv;
- int ret;
s->dct = avcodec_dct_alloc();
if (!s->dct)
return AVERROR(ENOMEM);
- if (opts) {
- AVDictionaryEntry *e = NULL;
-
- while ((e = av_dict_get(*opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
- if ((ret = av_opt_set(s->dct, e->key, e->value, 0)) < 0)
- return ret;
- }
- av_dict_free(opts);
- }
-
- s->store_slice = store_slice_c;
- switch (s->mode) {
- case MODE_HARD: s->requantize = hardthresh_c; break;
- case MODE_SOFT: s->requantize = softthresh_c; break;
- }
return 0;
}
@@ -508,7 +498,7 @@ const AVFilter ff_vf_spp = {
.name = "spp",
.description = NULL_IF_CONFIG_SMALL("Apply a simple post processing filter."),
.priv_size = sizeof(SPPContext),
- .init_dict = init_dict,
+ .preinit = preinit,
.uninit = uninit,
.query_formats = query_formats,
FILTER_INPUTS(spp_inputs),
More information about the ffmpeg-cvslog
mailing list