[FFmpeg-devel] [PATCH v6 2/4] avfilter/vf_framerate: if metadata lavfi.scd.mafd exists, we'll use it first

Marton Balint cus at passwd.hu
Thu May 14 21:43:06 EEST 2020



On Thu, 14 May 2020, lance.lmwang at gmail.com wrote:

> From: Limin Wang <lance.lmwang at gmail.com>
>
> Reviewed-by: Paul B Mahol <onemda at gmail.com>
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
> libavfilter/vf_framerate.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/libavfilter/vf_framerate.c b/libavfilter/vf_framerate.c
> index 6c8d01c..8d16998 100644
> --- a/libavfilter/vf_framerate.c
> +++ b/libavfilter/vf_framerate.c
> @@ -71,13 +71,20 @@ static double get_scene_score(AVFilterContext *ctx, AVFrame *crnt, AVFrame *next
>
>     if (crnt->height == next->height &&
>         crnt->width  == next->width) {
> +        AVDictionaryEntry *e_mafd = NULL;
>         uint64_t sad;
> -        double mafd, diff;
> +        double mafd = HUGE_VAL, diff;
> +        char *tail = NULL;
>
>         ff_dlog(ctx, "get_scene_score() process\n");
> -        s->sad(crnt->data[0], crnt->linesize[0], next->data[0], next->linesize[0], crnt->width, crnt->height, &sad);
> -        emms_c();
> -        mafd = (double)sad * 100.0 / (crnt->width * crnt->height) / (1 << s->bitdepth);
> +        e_mafd = av_dict_get(next->metadata, "lavfi.scd.mafd", NULL, AV_DICT_MATCH_CASE);
> +        if (e_mafd)
> +            mafd = strtod(e_mafd->value, &tail);
> +        if (*tail || mafd == HUGE_VAL) {

Seems like null pointer dereference.

I am not a huge fan of this patch, mafd refers to a score between this 
frame and the previous frame, we cannot ensure that there were no 
additional frame processing between scdet and this filter which may have 
duplicated or removed frames. So I'd rather not add this feature.

Regards,
Marton

> +            s->sad(crnt->data[0], crnt->linesize[0], next->data[0], next->linesize[0], crnt->width, crnt->height, &sad);
> +            emms_c();
> +            mafd = (double)sad * 100.0 / (crnt->width * crnt->height) / (1 << s->bitdepth);
> +        }
>         diff = fabs(mafd - s->prev_mafd);
>         ret  = av_clipf(FFMIN(mafd, diff), 0, 100.0);
>         s->prev_mafd = mafd;
> -- 
> 1.8.3.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list