[FFmpeg-devel] [PATCH 05/12] drawtext: use new public timecode API.

Stefano Sabatini stefasab at gmail.com
Tue Jan 24 13:49:18 CET 2012


On date Monday 2012-01-23 17:04:24 +0100, Clément Bœsch encoded:
> From: Clément Bœsch <clement.boesch at smartjog.com>
> 
> ---
>  doc/filters.texi          |    2 --
>  libavfilter/vf_drawtext.c |   34 +++++++++++++++-------------------
>  2 files changed, 15 insertions(+), 21 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 3c9f554..7120385 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -1257,8 +1257,6 @@ timestamp expressed in seconds, NAN if the input timestamp is unknown
>  @item timecode
>  initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used
>  with or without text parameter. @var{rate} option must be specified.
> -Note that timecode options are @emph{not} effective if FFmpeg is build with
> - at code{--disable-avcodec}.
>  
>  @item r, rate
>  frame rate (timecode only)
> diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
> index d0d854b..5b2eb10 100644
> --- a/libavfilter/vf_drawtext.c
> +++ b/libavfilter/vf_drawtext.c
> @@ -30,7 +30,6 @@
>  #include <time.h>
>  
>  #include "config.h"
> -#include "libavcodec/timecode.h"
>  #include "libavutil/avstring.h"
>  #include "libavutil/colorspace.h"
>  #include "libavutil/file.h"
> @@ -39,6 +38,7 @@
>  #include "libavutil/random_seed.h"
>  #include "libavutil/parseutils.h"
>  #include "libavutil/pixdesc.h"
> +#include "libavutil/timecode.h"
>  #include "libavutil/tree.h"
>  #include "libavutil/lfg.h"
>  #include "avfilter.h"
> @@ -157,7 +157,9 @@ typedef struct {
>      AVExpr *d_pexpr;
>      int draw;                       ///< set to zero to prevent drawing
>      AVLFG  prng;                    ///< random
> -    struct ff_timecode tc;
> +    char       *tc_opt_string;      ///< specified timecode option string
> +    AVRational  tc_rate;            ///< frame rate for timecode
> +    AVTimecode  tc;                 ///< timecode context
>      int frame_id;
>  } DrawTextContext;
>  
> @@ -179,9 +181,9 @@ static const AVOption drawtext_options[]= {
>  {"tabsize",  "set tab size",         OFFSET(tabsize),            AV_OPT_TYPE_INT,    {.dbl=4},     0,        INT_MAX  },
>  {"basetime", "set base time",        OFFSET(basetime),           AV_OPT_TYPE_INT64,  {.dbl=AV_NOPTS_VALUE},     INT64_MIN,        INT64_MAX  },
>  {"draw",     "if false do not draw", OFFSET(d_expr),             AV_OPT_TYPE_STRING, {.str="1"},   CHAR_MIN, CHAR_MAX },
> -{"timecode", "set initial timecode", OFFSET(tc.str),             AV_OPT_TYPE_STRING, {.str=NULL},  CHAR_MIN, CHAR_MAX },
> -{"r",        "set rate (timecode only)", OFFSET(tc.rate),        AV_OPT_TYPE_RATIONAL, {.dbl=0},          0,  INT_MAX },
> -{"rate",     "set rate (timecode only)", OFFSET(tc.rate),        AV_OPT_TYPE_RATIONAL, {.dbl=0},          0,  INT_MAX },
> +{"timecode", "set initial timecode", OFFSET(tc_opt_string),      AV_OPT_TYPE_STRING, {.str=NULL},  CHAR_MIN, CHAR_MAX },
> +{"r",        "set rate (timecode only)", OFFSET(tc_rate),        AV_OPT_TYPE_RATIONAL, {.dbl=0},          0,  INT_MAX },
> +{"rate",     "set rate (timecode only)", OFFSET(tc_rate),        AV_OPT_TYPE_RATIONAL, {.dbl=0},          0,  INT_MAX },
>  
>  /* FT_LOAD_* flags */
>  {"ft_load_flags", "set font loading flags for libfreetype",   OFFSET(ft_load_flags),  AV_OPT_TYPE_FLAGS,  {.dbl=FT_LOAD_DEFAULT|FT_LOAD_RENDER}, 0, INT_MAX, 0, "ft_load_flags" },
> @@ -341,17 +343,13 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
>          av_file_unmap(textbuf, textbuf_size);
>      }
>  
> -    if (dtext->tc.str) {
> -#if CONFIG_AVCODEC
> -        if (avpriv_init_smpte_timecode(ctx, &dtext->tc) < 0)
> -            return AVERROR(EINVAL);
> +    if (dtext->tc_opt_string) {
> +        int ret = av_timecode_init_from_string(ctx, &dtext->tc, dtext->tc_rate,
> +                                               dtext->tc_opt_string);
> +        if (ret < 0)
> +            return ret;
>          if (!dtext->text)
>              dtext->text = av_strdup("");
> -#else
> -        av_log(ctx, AV_LOG_ERROR,
> -               "Timecode options are only available if libavfilter is built with libavcodec enabled.\n");
> -        return AVERROR(EINVAL);
> -#endif
>      }
>  
>      if (!dtext->text) {
> @@ -729,13 +727,11 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref,
>          buf_size *= 2;
>      } while ((buf = av_realloc(buf, buf_size)));
>  
> -#if CONFIG_AVCODEC
> -    if (dtext->tc.str) {
> -        char tcbuf[16];
> -        avpriv_timecode_to_string(tcbuf, &dtext->tc, dtext->frame_id++);
> +    if (dtext->tc_opt_string) {
> +        char tcbuf[AV_TIMECODE_STR_SIZE];
> +        av_timecode_get_string(tcbuf, &dtext->tc, dtext->frame_id++);
>          buf = av_asprintf("%s%s", dtext->text, tcbuf);
>      }
> -#endif

Should be Oll Korrect once we agree on names.
-- 
FFmpeg = Friendly Fiendish Minimalistic Picky Enchanting Genius


More information about the ffmpeg-devel mailing list