From patchwork Tue Dec 25 20:41:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Barsnick X-Patchwork-Id: 11548 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0792944CBA9 for ; Tue, 25 Dec 2018 22:41:56 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B996E68B047; Tue, 25 Dec 2018 22:41:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F3C0B68AFF3 for ; Tue, 25 Dec 2018 22:41:45 +0200 (EET) Received: from goodtimes.fritz.box ([79.223.42.222]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0M1VlJ-1hV6jn2BRZ-00tWv1; Tue, 25 Dec 2018 21:41:50 +0100 From: Moritz Barsnick To: FFmpeg development discussions and patches Date: Tue, 25 Dec 2018 21:41:39 +0100 Message-Id: <4d43a17210ff1f31a5d53a6784520fa93dd625c0.1545769801.git.barsnick@gmx.net> X-Mailer: git-send-email 2.14.5 In-Reply-To: References: In-Reply-To: <6b1eaa365f8ffed7683ceffee9fb55e186361a1e.1545769801.git.barsnick@gmx.net> References: <6b1eaa365f8ffed7683ceffee9fb55e186361a1e.1545769801.git.barsnick@gmx.net> X-Provags-ID: V03:K1:KL2ZLEIzqPV1VHlpsCgHpWGWS/iDdxctS5OfwOeD4G1j3rg5hHf IkEsDHBlVSQb5ewnn0gEu5ChTXdUOBD7zWj8IGle+qL9WVoRTz2x9bQJ0pKPfb6SeNispK8 tJoqac3TsxxyBuIX0dVzBnIzPh/JvV8NewmUnd5u5M3k7O+FCWNHZey6yTFLvVFfRXb/uMe XLdPGSFa6gb0Tl4B48HpQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:OmabfK5AQtw=:1Zqf8FGfI6tZWF8DoZ3JpU j8gM8hoQGavgXHQy+ymp+HGIQobuVOQnOXDs+yjwZXZPp3RPAkzOr3Q4/W8TUFEluKRthQPWK jvySXQnRt1lkweYfmwem/gP9SdTBDZ+kDCabBRScWT4hqD5plGt3jwNg0M67HwOLiq6hfCpWQ CZ5I34rAvYrIijYvIZM6YID9YLtcfe2fNxFckG6qo7MLI9A/Mi2TxfPF+3gOQGhqZ4jCEwid0 cc/Ekpt2pAy77H8gU+nvv/+yWPCR2sAM3/ngGXWvKBReltLYozKOvHLZLz9Fr/U35BiVr/0I/ BDysCLbGlgW+ZQhiNDUozctz5KRHhn+ySXv4uO1VPnB7GDv+5vQmqfBVSQcE3yJFfggqauO8D 90LX3z78MP7m+Wym/55DiYF2RzZ7kh0psRKuHzofHbykpxmWQXmGJc/W2GBef+YTAKYo/piZQ APJRS90eGGqg4FTypGrHAiKL8csXv24VyZG4agwhiKkIFhKRJR6EeVsemjUSqFMmT6Bey3ggz 6izbk6rN6oMQERBJTJWkrS57WVnw/OlQnv+BDC9DxLmKXR6rtcpjOAJnqQSZkLjc6z2Li4JAj OlIQeGDMGm7a38bjphP72Q2E2YCw7hqwMAs10scohdZS8g0C3gHmarg4JmRrcaCocReintBzl pXbRzzVQ3tW7R9n1vvGMOu4AbIoHJoH45viRAOAGkHdF4AFib7iHD/SkV4HMBni3rFsXl800Q MnnGYivDyLgWKRPV1jzHxu9avjqgXBYK63e2B/8kJnfQhGp+ueSndgmSzuH+/C+jbvVYTyNXm O9D+AMeQ8uftEV/B0cu0Xc8++RsNAmpnBKfdKCYRLYqvNvxKUx+AGufUZ/eYsnF0+kU3r2nyJ o7SsjBeA/zoMTnVNaNfh4Ua10Xu0KDUawSLOiCjII= Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/realtime_bsf: add option to scale speed 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: Moritz Barsnick MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Moritz Barsnick --- doc/bitstream_filters.texi | 4 ++++ libavcodec/realtime_bsf.c | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi index 8c71100460..860c555c3f 100644 --- a/doc/bitstream_filters.texi +++ b/doc/bitstream_filters.texi @@ -610,6 +610,10 @@ It accepts the following options: @item limit Time limit for the pauses. Any pause longer than that will be considered a timestamp discontinuity and reset the timer. Default is 2 seconds. +@item speed +Speed factor for processing. The value must be a float larger than zero. +Values larger than 1.0 will speed up processing, smaller will slow it down. +The @var{limit} is automatically adapted accordingly. Default is 1.0. @end table @section remove_extra diff --git a/libavcodec/realtime_bsf.c b/libavcodec/realtime_bsf.c index eb4b0b69ed..31a648f96c 100644 --- a/libavcodec/realtime_bsf.c +++ b/libavcodec/realtime_bsf.c @@ -24,11 +24,13 @@ #include "libavutil/opt.h" #include "avcodec.h" #include "bsf.h" +#include typedef struct RealtimeContext { const AVClass *class; int64_t delta; int64_t limit; + double speed; unsigned inited; } RealtimeContext; @@ -42,7 +44,7 @@ static int realtime_filter(AVBSFContext *bsf, AVPacket *pkt) return ret; if (pkt->pts != AV_NOPTS_VALUE) { - int64_t pts = av_rescale_q(pkt->pts, bsf->time_base_in, AV_TIME_BASE_Q); + int64_t pts = av_rescale_q(pkt->pts, bsf->time_base_in, AV_TIME_BASE_Q) / ctx->speed; int64_t now = av_gettime_relative(); int64_t sleep = pts - now + ctx->delta; if (!ctx->inited) { @@ -50,7 +52,7 @@ static int realtime_filter(AVBSFContext *bsf, AVPacket *pkt) sleep = 0; ctx->delta = now - pts; } - if (sleep > ctx->limit || sleep < -ctx->limit) { + if (sleep > ctx->limit / ctx->speed || sleep < -ctx->limit / ctx->speed) { av_log(ctx, AV_LOG_WARNING, "time discontinuity detected: %"PRIi64" us, resetting\n", sleep); @@ -72,6 +74,7 @@ static int realtime_filter(AVBSFContext *bsf, AVPacket *pkt) #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_BSF_PARAM) static const AVOption options[] = { { "limit", "sleep time limit", OFFSET(limit), AV_OPT_TYPE_DURATION, { .i64 = 2000000 }, 0, INT64_MAX, FLAGS }, + { "speed", "speed factor", OFFSET(speed), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, DBL_MIN, DBL_MAX, FLAGS }, { NULL }, };