diff avidec.c @ 297:85d558a18134 libavformat

Make avi and asf demuxer export palette in palctrl
author rtognimp
date Sun, 02 Nov 2003 21:55:38 +0000
parents 252946de6d3f
children 6ee1b02f9b2a
line wrap: on
line diff
--- a/avidec.c	Fri Oct 31 22:26:26 2003 +0000
+++ b/avidec.c	Sun Nov 02 21:55:38 2003 +0000
@@ -243,6 +243,21 @@
                     if(st->codec.extradata_size & 1) //FIXME check if the encoder really did this correctly
                         get_byte(pb);
 
+                    /* Extract palette from extradata if bpp <= 8 */
+                    /* This code assumes that extradata contains only palette */
+                    /* This is true for all paletted codecs implemented in ffmpeg */
+                    if (st->codec.extradata_size && (st->codec.bits_per_sample <= 8)) {
+                        st->codec.palctrl = av_mallocz(sizeof(AVPaletteControl));
+#ifdef WORDS_BIGENDIAN
+                        for (i = 0; i < FFMIN(st->codec.extradata_size / 4, 256); i++)
+                            st->codec.palctrl->palette[i] = bswap_32(st->codec.extradata)[i * 4]);
+#else
+                        memcpy(st->codec.palctrl->palette, st->codec.extradata,
+                               FFMIN(st->codec.extradata_size, AVPALETTE_SIZE));
+#endif
+                        st->codec.palctrl->palette_changed = 1;
+                    }
+
 #ifdef DEBUG
                     print_tag("video", tag1, 0);
 #endif
@@ -382,6 +397,7 @@
         AVStream *st = s->streams[i];
 //        av_free(st->priv_data);
         av_free(st->codec.extradata);
+        av_free(st->codec.palctrl);
     }
 
     if (avi->dv_demux)