[FFmpeg-cvslog] avcodec/hapdec : use gray8 for HapAlphaOnly decoding instead of RGB0

Martin Vignali git at videolan.org
Sat Nov 25 21:01:22 EET 2017


ffmpeg | branch: master | Martin Vignali <martin.vignali at gmail.com> | Sat Nov 25 19:46:48 2017 +0100| [21c06c4095f53b2c343e1225ae52d83160e213f1] | committer: Martin Vignali

avcodec/hapdec : use gray8 for HapAlphaOnly decoding instead of RGB0

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

 libavcodec/hap.h    |  1 +
 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";



More information about the ffmpeg-cvslog mailing list