aasc: 8bit support
Closes #1319. Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
8a57ca5c6a
commit
bd971ddaf4
@ -36,14 +36,29 @@ typedef struct AascContext {
|
|||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
GetByteContext gb;
|
GetByteContext gb;
|
||||||
AVFrame frame;
|
AVFrame frame;
|
||||||
|
|
||||||
|
uint32_t palette[AVPALETTE_COUNT];
|
||||||
|
int palette_size;
|
||||||
} AascContext;
|
} AascContext;
|
||||||
|
|
||||||
static av_cold int aasc_decode_init(AVCodecContext *avctx)
|
static av_cold int aasc_decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AascContext *s = avctx->priv_data;
|
AascContext *s = avctx->priv_data;
|
||||||
|
uint8_t *ptr;
|
||||||
|
int i;
|
||||||
|
|
||||||
s->avctx = avctx;
|
s->avctx = avctx;
|
||||||
switch (avctx->bits_per_coded_sample) {
|
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:
|
case 16:
|
||||||
avctx->pix_fmt = PIX_FMT_RGB555;
|
avctx->pix_fmt = PIX_FMT_RGB555;
|
||||||
break;
|
break;
|
||||||
@ -112,6 +127,9 @@ static int aasc_decode_frame(AVCodecContext *avctx,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (avctx->pix_fmt == PIX_FMT_PAL8)
|
||||||
|
memcpy(s->frame.data[1], s->palette, s->palette_size);
|
||||||
|
|
||||||
*data_size = sizeof(AVFrame);
|
*data_size = sizeof(AVFrame);
|
||||||
*(AVFrame*)data = s->frame;
|
*(AVFrame*)data = s->frame;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user