From patchwork Fri Sep 8 17:03:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Foucu X-Patchwork-Id: 5056 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp501223jaa; Fri, 8 Sep 2017 10:32:42 -0700 (PDT) X-Received: by 10.28.105.200 with SMTP id z69mr2057813wmh.20.1504891962062; Fri, 08 Sep 2017 10:32:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504891962; cv=none; d=google.com; s=arc-20160816; b=nUZ3Siix2uOUgFOHn9L5BYaCcnwDm0nON9nekRHkqgIPsMEf/vMGAMae4IFJi8NB9C OnEWobJmlIANYjeilq76b1hwS12/UGROS1gZAE7g+aOqbsKzu9KA000OFK2ETKek2d5b QwzfCOvV4I/p2eeW36kLYerfVoR4zt0mlda59HT40VrCPVPfd+W1lXenm2bcFHe2zxcq 9EjOekqgEQSPeciZRWy6aK0FkRjbbD0dHSi/ttE5VgE93xWW/ktjRl28HVcXFBLDEPOT +Zk58pFI3czrKX4+T4bIJiN9sMCTqdwlCdXxf7InRNoK8B0Y3flm0bW+JDZxwhcnMN2v yC3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=zrptqw7qKzO4Ru28wlt0bDQwpLBJN+V2wZmosXcEmOY=; b=m1DZ2Z95ZwlawVI6rg6/PRzX19BH1LP0UoU11evl/XVcjjMf8Cl/0YxZkFmRdhm2v1 mtZNL/92WBnpYqBpzpripUvSWSjmV0s5IkXcZEx9h1NuXSwmqPQMwsTl7L3fdtDklKpY 7hyFTI6yyV9/v+FHNtPYBKCjiZ/XQEkNtN1EjzJDTJE+OoCdn1+q3gWO6whNEY95IVY5 NVjFUThNlITCwoLHcpusm7q/LQfwFw/Jtcz4lHKv7m/5QaaidZNHYi6GEP56tmx2Q3V+ kgHtvG6Wj2Cvx3qeUG5Uz2rWt23vZLegiX0aIhpGrUp/OKlNFaU5a5WNVwR19Q8jf32N aJ7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=HtlV13MW; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d17si1776267wrc.555.2017.09.08.10.32.40; Fri, 08 Sep 2017 10:32:42 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=HtlV13MW; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4290D689E0B; Fri, 8 Sep 2017 20:32:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6B401689CEA for ; Fri, 8 Sep 2017 20:32:26 +0300 (EEST) Received: by mail-pg0-f65.google.com with SMTP id q68so1587689pgq.2 for ; Fri, 08 Sep 2017 10:32:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=c/3nU4O8pDqQsA3sRiTYfKlcvf+0UMR12ogPDR2WUSA=; b=HtlV13MWqz4PPjcXkZ8hUlfU8DGkIMH3xrb8oSBAZh3RtxOVuuo/R/ymQgoOEOL2gw Sdax0KWY/rqx7tValeTQQsisBeXw9lESMkof968hA4qoFNwvjNx2AAvdcCQYkUmoTva0 l4tk8Vqgc9lEaJfnLLwzqTOhgW3sH7fbx6EbrrODRvhuo9iVlHN3e/KbVk5rsc7y17+n efoBgrZLU9JeP+JBRShxfsRjLQpJdD7mHc3ooFAnhg3bi2AFfDWB8Gb2NhWpXw+ibgbz Ibv5rYJG9Dm3TGpHyRFjIA35dwWdsur+u39Axa5ifrg7aXYJGC7Ix0J+vy9WRudIuFEq 8VJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=c/3nU4O8pDqQsA3sRiTYfKlcvf+0UMR12ogPDR2WUSA=; b=XXNhrNdJXdfuLID3X/HOO/8HIdCR7vNOyKD/VH6fph0xdS6HGw56UyVDALlO2nsvpb XA738RdpF2U/VhGXuJmWBnAL1y4ZKBUZL54BATbplJll4qLyTrurPLqsoUjof45vDiZS Vte1T18OuLEkl5eBYQCePjLa1X3P+2SuQA2qraBz80VDDhyrDB+Pym8/5E1fIlK1xycS kOQHqJ02PKSvF7WbtbHqHPBCVWsplUWcW5dTJX5FvgZWzSK3shPpDOFjgT0mRbMH1PP8 vaXp+VjQpuDKIjr8RqRpOYMmPIWBvEsTlG5+V8p32V96c2+tdO6ZDd2SfwgbRxsUDwo1 c1Pg== X-Gm-Message-State: AHPjjUjVKb4rVjQligFrFhBrL9iQr7TdCwUmPW4aANbW6YPID0yuUrlb ukaBoqLmZy6p5KzqBF8= X-Google-Smtp-Source: ADKCNb5bDv1hF85zdaLAlQMjLkXxcokw/qIf6OvEAmFkyRqOy2lo3AK3AjfStm3k8+CsxD0t7gwtsw== X-Received: by 10.99.42.3 with SMTP id q3mr3878109pgq.354.1504890211076; Fri, 08 Sep 2017 10:03:31 -0700 (PDT) Received: from tfoucu.mtv.corp.google.com ([172.27.196.64]) by smtp.gmail.com with ESMTPSA id r16sm4964171pfk.178.2017.09.08.10.03.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 08 Sep 2017 10:03:30 -0700 (PDT) From: Thierry Foucu To: ffmpeg-devel@ffmpeg.org Date: Fri, 8 Sep 2017 10:03:20 -0700 Message-Id: <20170908170320.31831-1-tfoucu@gmail.com> X-Mailer: git-send-email 2.14.1.581.gf28d330327-goog Subject: [FFmpeg-devel] [PATCH] vf_fps: when reading EOF, using current_pts to duplicate the last frame if needed. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Thierry Foucu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavfilter/vf_fps.c | 42 +++++++++++++++++++++++++++++++++++++----- tests/ref/fate/filter-fps | 6 ++++++ tests/ref/fate/filter-fps-r | 4 ++++ 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c index 20ccd797d1..e450723173 100644 --- a/libavfilter/vf_fps.c +++ b/libavfilter/vf_fps.c @@ -34,6 +34,8 @@ #include "libavutil/opt.h" #include "libavutil/parseutils.h" +#define FF_INTERNAL_FIELDS 1 +#include "framequeue.h" #include "avfilter.h" #include "internal.h" #include "video.h" @@ -137,13 +139,43 @@ static int request_frame(AVFilterLink *outlink) AVFrame *buf; av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL); - buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base, - outlink->time_base) + s->frames_out; + if (av_fifo_size(s->fifo)) { + buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base, + outlink->time_base) + s->frames_out; - if ((ret = ff_filter_frame(outlink, buf)) < 0) - return ret; + if ((ret = ff_filter_frame(outlink, buf)) < 0) + return ret; - s->frames_out++; + s->frames_out++; + } else { + /* This is the last frame, we may have to duplicate it to match + * the last frame duration */ + int j; + int delta = av_rescale_q_rnd(ctx->inputs[0]->current_pts - s->first_pts, + ctx->inputs[0]->time_base, + outlink->time_base, s->rounding) - s->frames_out ; + if (delta > 0 ) { + for (j = 0; j < delta; j++) { + AVFrame *dup = av_frame_clone(buf); + + av_log(ctx, AV_LOG_DEBUG, "Duplicating frame.\n"); + dup->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base, + outlink->time_base) + s->frames_out; + + if ((ret = ff_filter_frame(outlink, dup)) < 0) + return ret; + + s->frames_out++; + } + } else { + buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base, + outlink->time_base) + s->frames_out; + + if ((ret = ff_filter_frame(outlink, buf)) < 0) + return ret; + s->frames_out++; + } + } } return 0; } diff --git a/tests/ref/fate/filter-fps b/tests/ref/fate/filter-fps index 55712cfb1c..242fb04e85 100644 --- a/tests/ref/fate/filter-fps +++ b/tests/ref/fate/filter-fps @@ -85,3 +85,9 @@ 0, 79, 79, 1, 30576, 0xa2fcd06f 0, 80, 80, 1, 30576, 0xa2fcd06f 0, 81, 81, 1, 30576, 0xd4150aad +0, 82, 82, 1, 30576, 0xd4150aad +0, 83, 83, 1, 30576, 0xd4150aad +0, 84, 84, 1, 30576, 0xd4150aad +0, 85, 85, 1, 30576, 0xd4150aad +0, 86, 86, 1, 30576, 0xd4150aad +0, 87, 87, 1, 30576, 0xd4150aad diff --git a/tests/ref/fate/filter-fps-r b/tests/ref/fate/filter-fps-r index 826b1ed6c6..c1bc7d1547 100644 --- a/tests/ref/fate/filter-fps-r +++ b/tests/ref/fate/filter-fps-r @@ -72,3 +72,7 @@ 0, 79, 79, 1, 30576, 0xa2fcd06f 0, 80, 80, 1, 30576, 0xa2fcd06f 0, 82, 82, 1, 30576, 0xd4150aad +0, 83, 83, 1, 30576, 0xd4150aad +0, 84, 84, 1, 30576, 0xd4150aad +0, 85, 85, 1, 30576, 0xd4150aad +0, 86, 86, 1, 30576, 0xd4150aad