[FFmpeg-devel] [PATCH 18/23] lavc/movtextenc: add alpha tag handling

Philip Langdale philipl at overt.org
Wed Apr 8 21:37:31 EEST 2020


On Mon, 6 Apr 2020 11:52:13 -0600
John Stebbins <jstebbins at jetheaddev.com> wrote:

> ---
>  libavcodec/movtextenc.c | 25 ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c
> index 090536b887..e82393dde7 100644
> --- a/libavcodec/movtextenc.c
> +++ b/libavcodec/movtextenc.c
> @@ -351,6 +351,26 @@ static void mov_text_color_cb(void *priv,
> unsigned int color, unsigned int color */
>  }
>  
> +static void mov_text_alpha_set(MovTextContext *s, uint8_t alpha)
> +{
> +    if (!s->style_attributes_temp ||
> +        (s->style_attributes_temp->style_color & 0xff) == alpha) {
> +        // color hasn't changed
> +        return;
> +    }
> +    if (mov_text_style_start(s))
> +        s->style_attributes_temp->style_color =
> +                (s->style_attributes_temp->style_color & 0xffffff00)
> | alpha; +}
> +
> +static void mov_text_alpha_cb(void *priv, int alpha, int alpha_id)
> +{
> +    MovTextContext *s = priv;
> +
> +    if (alpha_id == 1) // primary alpha changes
> +        mov_text_alpha_set(s, 255 - alpha);
> +}

Worth a comment that secondary alpha can't be preserved?

> +
>  static void mov_text_end_cb(void *priv)
>  {
>      // End of text, close any open style record
> @@ -360,7 +380,7 @@ static void mov_text_end_cb(void *priv)
>  static void mov_text_dialog(MovTextContext *s, ASSDialog *dialog)
>  {
>      ASSStyle * style = ff_ass_style_get(s->ass_ctx, dialog->style);
> -    uint8_t    style_flags;
> +    uint8_t    style_flags, alpha;
>      uint32_t   color;
>  
>      if (style) {
> @@ -370,6 +390,8 @@ static void mov_text_dialog(MovTextContext *s,
> ASSDialog *dialog) mov_text_style_set(s, style_flags);
>          color = BGR_TO_RGB(style->primary_color & 0xffffff) << 8;
>          mov_text_color_set(s, color);
> +        alpha = 255 - ((uint32_t)style->primary_color >> 24);
> +        mov_text_alpha_set(s, alpha);
>      }
>  }
>  
> @@ -416,6 +438,7 @@ static const ASSCodesCallbacks mov_text_callbacks
> = { .new_line = mov_text_new_line_cb,
>      .style    = mov_text_style_cb,
>      .color    = mov_text_color_cb,
> +    .alpha    = mov_text_alpha_cb,
>      .end      = mov_text_end_cb,
>  };
>  

Otherwise LGTM.



--phil


More information about the ffmpeg-devel mailing list