From a1d8f859ce038a16c47d0f9dceff137d2217883f Mon Sep 17 00:00:00 2001
From: Martin Vignali <martin.vignali@gmail.com>
Date: Sat, 3 Mar 2018 18:38:15 +0100
Subject: [PATCH 5/5] avformat/movenc : add support for writing alpha metadata
 (ALFA Udta)

---
 libavformat/movenc.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 5b1e66c897..b9f1080885 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -3563,6 +3563,35 @@ static int mov_write_raw_metadata_tag(AVFormatContext *s, AVIOContext *pb,
     return 0;
 }
 
+/*! Adobe alpha metadata */
+static int mov_write_alpha_metadata_tag(AVFormatContext *s, AVIOContext *pb)
+{
+    int size;
+    AVDictionaryEntry *t;
+
+    if (!(t = av_dict_get(s->metadata, "alpha", NULL, 0)))
+        return 0;
+
+    if (strcmp(t->value, "straight") == 0) {
+        size = 10 + 8;
+        avio_wb32(pb, size);
+        ffio_wfourcc(pb, "ALFA");
+        avio_wb16(pb, 1);
+        avio_wb64(pb, 0);
+        return size;
+    } else if (strcmp(t->value, "premult") == 0) {
+        size = 10 + 8;
+        avio_wb32(pb, size);
+        ffio_wfourcc(pb, "ALFA");
+        avio_wb16(pb, 1);
+        avio_wb64(pb, 4294967297);
+        return size;
+    } else {
+        av_log(s, AV_LOG_ERROR, "Unsupported alpha metadata value for ALFA Udta : %s\n", t->value);
+        return 0;
+    }
+}
+
 static int ascii_to_wc(AVIOContext *pb, const uint8_t *b)
 {
     int val;
@@ -3668,6 +3697,7 @@ static int mov_write_udta_tag(AVIOContext *pb, MOVMuxContext *mov,
         mov_write_string_metadata(s, pb_buf, "\251xyz", "location",    0);
         mov_write_string_metadata(s, pb_buf, "\251key", "keywords",    0);
         mov_write_raw_metadata_tag(s, pb_buf, "XMP_", "xmp");
+        mov_write_alpha_metadata_tag(s, pb_buf);
     } else {
         /* iTunes meta data */
         mov_write_meta_tag(pb_buf, mov, s);
-- 
2.14.3 (Apple Git-98)

