From patchwork Sat Jun 5 17:40:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Koshevoy X-Patchwork-Id: 28098 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp2128437iof; Sat, 5 Jun 2021 10:47:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvj5MnIUswejtYPv3gBReQbLzs5o8lvi8p3npEo25Db0Ay6SZERizVzPedMrLZctjXGTgs X-Received: by 2002:a17:906:1404:: with SMTP id p4mr9971557ejc.107.1622915251228; Sat, 05 Jun 2021 10:47:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622915251; cv=none; d=google.com; s=arc-20160816; b=TJHAgLCd+CBCt4K6Y19DLKDPhjuCFPwUUyAwVH7FiHwL7UZqzolEDXDL46lWtyY0iZ 3vE8t4JxNdHId5yKAz/DLTo1NUbtFwVeyd8SLhLL2oSAbH9GNdgxT4dMKB1nnCRwwzAy EcfgBan7f667VZF9edsCkn1UdJoysVN93tshcOeFXHTkKNhKAl3wuOcwOLgGCgZR05f6 EMqziwfdfIW8xhjmBh9nb2rBDkAeiqTWDqy+TZ+Eul2Q+VBxv2QLCC13EBX+ltmnwAOV qLHGa8mJUCjTqkgp1BPB7UV+ODrssrBBH5WuVQf3CKKDX+wjT/0YJRt1AY+9wRV3Kuqw hiwQ== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=xnP58FtVV4NM9CJAVfbe/EMDM7CZGdpOpvgDGYdFAVk=; b=NSlNmbyQaQ8m9uC3p3aUavoAkTC4zdsVxnJjYCaaJE8Btfd0fkJ25ZNDm3fXPn0iEn sOlJl3NcbuAtdWZ561ikYt79Yu/KCL840+/+C+YeaTVq/QYWFWVQALJjWz/t5/cZD5vF egkdt3iXBPo3f8IqXmETiehhIyPAG3Qg3e72+Gx+Kd9MrUScP47n7Y91G7VnO9jzdxmb CHOkMFgLOh8pJKTlVUCJl557j47XzdsurSJMFuNoHnuGMdxRMIktYjAuhcGg4q47+Z7R ySo7HFpFB662iSX7aDwRskMe+rZYVZ9JjGUgtRwTxP7k23BzsO0YQbrCU/5gwYaDfA1J jIEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=gkO6qgza; 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 l20si7384043ejn.131.2021.06.05.10.47.30; Sat, 05 Jun 2021 10:47:31 -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=gkO6qgza; 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 D77B368A5CB; Sat, 5 Jun 2021 20:47:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A5D1687FED for ; Sat, 5 Jun 2021 20:47:19 +0300 (EEST) Received: by mail-pf1-f169.google.com with SMTP id h12so7010977pfe.2 for ; Sat, 05 Jun 2021 10:47:19 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=fY6hfNzoFJxbiWSw+dzIBBV9/VLeUo2QyhTk7S0kX5w=; b=gkO6qgza5xc/tpKqmQGgybXVBlXftsV3Kr9I9E5HSAMkO6SA18+1KjA9xafEpAe7Jy WSr/kcj2sBonO5WIJ7d9kCMYTqXN5yurP7QHM3CPcOpcnF3+ETDBHUJ8ybcltv+bs42c DrN/Ybs+K2cX25jKE0ZL7/ngMc8VKQH7te7fA5k1WgbkyPTy5C/rcjfuA8iAAXyFx8Py LCemQBX0jSXA2PGQl/b2DvaUgJb15J4GtWPf0Vaug7wc159kudK8PCJtEpdLwuZscAj2 9Xrxi2IfgGFMduYVIhQL18/yNfvvTxW+TYcE0fCMq2/0s9TQ8GJYbWYLEvzKXxjguMjC FVKw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=fY6hfNzoFJxbiWSw+dzIBBV9/VLeUo2QyhTk7S0kX5w=; b=RVH3hNxKf9lfFVnfMUcFStq7B49O3E6feyTpq1ksepI/dDK9ZNLTecj507C5yQ9rmA 0SiVTw6VMs4XdmWj6KeEbZLOBBtitKi+LQmgxfWXIDjJiG91ukxPqV5D+ApE4j5BfIX4 K+xgjOVzJBGiW2togliQac26u0Tou73ECd4xXMw9o0liIwW/WjbtrYt381J8rgLnXNzQ uBpHulBerTT6Q+ojzsxoCnvwAAVFnhCtNojKuAFCx01gFf69N8bKRvG9dsmPCcYQqXak zPtRvzAyxfsKkuIkinhUrFLjjK2FTL/n+u6/k0d5vjKEhF3SKcFVUFl4+6N4npjNRM0J Dtrg== X-Gm-Message-State: AOAM531m45JJ7hF68YjvWeqiFzx4DpSVYFm3ETAwkdZ8GBu7wJteTvHy o0BgG53J55Ruj7MaQu1qc1GkgWXSf/2jWw== X-Received: by 2002:a65:5bc6:: with SMTP id o6mr10591346pgr.364.1622914854003; Sat, 05 Jun 2021 10:40:54 -0700 (PDT) Received: from homestead.aragog.com ([2605:a601:a9ae:9100:b62e:99ff:fe37:7032]) by smtp.gmail.com with ESMTPSA id f7sm4362855pfk.191.2021.06.05.10.40.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Jun 2021 10:40:53 -0700 (PDT) From: Pavel Koshevoy To: ffmpeg-devel@ffmpeg.org Date: Sat, 5 Jun 2021 11:40:52 -0600 Message-Id: <20210605174052.25844-2-pkoshevoy@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210605174052.25844-1-pkoshevoy@gmail.com> References: <20210605174052.25844-1-pkoshevoy@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/ccaption_dec: Make real-time latency configurable 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: bAhkaBdtfvWi 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, \