diff options
author | Martin Vignali <martin.vignali@gmail.com> | 2017-11-25 19:46:48 +0100 |
---|---|---|
committer | Martin Vignali <martin.vignali@gmail.com> | 2017-11-25 19:49:30 +0100 |
commit | 21c06c4095f53b2c343e1225ae52d83160e213f1 (patch) | |
tree | 5ced7f4228f9d444a4f656d3bae0859c53d4b4bf | |
parent | 07e427aa56550bed2e2b7b401b4f4b3800e74217 (diff) | |
download | ffmpeg-21c06c4095f53b2c343e1225ae52d83160e213f1.tar.gz |
avcodec/hapdec : use gray8 for HapAlphaOnly decoding instead of RGB0
-rw-r--r-- | libavcodec/hap.h | 1 | ||||
-rw-r--r-- | libavcodec/hapdec.c | 10 |
2 files changed, 7 insertions, 4 deletions
diff --git a/libavcodec/hap.h b/libavcodec/hap.h index 4dfbb8cb16..74455f3dd9 100644 --- a/libavcodec/hap.h +++ b/libavcodec/hap.h @@ -84,6 +84,7 @@ typedef struct HapContext { int texture_count; /* 2 for HAQA, 1 for other version */ int texture_section_size; /* size of the part of the texture section (for HAPQA) */ + int uncompress_pix_size; /* nb of byte / pixel for the target picture */ /* Pointer to the selected compress or decompress function */ int (*tex_fun)(uint8_t *dst, ptrdiff_t stride, const uint8_t *block); diff --git a/libavcodec/hapdec.c b/libavcodec/hapdec.c index a1abb3285f..8fd4aa962c 100644 --- a/libavcodec/hapdec.c +++ b/libavcodec/hapdec.c @@ -300,10 +300,10 @@ static int decompress_texture_thread_internal(AVCodecContext *avctx, void *arg, int off = y * w_block; for (x = 0; x < w_block; x++) { if (texture_num == 0) { - ctx->tex_fun(p + x * 16, frame->linesize[0], + ctx->tex_fun(p + x * 4 * ctx->uncompress_pix_size, frame->linesize[0], d + (off + x) * ctx->tex_rat); } else { - ctx->tex_fun2(p + x * 16, frame->linesize[0], + ctx->tex_fun2(p + x * 4 * ctx->uncompress_pix_size, frame->linesize[0], d + (off + x) * ctx->tex_rat2); } } @@ -438,6 +438,7 @@ static av_cold int hap_init(AVCodecContext *avctx) ff_texturedsp_init(&ctx->dxtc); ctx->texture_count = 1; + ctx->uncompress_pix_size = 4; switch (avctx->codec_tag) { case MKTAG('H','a','p','1'): @@ -461,8 +462,9 @@ static av_cold int hap_init(AVCodecContext *avctx) 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; + ctx->tex_fun = ctx->dxtc.rgtc1u_gray_block; + avctx->pix_fmt = AV_PIX_FMT_GRAY8; + ctx->uncompress_pix_size = 1; break; case MKTAG('H','a','p','M'): texture_name = "DXT5-YCoCg-scaled / RGTC1"; |