[FFmpeg-devel] [PATCH 1/4] avfilter/vf_drawtext: add option to draw timecode in S12M side data
Nicolas George
george at nsup.org
Fri Jun 19 17:45:34 EEST 2020
lance.lmwang at gmail.com (12020-06-19):
> From: Limin Wang <lance.lmwang at gmail.com>
>
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
> doc/filters.texi | 4 ++++
> libavfilter/vf_drawtext.c | 19 +++++++++++++++++++
> 2 files changed, 23 insertions(+)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 5f0eb28..8334f46 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -9825,6 +9825,10 @@ If both @var{text} and @var{textfile} are specified, an error is thrown.
> If set to 1, the @var{textfile} will be reloaded before each frame.
> Be sure to update it atomically, or it may be read partially, or even fail.
>
> + at item frame_tc
> +If set to 1, the timecode in S12M side data will be used for each frame
> +if have, 0 otherwise
I think it should be part of the text expansion mechanism, not a
separate option.
> +
> @item x
> @item y
> The expressions which specify the offsets where text will be drawn
> diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
> index abe1ca6..018997a 100644
> --- a/libavfilter/vf_drawtext.c
> +++ b/libavfilter/vf_drawtext.c
> @@ -197,6 +197,7 @@ typedef struct DrawTextContext {
> AVRational tc_rate; ///< frame rate for timecode
> AVTimecode tc; ///< timecode context
> int tc24hmax; ///< 1 if timecode is wrapped to 24 hours, 0 otherwise
> + int frame_tc; ///< 1 use timecode in S12M side data for each frame, 0 otherwise
> int reload; ///< reload text file for each frame
> int start_number; ///< starting frame number for n/frame_num var
> #if CONFIG_LIBFRIBIDI
> @@ -268,6 +269,7 @@ static const AVOption drawtext_options[]= {
> { "monochrome", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_MONOCHROME }, .flags = FLAGS, .unit = "ft_load_flags" },
> { "linear_design", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_LINEAR_DESIGN }, .flags = FLAGS, .unit = "ft_load_flags" },
> { "no_autohint", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_NO_AUTOHINT }, .flags = FLAGS, .unit = "ft_load_flags" },
> + {"frame_tc", "use timecode in S21M side data for each frame if have", OFFSET(frame_tc), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
> { NULL }
> };
>
> @@ -1327,6 +1329,23 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame,
> break;
> }
>
> + if (s->frame_tc) {
> + AVFrameSideData *sd;
> +
> + if (sd = av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE)) {
> + uint32_t *tc = (uint32_t*)sd->data;
> + int m = tc[0] & 3;
> +
> + av_bprint_clear(bp);
> + av_bprintf(bp, "%s", s->text);
> + for (int j = 1; j <= m; j++) {
> + char tcbuf[AV_TIMECODE_STR_SIZE];
> + av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
> + av_bprintf(bp, "%s%s", tcbuf, j != m ? ", " : "");
> + }
> + }
> + }
> +
> if (s->tc_opt_string) {
> char tcbuf[AV_TIMECODE_STR_SIZE];
> av_timecode_make_string(&s->tc, tcbuf, inlink->frame_count_out);
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200619/52b731c8/attachment.sig>
More information about the ffmpeg-devel
mailing list