[FFmpeg-cvslog] lavc/movtextenc: add alpha tag handling

John Stebbins git at videolan.org
Fri Apr 10 19:33:26 EEST 2020


ffmpeg | branch: master | John Stebbins <jstebbins at jetheaddev.com> | Sat Apr  4 16:34:16 2020 -0600| [2e79843e3750582239f9aa26b1dbe1429a18dc71] | committer: Philip Langdale

lavc/movtextenc: add alpha tag handling

Signed-off-by: Philip Langdale <philipl at overt.org>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2e79843e3750582239f9aa26b1dbe1429a18dc71
---

 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);
+}
+
 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,
 };
 



More information about the ffmpeg-cvslog mailing list