unsigned char planes;
unsigned char planemap[4];
+
+ uint32_t pal[256];
} EightBpsContext;
}
}
- if (avctx->palctrl) {
- memcpy (c->pic.data[1], avctx->palctrl->palette, AVPALETTE_SIZE);
- if (avctx->palctrl->palette_changed) {
+ if (avctx->bits_per_coded_sample <= 8) {
+ const uint8_t *pal = av_packet_get_side_data(avpkt,
+ AV_PKT_DATA_PALETTE,
+ NULL);
+ if (pal) {
c->pic.palette_has_changed = 1;
- avctx->palctrl->palette_changed = 0;
- } else
- c->pic.palette_has_changed = 0;
+ memcpy(c->pal, pal, AVPALETTE_SIZE);
+ }
+
+ memcpy (c->pic.data[1], c->pal, AVPALETTE_SIZE);
}
*data_size = sizeof(AVFrame);
avctx->pix_fmt = PIX_FMT_PAL8;
c->planes = 1;
c->planemap[0] = 0; // 1st plane is palette indexes
- if (avctx->palctrl == NULL) {
- av_log(avctx, AV_LOG_ERROR, "Error: PAL8 format but no palette from demuxer.\n");
- return -1;
- }
break;
case 24:
avctx->pix_fmt = avctx->get_format(avctx, pixfmt_rgb24);
AVCodec ff_eightbps_decoder = {
- "8bps",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_8BPS,
- sizeof(EightBpsContext),
- decode_init,
- NULL,
- decode_end,
- decode_frame,
- CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("QuickTime 8BPS video"),
+ .name = "8bps",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_8BPS,
+ .priv_data_size = sizeof(EightBpsContext),
+ .init = decode_init,
+ .close = decode_end,
+ .decode = decode_frame,
+ .capabilities = CODEC_CAP_DR1,
+ .long_name = NULL_IF_CONFIG_SMALL("QuickTime 8BPS video"),
};