summaryrefslogtreecommitdiff
path: root/libavcodec/msvideo1.c
diff options
context:
space:
mode:
authorRoberto Togni <r_togni@tiscali.it>2003-11-02 21:57:55 +0000
committerRoberto Togni <r_togni@tiscali.it>2003-11-02 21:57:55 +0000
commit875efafac8afe22971c87fc7dfee83d27364ab50 (patch)
tree6e5eccbb88c54ce20ab80082a838eb3726c70fe5 /libavcodec/msvideo1.c
parent5e29abf8b7efe6cfeee41d9f5e5f9fc98c1fcb93 (diff)
Moved to new palette API
Added check to aviod stride change between frames Originally committed as revision 2466 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/msvideo1.c')
-rw-r--r--libavcodec/msvideo1.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/libavcodec/msvideo1.c b/libavcodec/msvideo1.c
index 71d8af9870..3a51ebe2fc 100644
--- a/libavcodec/msvideo1.c
+++ b/libavcodec/msvideo1.c
@@ -25,8 +25,8 @@
* http://www.pcisys.net/~melanson/codecs/
*
* This decoder outputs either PAL8 or RGB555 data, depending on the
- * whether a RGB palette was passed through via extradata; if the extradata
- * is present, then the data is PAL8; RGB555 otherwise.
+ * whether a RGB palette was passed through palctrl;
+ * if it's present, then the data is PAL8; RGB555 otherwise.
*/
#include <stdio.h>
@@ -66,34 +66,18 @@ typedef struct Msvideo1Context {
int size;
int mode_8bit; /* if it's not 8-bit, it's 16-bit */
- unsigned char palette[PALETTE_COUNT * 4];
} Msvideo1Context;
static int msvideo1_decode_init(AVCodecContext *avctx)
{
Msvideo1Context *s = (Msvideo1Context *)avctx->priv_data;
- int i;
- unsigned char r, g, b;
- unsigned char *raw_palette;
- unsigned int *palette32;
s->avctx = avctx;
- /* figure out the colorspace based on the presence of a palette in
- * extradata */
- if (s->avctx->extradata_size) {
+ /* figure out the colorspace based on the presence of a palette */
+ if (s->avctx->palctrl) {
s->mode_8bit = 1;
- /* load up the palette */
- palette32 = (unsigned int *)s->palette;
- raw_palette = (unsigned char *)s->avctx->extradata;
- for (i = 0; i < s->avctx->extradata_size / 4; i++) {
- b = *raw_palette++;
- g = *raw_palette++;
- r = *raw_palette++;
- raw_palette++;
- palette32[i] = (r << 16) | (g << 8) | (b);
- }
avctx->pix_fmt = PIX_FMT_PAL8;
} else {
s->mode_8bit = 0;
@@ -207,8 +191,13 @@ static void msvideo1_decode_8bit(Msvideo1Context *s)
}
/* make the palette available on the way out */
- if (s->avctx->pix_fmt == PIX_FMT_PAL8)
- memcpy(s->frame.data[1], s->palette, PALETTE_COUNT * 4);
+ if (s->avctx->pix_fmt == PIX_FMT_PAL8) {
+ memcpy(s->frame.data[1], s->avctx->palctrl->palette, AVPALETTE_SIZE);
+ if (s->avctx->palctrl->palette_changed) {
+ s->frame.palette_has_changed = 1;
+ s->avctx->palctrl->palette_changed = 0;
+ }
+ }
}
static void msvideo1_decode_16bit(Msvideo1Context *s)
@@ -337,6 +326,11 @@ static int msvideo1_decode_frame(AVCodecContext *avctx,
return -1;
}
+ if (s->prev_frame.data[0] &&(s->frame.linesize[0] != s->prev_frame.linesize[0]))
+ printf (" MS Video-1: Buffer linesize changed: current %u, previous %u.\n"
+ " Expect wrong image and/or crash!\n",
+ s->frame.linesize[0], s->prev_frame.linesize[0]);
+
if (s->mode_8bit)
msvideo1_decode_8bit(s);
else