summaryrefslogtreecommitdiff
path: root/libavcodec/aasc.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2012-08-08 23:59:33 +0000
committerPaul B Mahol <onemda@gmail.com>2012-08-09 00:02:05 +0000
commitbd971ddaf47aed588985b33659e403950f71dcc7 (patch)
tree6c91ca45f9cdd4246e540b8ddc2e2ef51054baa0 /libavcodec/aasc.c
parent8a57ca5c6a1c0ad28afa7ea6f824981e6761cce1 (diff)
aasc: 8bit support
Closes #1319. Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/aasc.c')
-rw-r--r--libavcodec/aasc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libavcodec/aasc.c b/libavcodec/aasc.c
index f34a722f13..7b485572db 100644
--- a/libavcodec/aasc.c
+++ b/libavcodec/aasc.c
@@ -36,14 +36,29 @@ typedef struct AascContext {
AVCodecContext *avctx;
GetByteContext gb;
AVFrame frame;
+
+ uint32_t palette[AVPALETTE_COUNT];
+ int palette_size;
} AascContext;
static av_cold int aasc_decode_init(AVCodecContext *avctx)
{
AascContext *s = avctx->priv_data;
+ uint8_t *ptr;
+ int i;
s->avctx = avctx;
switch (avctx->bits_per_coded_sample) {
+ case 8:
+ avctx->pix_fmt = PIX_FMT_PAL8;
+
+ ptr = avctx->extradata;
+ s->palette_size = FFMIN(avctx->extradata_size, AVPALETTE_SIZE);
+ for (i = 0; i < s->palette_size / 4; i++) {
+ s->palette[i] = 0xFFU << 24 | AV_RL32(ptr);
+ ptr += 4;
+ }
+ break;
case 16:
avctx->pix_fmt = PIX_FMT_RGB555;
break;
@@ -112,6 +127,9 @@ static int aasc_decode_frame(AVCodecContext *avctx,
return -1;
}
+ if (avctx->pix_fmt == PIX_FMT_PAL8)
+ memcpy(s->frame.data[1], s->palette, s->palette_size);
+
*data_size = sizeof(AVFrame);
*(AVFrame*)data = s->frame;