final word on RGBA byte order
[ffmpeg.git] / libavcodec / xan.c
index 68e3444..e2e3e56 100644 (file)
@@ -115,9 +115,9 @@ static int xan_decode_init(AVCodecContext *avctx)
     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;
     }
 
@@ -265,17 +265,6 @@ static void inline xan_wc3_build_palette(XanContext *s,
 
     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++) {
@@ -321,6 +310,7 @@ static void inline xan_wc3_build_palette(XanContext *s,
         }
         break;
 
+    case PIX_FMT_PAL8:
     case PIX_FMT_RGBA32:
         palette32 = (unsigned int *)s->palette;
         for (i = 0; i < PALETTE_COUNT; i++) {
@@ -809,18 +799,18 @@ static int xan_decode_frame(AVCodecContext *avctx,
                             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;
     }
 
     if (avctx->get_buffer(avctx, &s->current_frame)) {
-        printf ("  Interplay Video: get_buffer() failed\n");
+        printf ("  Xan Video: get_buffer() failed\n");
         return -1;
     }
     s->current_frame.reference = 3;