[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