diff options
author | Paul B Mahol <onemda@gmail.com> | 2012-08-08 23:59:33 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2012-08-09 00:02:05 +0000 |
commit | bd971ddaf47aed588985b33659e403950f71dcc7 (patch) | |
tree | 6c91ca45f9cdd4246e540b8ddc2e2ef51054baa0 | |
parent | 8a57ca5c6a1c0ad28afa7ea6f824981e6761cce1 (diff) | |
download | ffmpeg-bd971ddaf47aed588985b33659e403950f71dcc7.tar.gz |
aasc: 8bit support
Closes #1319.
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavcodec/aasc.c | 18 |
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; |