[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