From 1630a6f8e3d29d1d7ba0b38b3998d92377062834 Mon Sep 17 00:00:00 2001
From: Martin Vignali <martin.vignali@gmail.com>
Date: Sat, 23 Sep 2017 23:31:39 +0200
Subject: [PATCH 5/5] libavcodec/hapenc : add support for hap alpha only
 encoding

---
 doc/encoders.texi   | 1 +
 libavcodec/hapenc.c | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/doc/encoders.texi b/doc/encoders.texi
index fb93ae0094..ab1fef4efa 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -1326,6 +1326,7 @@ Specifies the Hap format to encode.
 @item hap
 @item hap_alpha
 @item hap_q
+@item hap_alpha_only
 @end table
 
 Default value is @option{hap}.
diff --git a/libavcodec/hapenc.c b/libavcodec/hapenc.c
index 3a1bc870b1..15a4c77189 100644
--- a/libavcodec/hapenc.c
+++ b/libavcodec/hapenc.c
@@ -273,6 +273,12 @@ static av_cold int hap_init(AVCodecContext *avctx)
         avctx->bits_per_coded_sample = 24;
         ctx->tex_fun = ctx->dxtc.dxt5ys_block;
         break;
+    case HAP_FMT_RGTC1:
+        ratio = 8;
+        avctx->codec_tag = MKTAG('H', 'a', 'p', 'A');
+        avctx->bits_per_coded_sample = 24;
+        ctx->tex_fun = ctx->dxtc.rgtc1u_block;
+        break;
     default:
         av_log(avctx, AV_LOG_ERROR, "Invalid format %02X\n", ctx->opt_tex_fmt);
         return AVERROR_INVALIDDATA;
@@ -331,10 +337,11 @@ static av_cold int hap_close(AVCodecContext *avctx)
 #define OFFSET(x) offsetof(HapContext, x)
 #define FLAGS     AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 static const AVOption options[] = {
-    { "format", NULL, OFFSET(opt_tex_fmt), AV_OPT_TYPE_INT, { .i64 = HAP_FMT_RGBDXT1 }, HAP_FMT_RGBDXT1, HAP_FMT_YCOCGDXT5, FLAGS, "format" },
+    { "format", NULL, OFFSET(opt_tex_fmt), AV_OPT_TYPE_INT, { .i64 = HAP_FMT_RGBDXT1 }, HAP_FMT_RGTC1, HAP_FMT_YCOCGDXT5, FLAGS, "format" },
         { "hap",       "Hap 1 (DXT1 textures)", 0, AV_OPT_TYPE_CONST, { .i64 = HAP_FMT_RGBDXT1   }, 0, 0, FLAGS, "format" },
         { "hap_alpha", "Hap Alpha (DXT5 textures)", 0, AV_OPT_TYPE_CONST, { .i64 = HAP_FMT_RGBADXT5  }, 0, 0, FLAGS, "format" },
         { "hap_q",     "Hap Q (DXT5-YCoCg textures)", 0, AV_OPT_TYPE_CONST, { .i64 = HAP_FMT_YCOCGDXT5 }, 0, 0, FLAGS, "format" },
+        { "hap_alpha_only",     "Hap Alpha Only (RGTC1 textures)", 0, AV_OPT_TYPE_CONST, { .i64 = HAP_FMT_RGTC1 }, 0, 0, FLAGS, "format" },
     { "chunks", "chunk count", OFFSET(opt_chunk_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, HAP_MAX_CHUNKS, FLAGS, },
     { "compressor", "second-stage compressor", OFFSET(opt_compressor), AV_OPT_TYPE_INT, { .i64 = HAP_COMP_SNAPPY }, HAP_COMP_NONE, HAP_COMP_SNAPPY, FLAGS, "compressor" },
         { "none",       "None", 0, AV_OPT_TYPE_CONST, { .i64 = HAP_COMP_NONE }, 0, 0, FLAGS, "compressor" },
-- 
2.11.0 (Apple Git-81)

