Mercurial > libavcodec.hg
changeset 1462:eabd6b8f83ed libavcodec
deploy palette control API
author | tmmm |
---|---|
date | Fri, 12 Sep 2003 03:48:14 +0000 |
parents | 918f1772e7d2 |
children | ca24abf4af22 |
files | avcodec.h xan.c |
diffstat | 2 files changed, 25 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Thu Sep 11 22:51:05 2003 +0000 +++ b/avcodec.h Fri Sep 12 03:48:14 2003 +0000 @@ -1305,6 +1305,25 @@ int linesize[4]; ///< number of bytes per line } AVPicture; +/** + * AVPaletteControl + * This structure defines a method for communicating palette changes + * between and demuxer and a decoder. + */ +typedef struct AVPaletteControl { + + /* demuxer sets this to 1 to indicate the palette has changed; + * decoder resets to 0 */ + int palette_changed; + + /* 256 3-byte RGB palette entries; the components should be + * formatted in the buffer as "RGBRGB..." and should be scaled to + * 8 bits if they originally represented 6-bit VGA palette + * components */ + unsigned char palette[256 * 3]; + +} AVPaletteControl; + extern AVCodec ac3_encoder; extern AVCodec mp2_encoder; extern AVCodec mp3lame_encoder;
--- a/xan.c Thu Sep 11 22:51:05 2003 +0000 +++ b/xan.c Fri Sep 12 03:48:14 2003 +0000 @@ -115,9 +115,9 @@ 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; } @@ -809,13 +809,13 @@ 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; }