Skip to content
Snippets Groups Projects
Commit bcae1fd0 authored by Kostya Shishkov's avatar Kostya Shishkov
Browse files

This codec is PAL8 so make it output PAL8 too

Originally committed as revision 8630 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0a7a33d2
No related branches found
No related tags found
No related merge requests found
......@@ -31,7 +31,6 @@
typedef struct QdrawContext{
AVCodecContext *avctx;
AVFrame pic;
uint8_t palette[256*3];
} QdrawContext;
static int decode_frame(AVCodecContext *avctx,
......@@ -43,6 +42,8 @@ static int decode_frame(AVCodecContext *avctx,
uint8_t* outdata;
int colors;
int i;
uint32_t *pal;
int r, g, b;
if(p->data[0])
avctx->release_buffer(avctx, p);
......@@ -66,6 +67,7 @@ static int decode_frame(AVCodecContext *avctx,
return -1;
}
pal = (uint32_t*)p->data[1];
for (i = 0; i <= colors; i++) {
unsigned int idx;
idx = AV_RB16(buf); /* color index */
......@@ -76,13 +78,15 @@ static int decode_frame(AVCodecContext *avctx,
buf += 6;
continue;
}
a->palette[idx * 3 + 0] = *buf++;
r = *buf++;
buf++;
a->palette[idx * 3 + 1] = *buf++;
g = *buf++;
buf++;
a->palette[idx * 3 + 2] = *buf++;
b = *buf++;
buf++;
pal[idx] = (r << 16) | (g << 8) | b;
}
p->palette_has_changed = 1;
buf += 18; /* skip unneeded data */
for (i = 0; i < avctx->height; i++) {
......@@ -100,27 +104,19 @@ static int decode_frame(AVCodecContext *avctx,
while (left > 0) {
code = *buf++;
if (code & 0x80 ) { /* run */
int i;
pix = *buf++;
if ((out + (257 - code) * 3) > (outdata + a->pic.linesize[0]))
if ((out + (257 - code)) > (outdata + a->pic.linesize[0]))
break;
for (i = 0; i < 257 - code; i++) {
*out++ = a->palette[pix * 3 + 0];
*out++ = a->palette[pix * 3 + 1];
*out++ = a->palette[pix * 3 + 2];
}
memset(out, pix, 257 - code);
out += 257 - code;
tsize += 257 - code;
left -= 2;
} else { /* copy */
int i, pix;
if ((out + code * 3) > (outdata + a->pic.linesize[0]))
if ((out + code) > (outdata + a->pic.linesize[0]))
break;
for (i = 0; i <= code; i++) {
pix = *buf++;
*out++ = a->palette[pix * 3 + 0];
*out++ = a->palette[pix * 3 + 1];
*out++ = a->palette[pix * 3 + 2];
}
memcpy(out, buf, code + 1);
out += code + 1;
buf += code + 1;
left -= 2 + code;
tsize += code + 1;
}
......@@ -142,7 +138,7 @@ static int decode_init(AVCodecContext *avctx){
return 1;
}
avctx->pix_fmt= PIX_FMT_RGB24;
avctx->pix_fmt= PIX_FMT_PAL8;
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment