[FFmpeg-devel] [PATCH] avfilter:vf_libvmaf: fix errors while running with psnr=1 and improve docs

Ashish Pratap Singh ashk43712 at gmail.com
Wed Oct 11 16:53:48 EEST 2017

From: ashk43712 <ashk43712 at gmail.com>

Hi, this patch fixes the seg fault which ocuured while running libvmaf filter
with option psnr=1. This also improves libvmaf doc a bit.

Signed-off-by: ashk43712 <ashk43712 at gmail.com>
 doc/filters.texi         | 19 ++++++-------------
 libavfilter/vf_libvmaf.c |  7 ++++---
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index e26dde4b1a..90790c2261 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -9885,25 +9885,16 @@ distances from the focal point in the source and target images, respectively.
 @section libvmaf
-Obtain the average VMAF (Video Multi-Method Assessment Fusion)
+Obtain the VMAF (Video Multi-Method Assessment Fusion)
 score between two input videos.
-This filter takes two input videos.
-Both video inputs must have the same resolution and pixel format for
-this filter to work correctly. Also it assumes that both inputs
-have the same number of frames, which are compared one by one.
-The obtained average VMAF score is printed through the logging system.
+The obtained VMAF score is printed through the logging system.
 It requires Netflix's vmaf library (libvmaf) as a pre-requisite.
 After installing the library it can be enabled using:
 @code{./configure --enable-libvmaf}.
 If no model path is specified it uses the default model: @code{vmaf_v0.6.1.pkl}.
-On the below examples the input file @file{main.mpg} being processed is
-compared with the reference file @file{ref.mpg}.
 The filter has following options:
 @table @option
@@ -9934,12 +9925,14 @@ Enables computing ssim along with vmaf.
 Enables computing ms_ssim along with vmaf.
 @item pool
-Set the pool method to be used for computing vmaf.
+Set the pool method (mean, min or harmonic mean) to be used for computing vmaf.
 @end table
 This filter also supports the @ref{framesync} options.
-For example:
+On the below examples the input file @file{main.mpg} being processed is
+compared with the reference file @file{ref.mpg}.
 ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -
 @end example
diff --git a/libavfilter/vf_libvmaf.c b/libavfilter/vf_libvmaf.c
index 2c3a9f3349..7670c51e21 100644
--- a/libavfilter/vf_libvmaf.c
+++ b/libavfilter/vf_libvmaf.c
@@ -40,7 +40,6 @@ typedef struct LIBVMAFContext {
     const AVClass *class;
     FFFrameSync fs;
     const AVPixFmtDescriptor *desc;
-    char *format;
     int width;
     int height;
     double vmaf_score;
@@ -149,6 +148,7 @@ static void compute_vmaf_score(LIBVMAFContext *s)
     int (*read_frame)(float *ref_data, float *main_data, float *temp_data,
                       int stride, void *ctx);
+    char *format;
     if (s->desc->comp[0].depth <= 8) {
         read_frame = read_frame_8bit;
@@ -156,7 +156,9 @@ static void compute_vmaf_score(LIBVMAFContext *s)
         read_frame = read_frame_10bit;
-    s->vmaf_score = compute_vmaf(s->format, s->width, s->height, read_frame, s,
+    format = (char *) s->desc->name;
+    s->vmaf_score = compute_vmaf(format, s->width, s->height, read_frame, s,
                                  s->model_path, s->log_path, s->log_fmt, 0, 0,
                                  s->enable_transform, s->phone_model, s->psnr,
                                  s->ssim, s->ms_ssim, s->pool);
@@ -258,7 +260,6 @@ static int config_input_ref(AVFilterLink *inlink)
     return 0;
 static int config_output(AVFilterLink *outlink)
     AVFilterContext *ctx = outlink->src;

More information about the ffmpeg-devel mailing list