On 12/8/2017 10:35 PM, Ronald S. Bultje wrote: > Fixes trac issue #6884 and Netflix/vmaf issue #124. > --- > libavfilter/vf_libvmaf.c | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/libavfilter/vf_libvmaf.c b/libavfilter/vf_libvmaf.c > index 7670c51..d628b95 100644 > --- a/libavfilter/vf_libvmaf.c > +++ b/libavfilter/vf_libvmaf.c > @@ -61,6 +61,7 @@ typedef struct LIBVMAFContext { > int ssim; > int ms_ssim; > char *pool; > + int error; > } LIBVMAFContext; > > #define OFFSET(x) offsetof(LIBVMAFContext, x) > @@ -158,17 +159,24 @@ static void compute_vmaf_score(LIBVMAFContext *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); > + s->error = compute_vmaf(&s->vmaf_score, format, s->width, s->height,
This is an awful API break. It broke compilation for everyone using the latest stable release of libvmaf. See ticket #6921. How hard was for them to add a new function instead? compute_vmaf_score() or whatever. You can't just go and change a public function signature like this... This can still implement this properly before a new release is tagged, for that matter. Could you suggest that to them? > + 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); > } > > static void *call_vmaf(void *ctx) > { > LIBVMAFContext *s = (LIBVMAFContext *) ctx; > compute_vmaf_score(s); > - av_log(ctx, AV_LOG_INFO, "VMAF score: %f\n",s->vmaf_score); > + if (!s->error) { > + av_log(ctx, AV_LOG_INFO, "VMAF score: %f\n",s->vmaf_score); > + } else { > + pthread_mutex_lock(&s->lock); > + pthread_cond_signal(&s->cond); > + pthread_mutex_unlock(&s->lock); > + } > pthread_exit(NULL); > } > > @@ -187,10 +195,17 @@ static int do_vmaf(FFFrameSync *fs) > > pthread_mutex_lock(&s->lock); > > - while (s->frame_set != 0) { > + while (s->frame_set && !s->error) { > pthread_cond_wait(&s->cond, &s->lock); > } > > + if (s->error) { > + av_log(ctx, AV_LOG_ERROR, > + "libvmaf encountered an error, check log for details\n"); > + pthread_mutex_unlock(&s->lock); > + return AVERROR(EINVAL); > + } > + > av_frame_ref(s->gref, ref); > av_frame_ref(s->gmain, main); > > @@ -208,6 +223,7 @@ static av_cold int init(AVFilterContext *ctx) > > s->gref = av_frame_alloc(); > s->gmain = av_frame_alloc(); > + s->error = 0; > > pthread_mutex_init(&s->lock, NULL); > pthread_cond_init (&s->cond, NULL); > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel