From patchwork Sat Jun 5 17:40:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Koshevoy X-Patchwork-Id: 28100 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp2141209iof; Sat, 5 Jun 2021 11:11:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmlOiiRXlEpy6iwDagsFQP/x5RlTQElQfYS+UjiVP0kiBJ+ys6jfyYalgflx2eTRQQN/qE X-Received: by 2002:a17:906:3395:: with SMTP id v21mr9950034eja.102.1622916686905; Sat, 05 Jun 2021 11:11:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622916686; cv=none; d=google.com; s=arc-20160816; b=rwx+H8CJ7OL2wVR25snpLOGimqLGNPQ2hsNEkDoj7spULqRrdIw+4CCSixt4h5WTZo 3qi4DCTLdCi+Mmw6hmkyZ9rJ2S45oruMwTLJ89577v9QAGLVgnwkAxkBGii/YdQms9KZ aBC3qhsoMkIftcUAeRHHVyUjFNG1q8z7bHGyhTt7e9MO2Ahva594Rj+EazsBXDo9qzGj ZhWrmsTXBoO3jMMMLBYe84zV/ekUFeadJJLvCVgPNWvUkIlkcrnDYlp+7/piASXDRawL aup0pVByyUkHHd5cYLnIRnJg27JzL1Sv6E6dmpL+2o9DbBVVyNZ6O00/V72aKM6j93Q/ Bmlg== 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=slUkvwXWQ+L/1OPXNd9S6ojPAzJuW0YNtPmt+LdH4xRgv/c7touk7OUTeKvuxEe5GD 6L1Rrwzb5hzhC2p9xU+MdOyY/B303/pjK2T4bnsQ5c5lqRQISi89gIM2WlUxxigvCpgI bdhmMbz4MOzPuh22kKXCDxnq+01yusHmPGmbu3NtH4rEofk8cl65PAk1eKjEzXwM55Xg itgWbB54bTPbOHHpmuHhata2IJ9dnmaokLKF+hSYsdsYcU8lCkh+jWTyRng3synDRNVF 4f7Hl4ofRdZDS3BqkGWIJTsxVIcpaEdfmE6ITv35f0qixphOsILmk1DmctOLOGLYwCxz J4Sw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=F1X2BrOL; 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 l10si500553edq.534.2021.06.05.11.11.26; Sat, 05 Jun 2021 11:11:26 -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=F1X2BrOL; 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 5D63A68A5FC; Sat, 5 Jun 2021 21:11:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA1C268A214 for ; Sat, 5 Jun 2021 21:11:16 +0300 (EEST) Received: by mail-pg1-f180.google.com with SMTP id o9so7657378pgd.2 for ; Sat, 05 Jun 2021 11:11:16 -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=F1X2BrOLRC4og5KdhsUV89hJ5QkltSQrDTwt0VpS/R4lBcvpC+PARo7eO2hox0w3Ow bA1veiar6hh/t0iIWfqS6h4plRA12mJGQvKAWK7Tz7hfPLl6OVDK5NGBgQHmth3c8EFQ Bq6I8svFr9yo9c3UZC/tW6k25xNAWtrOnLXB8kKD4yCIpVGfsM0j9iLKox4BDCRohC/u hp06YqdSOSRP2fSYn5ZwJrE6KRDyBfFjwjiPf/+QKwa+lcWdvhvwMLNpQbFpSO49AEiF BWUYWKk7ybNkJ1Pcq9WK+yTsAnuDy8vsX//i6XTKeLN1m5kiAtEjdzMquxvGKNlq8LMS 0Jcg== 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=dU6Ku/qwwhCneO58vN3nE+4ceckn4qkvL4tT0dKWM3+hLB7u8hkw/0urJsTCh3tP2D 2XRPAart0nqrtsrwO425Gc25tbKmt924Ltj0nRN9W6NPySY5QyfYoDgKC65uZawrELk2 v+oGCIv/wKH45HdTaJop9uNwOqf43EvwG/REY8ZNKXfUB0cw3HaIOIhEJOwfyRAdIMho L0coAcCKAVVFtN74e8+4JMPaEHn2JNTqR7yDJ0HCfB2Fg8BZQFNwQLVfEO0YxrOpar7B Pws1OPcE26TSJholQ3ePDsA6BiAlbpktV9IGb5xHT6ExzORQa0X2+pxqonXWnRQh0oNe UNyA== X-Gm-Message-State: AOAM530xT+rvv2KaRyq3V+ban10mAXmy+K30MuBYi6J7Z4GRdAEe1Rs7 /PWC7w5F45MGyVu361Fz7Buuu/COioXsNg== X-Received: by 2002:a05:6a00:d66:b029:2e9:c899:d618 with SMTP id n38-20020a056a000d66b02902e9c899d618mr10118235pfv.6.1622914853308; Sat, 05 Jun 2021 10:40:53 -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.52 (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:51 -0600 Message-Id: <20210605174052.25844-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: tRuDE0s39rLG 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, \