[FFmpeg-devel] [PATCH] avfilter/vf_libvmaf: update filter for libvmaf v2.0.0
Moritz Barsnick
barsnick at gmx.net
Wed Jun 30 16:54:56 EEST 2021
Hi,
> -enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.5.2" libvmaf.h compute_vmaf
> +enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init
General question: Is it acceptable to drop support for libvmaf 1.x? I
saw that Fedora 33 is still on 1.x.
> -Obtain the VMAF (Video Multi-Method Assessment Fusion)
> -score between two input videos.
> +Calulate the VMAF (Video Multi-Method Assessment Fusion) score for a
> +reference/distorted pair of input videos.
These documentation improvements aren't related to the actual switch to
2.x, and should be in a separate commit.
> @code{./configure --enable-libvmaf}.
> -If no model path is specified it uses the default model: @code{vmaf_v0.6.1.pkl}.
Unless they are consequences of the switch, of course.
> - {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS},
> - {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
> - {"log_fmt", "Set the format of the log (csv, json or xml).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
> - {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> - {"phone_model", "Invokes the phone model that will generate higher VMAF scores.", OFFSET(phone_model), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> - {"psnr", "Enables computing psnr along with vmaf.", OFFSET(psnr), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> - {"ssim", "Enables computing ssim along with vmaf.", OFFSET(ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> - {"ms_ssim", "Enables computing ms-ssim along with vmaf.", OFFSET(ms_ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> - {"pool", "Set the pool method to be used for computing vmaf.", OFFSET(pool), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
> - {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS},
> - {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS},
> - {"enable_conf_interval", "Enables confidence interval.", OFFSET(enable_conf_interval), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> + {"model", "Set the model to be used for computing vmaf.", OFFSET(model_cfg), AV_OPT_TYPE_STRING, {.str="version=vmaf_v0.6.1"}, 0, 1, FLAGS},
> + {"feature", "Set the feature to be used for computing vmaf.", OFFSET(feature_cfg), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
> + {"log_path", "Set the file path to be used to write log.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
> + {"log_fmt", "Set the format of the log (csv, json, xml, or sub).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str="xml"}, 0, 1, FLAGS},
> + {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS},
> + {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS},
Some changes are easier to review, if you don't change all the
whitespace initially.
> + if (err) return AVERROR(ENOMEM);
Line break.
> + int err = 0;
> + if (!str) return NULL;
Line break.
> + if (!dict) goto fail;
Ditto, in several subsequent places.
> + if (str_copy)
> + av_free(str_copy);
No need to check for str_copy.
> + e = NULL;
> + while (e = av_dict_get(dict[i], "", e, AV_DICT_IGNORE_SUFFIX)) {
I believe the assigned value from "e = NULL" is never used.
> .name = "main",
> .type = AVMEDIA_TYPE_VIDEO,
> - },{
> + },
> + {
> .name = "reference",
Unrelated style change.
Since it looks like a complete re-write, it doesn't look like support
for both old and new API seems feasible, right? Just wondering, I am
not the one to judge.
(And I cannot judge on the actual functionality.)
Oh, and you should probably bump at least libavfilter MICRO version -
not sure whether even MINOR is justified.
Cheers,
Moritz
More information about the ffmpeg-devel
mailing list