s->avctx = avctx;
if ((avctx->codec->id == CODEC_ID_XAN_WC3) &&
- (s->avctx->extradata_size != PALETTE_CONTROL_SIZE)) {
+ (s->avctx->extradata_size != sizeof(AVPaletteControl))) {
printf (" WC3 Xan video: expected extradata_size of %d\n",
- PALETTE_CONTROL_SIZE);
+ sizeof(AVPaletteControl));
return -1;
}
switch (s->avctx->pix_fmt) {
- case PIX_FMT_PAL8:
- for (i = 0; i < PALETTE_COUNT; i++) {
- r = *palette_data++;
- g = *palette_data++;
- b = *palette_data++;
- s->palette[i * 4 + 0] = b;
- s->palette[i * 4 + 1] = g;
- s->palette[i * 4 + 2] = r;
- }
- break;
-
case PIX_FMT_RGB555:
palette16 = (unsigned short *)s->palette;
for (i = 0; i < PALETTE_COUNT; i++) {
}
break;
+ case PIX_FMT_PAL8:
case PIX_FMT_RGBA32:
palette32 = (unsigned int *)s->palette;
for (i = 0; i < PALETTE_COUNT; i++) {
uint8_t *buf, int buf_size)
{
XanContext *s = avctx->priv_data;
- unsigned char *palette_control = avctx->extradata;
+ AVPaletteControl *palette_control = (AVPaletteControl *)avctx->extradata;
int keyframe = 0;
- if (palette_control[0]) {
+ if (palette_control->palette_changed) {
/* load the new palette and reset the palette control */
- xan_wc3_build_palette(s, &palette_control[1]);
- palette_control[0] = 0;
+ xan_wc3_build_palette(s, palette_control->palette);
+ palette_control->palette_changed = 0;
keyframe = 1;
}