[Ffmpeg-cvslog] r5435 - trunk/libavcodec/kmvc.c
kostya
subversion
Wed May 31 06:52:02 CEST 2006
Author: kostya
Date: Wed May 31 06:52:02 2006
New Revision: 5435
Modified:
trunk/libavcodec/kmvc.c
Log:
Palette support for newer KMVC
Modified: trunk/libavcodec/kmvc.c
==============================================================================
--- trunk/libavcodec/kmvc.c (original)
+++ trunk/libavcodec/kmvc.c Wed May 31 06:52:02 2006
@@ -242,8 +242,17 @@
return -1;
}
- header = buf[0];
- buf++;
+ header = *buf++;
+
+ /* blocksize 127 is really palette change event */
+ if (buf[0] == 127) {
+ buf += 3;
+ for (i = 0; i < 127; i++) {
+ ctx->pal[i + (header & 0x81)] = (buf[0] << 16) | (buf[1] << 8) | buf[2];
+ buf += 4;
+ }
+ buf -= 127 * 4 + 3;
+ }
if (header & KMVC_KEYFRAME) {
ctx->pic.key_frame = 1;
@@ -253,6 +262,13 @@
ctx->pic.pict_type = FF_P_TYPE;
}
+ /* if palette has been changed, copy it from palctrl */
+ if (ctx->avctx->palctrl && ctx->avctx->palctrl->palette_changed) {
+ memcpy(ctx->pal, ctx->avctx->palctrl->palette, AVPALETTE_SIZE);
+ ctx->setpal = 1;
+ ctx->avctx->palctrl->palette_changed = 0;
+ }
+
if (header & KMVC_PALETTE) {
ctx->pic.palette_has_changed = 1;
// palette starts from index 1 and has 127 entries
@@ -272,12 +288,16 @@
blocksize = *buf++;
- if (blocksize != 8) {
+ if (blocksize != 8 && blocksize != 127) {
av_log(avctx, AV_LOG_ERROR, "Block size = %i\n", blocksize);
return -1;
}
memset(ctx->cur, 0, 320 * 200);
switch (header & KMVC_METHOD) {
+ case 0:
+ case 1: // used in palette changed event
+ memcpy(ctx->cur, ctx->prev, 320 * 200);
+ break;
case 3:
kmvc_decode_intra_8x8(ctx, buf, avctx->width, avctx->height);
break;
@@ -351,11 +371,14 @@
if (avctx->extradata_size == 1036) { // palette in extradata
uint8_t *src = avctx->extradata + 12;
- for (i = 0; i < c->palsize; i++) {
+ for (i = 0; i < 256; i++) {
c->pal[i] = LE_32(src);
src += 4;
}
c->setpal = 1;
+ if (c->avctx->palctrl) {
+ c->avctx->palctrl->palette_changed = 0;
+ }
}
avctx->pix_fmt = PIX_FMT_PAL8;
More information about the ffmpeg-cvslog
mailing list