[FFmpeg-devel] [PATCH 20/23] lavc/movtextenc: handle cancel overrides callback

Philip Langdale philipl at overt.org
Wed Apr 8 21:40:11 EEST 2020


On Tue, 7 Apr 2020 09:00:34 -0600
John Stebbins <jstebbins at jetheaddev.com> wrote:

> ---
>  libavcodec/movtextenc.c | 43
> ++++++++++++++++++++++++++++++++--------- 1 file changed, 34
> insertions(+), 9 deletions(-)
> 
> diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c
> index 9e657c9635..2d3c416407 100644
> --- a/libavcodec/movtextenc.c
> +++ b/libavcodec/movtextenc.c
> @@ -69,6 +69,7 @@ typedef struct {
>      AVCodecContext *avctx;
>  
>      ASSSplitContext *ass_ctx;
> +    ASSStyle *ass_dialog_style;
>      AVBPrint buffer;
>      StyleBox **style_attributes;
>      StyleBox *style_attributes_temp;
> @@ -396,9 +397,8 @@ static void mov_text_end_cb(void *priv)
>      mov_text_style_start((MovTextContext*)priv);
>  }
>  
> -static void mov_text_dialog(MovTextContext *s, ASSDialog *dialog)
> +static void mov_text_ass_style_set(MovTextContext *s, ASSStyle
> *style) {
> -    ASSStyle * style = ff_ass_style_get(s->ass_ctx, dialog->style);
>      uint8_t    style_flags, alpha;
>      uint32_t   color;
>  
> @@ -412,9 +412,33 @@ static void mov_text_dialog(MovTextContext *s,
> ASSDialog *dialog) alpha = 255 - ((uint32_t)style->primary_color >>
> 24); mov_text_alpha_set(s, alpha);
>          mov_text_font_size_set(s, style->font_size);
> +    } else {
> +        // End current style record, go back to defaults
> +        mov_text_style_start(s);
>      }
>  }
>  
> +static void mov_text_dialog(MovTextContext *s, ASSDialog *dialog)
> +{
> +    ASSStyle * style = ff_ass_style_get(s->ass_ctx, dialog->style);
> +
> +    s->ass_dialog_style = style;
> +    mov_text_ass_style_set(s, style);
> +}
> +
> +static void mov_text_cancel_overrides_cb(void *priv, const char *
> style_name) +{
> +    MovTextContext *s = priv;
> +    ASSStyle * style;
> +
> +    if (!style_name || !*style_name)
> +        style = s->ass_dialog_style;
> +    else
> +        style= ff_ass_style_get(s->ass_ctx, style_name);
> +
> +    mov_text_ass_style_set(s, style);
> +}
> +
>  static uint16_t utf8_strlen(const char *text, int len)
>  {
>      uint16_t i = 0, ret = 0;
> @@ -454,13 +478,14 @@ static void mov_text_new_line_cb(void *priv,
> int forced) }
>  
>  static const ASSCodesCallbacks mov_text_callbacks = {
> -    .text      = mov_text_text_cb,
> -    .new_line  = mov_text_new_line_cb,
> -    .style     = mov_text_style_cb,
> -    .color     = mov_text_color_cb,
> -    .alpha     = mov_text_alpha_cb,
> -    .font_size = mov_text_font_size_cb,
> -    .end       = mov_text_end_cb,
> +    .text             = mov_text_text_cb,
> +    .new_line         = mov_text_new_line_cb,
> +    .style            = mov_text_style_cb,
> +    .color            = mov_text_color_cb,
> +    .alpha            = mov_text_alpha_cb,
> +    .font_size        = mov_text_font_size_cb,
> +    .cancel_overrides = mov_text_cancel_overrides_cb,
> +    .end              = mov_text_end_cb,
>  };
>  
>  static int mov_text_encode_frame(AVCodecContext *avctx, unsigned
> char *buf,

LGTM


--phil


More information about the ffmpeg-devel mailing list