[FFmpeg-devel] [PATCH v2] avcodec/ccaption_dec: Make real-time latency configurable
Pavel Koshevoy
pkoshevoy at gmail.com
Fri Jun 18 04:07:39 EEST 2021
On Sun, Jun 13, 2021 at 3:49 PM Pavel Koshevoy <pkoshevoy at gmail.com> wrote:
>
>
> On Sat, Jun 5, 2021 at 11:40 AM Pavel Koshevoy <pkoshevoy at gmail.com>
> wrote:
>
>> 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,
>> \
>> --
>> 2.26.2
>>
>>
>
> Ping. If there are no objections may this be applied?
>
> Thank you,
> Pavel.
>
If there are no objections I will apply and push this in 24h
Thank you,
Pavel.
More information about the ffmpeg-devel
mailing list