Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Koshevoy <pkoshevoy@gmail.com>2021-06-19 04:20:03 +0300
committerPavel Koshevoy <pkoshevoy@gmail.com>2021-06-19 04:20:03 +0300
commitb51c2c48c1fbb4f1ae6f07a1b9c5561a99d39063 (patch)
tree7a03daee010b465475c118f524e04ca59232c107 /libavcodec/ccaption_dec.c
parent73b29807c7ca7470c0c79f9d275e2808b088d4fb (diff)
avcodec/ccaption_dec: Make real-time latency configurable
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.
Diffstat (limited to 'libavcodec/ccaption_dec.c')
-rw-r--r--libavcodec/ccaption_dec.c4
1 files changed, 3 insertions, 1 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" },