From patchwork Wed May 26 02:16:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Koshevoy X-Patchwork-Id: 27951 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp4437639iof; Tue, 25 May 2021 20:12:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8pAaN09a2JbMaXvotzKUWdHR0r6PKbJe4Ezc+TCla8U6zpdsx80qxQ7MvOa/mmeGjWGxN X-Received: by 2002:a17:906:fc4:: with SMTP id c4mr33173142ejk.111.1621998773827; Tue, 25 May 2021 20:12:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621998773; cv=none; d=google.com; s=arc-20160816; b=hyfVg5snLIWp4Dha0Ds8CpwCtD1SXnH5DLFL6Eyp5B5yJZZROyrH6o9jXz993U7DcH f9Pplccy505d9/Cx5LxNl44uuJUvjwaQEgTTQj6Jzl8VFk9RKYbLWs7E//eos3Yzb5zR jtz2DmZA5RxC59dg2lorLB25eSY8V06sPoOh4EakYvfnH7huka0zweIX/QsttpByRsbG Io18IJg/UbOUQ+CspprC5clLsrqzYQ0Z+IAD4EaJv6duH7QoNko64w3/4BBCqx2F7K9p 4fJzIsuL/0GtiHhGTuQcvwX7kNqi2KKFWM3h9QYdi+ulx/r1Es+7A23FrMHA8prllvzO Unxg== 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=VWFgcZnfzIay24Y9ns9ldY3/iYGE0dgqBkSjESTlZIg=; b=XwNuyYxJzFuRkDiuNNiYqYimrkepjhVc1NALHuqnNnjv9oJD1iS6uzUffo8nwjj5Ah Ekig96LdV5Leek68W1Y5oTJLAo1XFKc5cKMSx6TxEUFnU5oXDdpupAT+3VG2vEnyHlkR IZZGKgaiMvGPypiZdu9589ZLBH+7dhdlgkwvqij3ANUi3IMIbZdhBWMrlRwDMdgmWXTB QEeUOneR79hX/Bh41DpwLpsAqxT1I+oQizrp6XIVnO/XC8VC27TZzUdMHNSslNpEjo4Q u8+SWILg297umWllgPQEMb0iHexWOkQjBt+5keb9uMEW94AXGFtbz+RK9AnjznCDhcmH T93w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=sFpQSR9E; 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 d25si16855022eje.106.2021.05.25.20.12.53; Tue, 25 May 2021 20:12:53 -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=sFpQSR9E; 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 81975680C6C; Wed, 26 May 2021 06:12:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AC60B680515 for ; Wed, 26 May 2021 06:12:42 +0300 (EEST) Received: by mail-pg1-f174.google.com with SMTP id e22so8644931pgv.10 for ; Tue, 25 May 2021 20:12:42 -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=X3U6aCNXD1xOrYbchTwzTsqrrakYyI3pf6cIxdgdM2c=; b=sFpQSR9EoSuCbsnD2jmQki5wGrkP/9q4g17vzVi2iiGAB8HzZ6ZAZ9FQcwUYa5y200 FEuwxh1EsLS3RbrT1gGv27lgfddnam54W7oRyDDpMi8qpZQHssp/LPy0F8sjM1Hll/9B S5UdJFvAFfZK8TZydByfpHEHRsBJGeqx9f+9xyrhXqxFIAVICXXA26QpkTV7TdoYxrsV IFMbboLXuLdkYJu1NvrwfDsGrnQwmXaEUryHfXJPx0BCsm6TLybHDl5wzFOsGEl8RQwO 8bgVsDSCJbOcBx5PRJavzbbUGt5dTPtVkNF7UvCkeK5XxA9Vd8H3k3qxKc7RQD+96foa ++qA== 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=X3U6aCNXD1xOrYbchTwzTsqrrakYyI3pf6cIxdgdM2c=; b=jmiLHLFVMShMhwezRl7uuU2gffJHpgmPDYmXwElzZ5tD4rSxDDBfQr2UH/7qCn5YaH kdZQ9uJpsV0KtEYy2GCi2qHKNqIBLWZfI1fi4S390UTtD95G4IozKGIq/4HFJ2UFyp/H NK8cTlaoCcyQnRKxerDQVaoqzCAIr0KZFqYkt2F+R/HHawJH7FYjr4fd8/mf901tFnYl cttQY9CuRCI9IuuD0dpMO9Y3rH++N9UQ6VkF1BNL6HSMDzv3tUinnIJs1AAxkEy9J1aB F9PQ0cwyrkKxCgxwtkiJqH2p8HdrkJqwZKed+td9rmyDguWLXp6lBKkDxBCbRWsb7q6v rkFg== X-Gm-Message-State: AOAM530ORZvftCx8c0bEyD4gQGOxAZp7PJHEmMr3anCHMEClC4uCB1az Q1ksvpTCnbIecmZ4nrv/m7gsJVTkYjQwPQ== X-Received: by 2002:a63:58f:: with SMTP id 137mr22224321pgf.241.1621995390633; Tue, 25 May 2021 19:16:30 -0700 (PDT) Received: from homestead.aragog.com ([2605:a601:a9ae:9100:b62e:99ff:fe37:7032]) by smtp.gmail.com with ESMTPSA id s6sm2966878pjr.29.2021.05.25.19.16.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 May 2021 19:16:30 -0700 (PDT) From: Pavel Koshevoy To: ffmpeg-devel@ffmpeg.org Date: Tue, 25 May 2021 20:16:29 -0600 Message-Id: <20210526021629.22133-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 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: hRQW35fhkUmh 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. --- libavcodec/ccaption_dec.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c index de05d037a8..e66ebc1184 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 = 201 }, 0, 500, SD, "data_field" }, { "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" },