From patchwork Sat May 29 14:51:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Koshevoy X-Patchwork-Id: 27983 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp1462306iof; Sat, 29 May 2021 08:21:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxt6kYYA4KTd9UoMVSsffMp3QQpUh1c3/ZLen3XuHODpUxBYFnoEuM9XuV7mv0XNlYJtLqp X-Received: by 2002:a17:906:2a8e:: with SMTP id l14mr1261806eje.549.1622301678807; Sat, 29 May 2021 08:21:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622301678; cv=none; d=google.com; s=arc-20160816; b=gp5IzVbfdGxFh6py1vZTJ7WAcz34j8wwFXgni698Dmamt4hXVRGx6faA7rufjaLBZh t6voEA4+9VuyQa2vR1JqlJQZbrqM7SiGC2O/bHFhmXOp3LRzkdLqEYuyhAqa0oWaD0NS zvljZnIYnkQU36COXxt6jso0AqHCOFl/de8nyriH7qE5M0Gastf9eJgFDgszCqOp+1Nt aew41d0sONnKuJYQc1WStvkwUAVEh6dirH7K3KZJ2hG0fazMs4xJmUhYZjqjSNeWxx58 Ld2AoDNFS2cXwhB6zERvzlpz2UV9oz4TKxM+tfX1KbsxV7pD/PgwsPV6wjPeNfeluI97 91uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=xnP58FtVV4NM9CJAVfbe/EMDM7CZGdpOpvgDGYdFAVk=; b=XLLWR37WOdW1P10Ze3KI5tM8Ul7AYC0C0mrjILz2S5yg1RC8YIG8tGY77wPpX/PFbw BDcLBkxf9i9fWo/98wvZOVsAHbSEcx6zzkLP3MA3DWBaEpC7f5joj63bG9aauWDQ6fkG sX6g6AEs+AEPQs5i9NAhyH/qTLSdjsKUu7kUPvLoAMW93qgP48dKSx8Xur1nz7zk9L1A Beun0/Jil4u2aBzQ326N/BjCG0sl/t7P+b87n4+JOj8ts/okF5mHQdfjg4hc737C/4M0 RG0dzOKAAyZZmYXmoGS2xjDHdhF/ih+yuwTnMcS2DhX7cAKjYE1IRDaFd+B885/SR0C1 QliQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="G/QHci2w"; 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=QUARANTINE 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 ba8si7822818edb.263.2021.05.29.08.21.18; Sat, 29 May 2021 08:21:18 -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="G/QHci2w"; 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=QUARANTINE 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 9F19F680CEA; Sat, 29 May 2021 18:21:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4969E680895 for ; Sat, 29 May 2021 18:21:09 +0300 (EEST) Received: by mail-qv1-f51.google.com with SMTP id u33so3410305qvf.9 for ; Sat, 29 May 2021 08:21:09 -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:mime-version :content-transfer-encoding; bh=fY6hfNzoFJxbiWSw+dzIBBV9/VLeUo2QyhTk7S0kX5w=; b=G/QHci2wB0co4qZwGHuofosyyBwIZSagi2wjgyHlg4JgGzRsRHO9vzIj2gOedQW106 k+CEFYzCEVU5NB1W22WMZpATOBTPYLfEzx6EQsXtPTzmzf1L+FpI5c+ScSvZVGEN8CJS TbwwNk9CoV0O1Fvq+0JGnJZIsS0QuXS6mg8tS8ScXilfvwlNuOSkPQZmYT3z++PpojsR uBWO/cUjlO39lID3+gEj3CgSgf7/nCI4zKJMIfXg9m6XFBycfkIS8sA/ipVT34ipJ9Ys PU8Mw1Zz1Zza4MFyOenPhPyvYLbAsNalYWQD28jPFTka+q59218RucNWSLfpItW/Pvyv KdgQ== 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:mime-version :content-transfer-encoding; bh=fY6hfNzoFJxbiWSw+dzIBBV9/VLeUo2QyhTk7S0kX5w=; b=NbqHruGL8xOK+xyxHvG/ZegpL46nRnSkI/s41DsrgqiqgD2YB1neCcZGXLA8ezYbp7 CSAW70UKDU/kmSmXWBb4wHx9SkEh4DMWb+0gv9EgTTE/sthZaaVpbUXJp3gX+ZxL4/UU ib4eicAjJKqXHZi2S7NWD4FF4C5KzTO0a3OgA6evUBwXIMJAJsEeWpliiLdP15qWTUZP dJN6ENgs+SE+bu7dQun0yWNCQkNygJTvRMiH8Abg5yyHJLDjsGsgqAOWuPDAcZRWU/xw o0Kr45JD4TlmyYQeRKQEken7EAyTJSr0v9PUJIK0AZxM/iZEs13hE8Ff3PD/JJfmXFQp XyBA== X-Gm-Message-State: AOAM533A/Q+u1BsXz1cvQEto2BBRFgiIGuf5+0X7vRH4tK9r5ZXCfZL4 zV+q9ld3VPSG1+62/vqNttb/QZbdV4S80Q== X-Received: by 2002:a17:902:cecc:b029:ff:8478:4146 with SMTP id d12-20020a170902ceccb02900ff84784146mr10220270plg.66.1622299881687; Sat, 29 May 2021 07:51:21 -0700 (PDT) Received: from homestead.aragog.com ([2605:a601:a9ae:9100:b62e:99ff:fe37:7032]) by smtp.gmail.com with ESMTPSA id s14sm7305085pfs.108.2021.05.29.07.51.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 29 May 2021 07:51:21 -0700 (PDT) From: Pavel Koshevoy To: ffmpeg-devel@ffmpeg.org Date: Sat, 29 May 2021 08:51:20 -0600 Message-Id: <20210529145120.20059-1-pkoshevoy@gmail.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/ccaption_dec: Make real-time latency configurable v2 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Pavel Koshevoy Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: waz9ZcvJuQpN Un-hardcode the 200ms minimum latency between emitting subtitle events so that those that wish to receive a subtitle event for every screen change could do so. The problem with delaying realtime output by any amount is that it is unknown when the next byte pair that would trigger output will happen. It may be within 200ms, or it may be several seconds later -- that's not realtime at all. --- libavcodec/ccaption_dec.c | 4 +++- libavcodec/version.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c index de05d037a8..27c61527f6 100644 --- a/libavcodec/ccaption_dec.c +++ b/libavcodec/ccaption_dec.c @@ -238,6 +238,7 @@ struct Screen { typedef struct CCaptionSubContext { AVClass *class; int real_time; + int real_time_latency_msec; int data_field; struct Screen screen[2]; int active_screen; @@ -906,7 +907,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp } if (ctx->real_time && ctx->screen_touched && - sub->pts > ctx->last_real_time + av_rescale_q(200, ms_tb, AV_TIME_BASE_Q)) { + sub->pts >= ctx->last_real_time + av_rescale_q(ctx->real_time_latency_msec, ms_tb, AV_TIME_BASE_Q)) { ctx->last_real_time = sub->pts; ctx->screen_touched = 0; @@ -927,6 +928,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { { "real_time", "emit subtitle events as they are decoded for real-time display", OFFSET(real_time), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, SD }, + { "real_time_latency_msec", "minimum elapsed time between emitting real-time subtitle events", OFFSET(real_time_latency_msec), AV_OPT_TYPE_INT, { .i64 = 200 }, 0, 500, SD }, { "data_field", "select data field", OFFSET(data_field), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, SD, "data_field" }, { "auto", "pick first one that appears", 0, AV_OPT_TYPE_CONST, { .i64 =-1 }, 0, 0, SD, "data_field" }, { "first", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, SD, "data_field" }, diff --git a/libavcodec/version.h b/libavcodec/version.h index 48165b9ac4..5b1e9e77f3 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 59 #define LIBAVCODEC_VERSION_MINOR 1 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \