aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Vignali <martin.vignali@gmail.com>2017-09-23 21:50:54 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-09-24 21:54:13 +0200
commitcab71e4e4e51c8cee4fdd90af35498796797615c (patch)
treeb3c290a368825e3f71c95bf448c554ac2886cae0
parent45c15b7490cfb1106ce3153e77f04988b74a9ca1 (diff)
downloadffmpeg-cab71e4e4e51c8cee4fdd90af35498796797615c.tar.gz
libavcodec/hapdec : add support HapAlphaOnly
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/hap.h1
-rw-r--r--libavcodec/hapdec.c14
2 files changed, 13 insertions, 2 deletions
diff --git a/libavcodec/hap.h b/libavcodec/hap.h
index f39e621805..0ee65335d9 100644
--- a/libavcodec/hap.h
+++ b/libavcodec/hap.h
@@ -34,6 +34,7 @@ enum HapTextureFormat {
HAP_FMT_RGBDXT1 = 0x0B,
HAP_FMT_RGBADXT5 = 0x0E,
HAP_FMT_YCOCGDXT5 = 0x0F,
+ HAP_FMT_RGTC1 = 0x01,
};
enum HapCompressor {
diff --git a/libavcodec/hapdec.c b/libavcodec/hapdec.c
index a1cb0c76aa..fc9dff10f1 100644
--- a/libavcodec/hapdec.c
+++ b/libavcodec/hapdec.c
@@ -24,7 +24,7 @@
* @file
* Hap decoder
*
- * Fourcc: Hap1, Hap5, HapY
+ * Fourcc: Hap1, Hap5, HapY, HapA, HapM
*
* https://github.com/Vidvox/hap/blob/master/documentation/HapVideoDRAFT.md
*/
@@ -163,7 +163,8 @@ static int hap_parse_frame_header(AVCodecContext *avctx)
if ((avctx->codec_tag == MKTAG('H','a','p','1') && (section_type & 0x0F) != HAP_FMT_RGBDXT1) ||
(avctx->codec_tag == MKTAG('H','a','p','5') && (section_type & 0x0F) != HAP_FMT_RGBADXT5) ||
- (avctx->codec_tag == MKTAG('H','a','p','Y') && (section_type & 0x0F) != HAP_FMT_YCOCGDXT5)) {
+ (avctx->codec_tag == MKTAG('H','a','p','Y') && (section_type & 0x0F) != HAP_FMT_YCOCGDXT5) ||
+ (avctx->codec_tag == MKTAG('H','a','p','A') && (section_type & 0x0F) != HAP_FMT_RGTC1)) {
av_log(avctx, AV_LOG_ERROR,
"Invalid texture format %#04x.\n", section_type & 0x0F);
return AVERROR_INVALIDDATA;
@@ -403,6 +404,15 @@ static av_cold int hap_init(AVCodecContext *avctx)
ctx->tex_fun = ctx->dxtc.dxt5ys_block;
avctx->pix_fmt = AV_PIX_FMT_RGB0;
break;
+ case MKTAG('H','a','p','A'):
+ texture_name = "RGTC1";
+ ctx->tex_rat = 8;
+ ctx->tex_fun = ctx->dxtc.rgtc1u_block;
+ avctx->pix_fmt = AV_PIX_FMT_RGB0;
+ break;
+ case MKTAG('H','a','p','M'):
+ avpriv_report_missing_feature(avctx, "HapQAlpha");
+ return AVERROR_PATCHWELCOME;
default:
return AVERROR_DECODER_NOT_FOUND;
}