[FFmpeg-devel] [PATCH 04/11] drawtext: use new public timecode API.
Stefano Sabatini
stefasab at gmail.com
Thu Jan 19 01:18:48 CET 2012
On date Monday 2012-01-16 17:30:07 +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 2afc1d3..61a27c5 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..a0ca742 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 *timecode_opt_string; ///< specified timecode option string
nit: tc_opt_string for consistency
> + AVRational rate; ///< frame rate for timecode
nit: tc_rate
> + AVTimecode tc; ///< timecode context
or alternatively use always timecode_
> 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(timecode_opt_string),AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX },
> +{"r", "set rate (timecode only)", OFFSET(rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX },
> +{"rate", "set rate (timecode only)", OFFSET(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->timecode_opt_string) {
> + int ret = av_init_timecode_from_string(ctx, &dtext->tc, dtext->rate,
> + dtext->timecode_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->timecode_opt_string) {
> + char tcbuf[AVTIMECODE_STR_LEN];
> + av_framenum_to_timecode_string(tcbuf, &dtext->tc, dtext->frame_id++);
> buf = av_asprintf("%s%s", dtext->text, tcbuf);
> }
> -#endif
Looks good otherwise.
--
FFmpeg = Formidable and Freak Mind-dumbing Puritan Eccentric Gadget
More information about the ffmpeg-devel
mailing list