Mercurial > libavformat.hg
diff idcin.c @ 295:bff1a372ae38 libavformat
revised palette API, courtesy of Roberto Togni (rtogni at freemail.it)
author | melanson |
---|---|
date | Thu, 30 Oct 2003 05:40:58 +0000 |
parents | 9fa2ec3b9982 |
children | c152849ee643 |
line wrap: on
line diff
--- a/idcin.c Wed Oct 29 14:25:27 2003 +0000 +++ b/idcin.c Thu Oct 30 05:40:58 2003 +0000 @@ -90,8 +90,7 @@ int64_t pts; - /* keep reference to extradata but never free it */ - void *extradata; + AVPaletteControl palctrl; } IdcinDemuxContext; static int idcin_probe(AVProbeData *p) @@ -175,7 +174,7 @@ HUFFMAN_TABLE_SIZE) return -EIO; /* save a reference in order to transport the palette */ - idcin->extradata = st->codec.extradata; + st->codec.palctrl = &idcin->palctrl; /* if sample rate is 0, assume no audio */ if (sample_rate) { @@ -227,9 +226,10 @@ unsigned int chunk_size; IdcinDemuxContext *idcin = (IdcinDemuxContext *)s->priv_data; ByteIOContext *pb = &s->pb; - AVPaletteControl *palette_control = (AVPaletteControl *)idcin->extradata; int i; int palette_scale; + unsigned char r, g, b; + unsigned char palette_buffer[768]; if (url_feof(&s->pb)) return -EIO; @@ -240,20 +240,23 @@ return -EIO; } else if (command == 1) { /* trigger a palette change */ - palette_control->palette_changed = 1; - if (get_buffer(pb, palette_control->palette, 768) != 768) + idcin->palctrl.palette_changed = 1; + if (get_buffer(pb, palette_buffer, 768) != 768) return -EIO; /* scale the palette as necessary */ palette_scale = 2; for (i = 0; i < 768; i++) - if (palette_control->palette[i] > 63) { + if (palette_buffer[i] > 63) { palette_scale = 0; break; } - if (palette_scale) - for (i = 0; i < 768; i++) - palette_control->palette[i] <<= palette_scale; + for (i = 0; i < 256; i++) { + r = palette_buffer[i * 3 ] << palette_scale; + g = palette_buffer[i * 3 + 1] << palette_scale; + b = palette_buffer[i * 3 + 2] << palette_scale; + idcin->palctrl.palette[i] = (r << 16) | (g << 8) | (b); + } } chunk_size = get_le32(pb); @@ -293,6 +296,7 @@ static int idcin_read_close(AVFormatContext *s) { + return 0; }