mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
make TSCC endian-safe, PPC testing courtesy of Diego B.
Originally committed as revision 5007 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
75b5b63179
commit
1927cd41e0
@ -77,6 +77,8 @@ static int decode_rle(CamtasiaContext *c, unsigned int srcsize)
|
|||||||
unsigned char *src = c->decomp_buf;
|
unsigned char *src = c->decomp_buf;
|
||||||
unsigned char *output, *output_end;
|
unsigned char *output, *output_end;
|
||||||
int p1, p2, line=c->height, pos=0, i;
|
int p1, p2, line=c->height, pos=0, i;
|
||||||
|
uint16_t pix16;
|
||||||
|
uint32_t pix32;
|
||||||
|
|
||||||
output = c->pic.data[0] + (c->height - 1) * c->pic.linesize[0];
|
output = c->pic.data[0] + (c->height - 1) * c->pic.linesize[0];
|
||||||
output_end = c->pic.data[0] + (c->height) * c->pic.linesize[0];
|
output_end = c->pic.data[0] + (c->height) * c->pic.linesize[0];
|
||||||
@ -107,12 +109,28 @@ static int decode_rle(CamtasiaContext *c, unsigned int srcsize)
|
|||||||
src += p2 * (c->bpp / 8);
|
src += p2 * (c->bpp / 8);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for(i = 0; i < p2 * (c->bpp / 8); i++) {
|
if ((c->bpp == 8) || (c->bpp == 24)) {
|
||||||
*output++ = *src++;
|
for(i = 0; i < p2 * (c->bpp / 8); i++) {
|
||||||
}
|
*output++ = *src++;
|
||||||
// RLE8 copy is actually padded - and runs are not!
|
}
|
||||||
if(c->bpp == 8 && (p2 & 1)) {
|
// RLE8 copy is actually padded - and runs are not!
|
||||||
src++;
|
if(c->bpp == 8 && (p2 & 1)) {
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
} else if (c->bpp == 16) {
|
||||||
|
for(i = 0; i < p2; i++) {
|
||||||
|
pix16 = LE_16(src);
|
||||||
|
src += 2;
|
||||||
|
*(uint16_t*)output = pix16;
|
||||||
|
output += 2;
|
||||||
|
}
|
||||||
|
} else if (c->bpp == 32) {
|
||||||
|
for(i = 0; i < p2; i++) {
|
||||||
|
pix32 = LE_32(src);
|
||||||
|
src += 4;
|
||||||
|
*(uint32_t*)output = pix32;
|
||||||
|
output += 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pos += p2;
|
pos += p2;
|
||||||
} else { //Run of pixels
|
} else { //Run of pixels
|
||||||
@ -120,17 +138,17 @@ static int decode_rle(CamtasiaContext *c, unsigned int srcsize)
|
|||||||
switch(c->bpp){
|
switch(c->bpp){
|
||||||
case 8: pix[0] = *src++;
|
case 8: pix[0] = *src++;
|
||||||
break;
|
break;
|
||||||
case 16: pix[0] = *src++;
|
case 16: pix16 = LE_16(src);
|
||||||
pix[1] = *src++;
|
src += 2;
|
||||||
|
*(uint16_t*)pix = pix16;
|
||||||
break;
|
break;
|
||||||
case 24: pix[0] = *src++;
|
case 24: pix[0] = *src++;
|
||||||
pix[1] = *src++;
|
pix[1] = *src++;
|
||||||
pix[2] = *src++;
|
pix[2] = *src++;
|
||||||
break;
|
break;
|
||||||
case 32: pix[0] = *src++;
|
case 32: pix32 = LE_32(src);
|
||||||
pix[1] = *src++;
|
src += 4;
|
||||||
pix[2] = *src++;
|
*(uint32_t*)pix = pix32;
|
||||||
pix[3] = *src++;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (output + p1 * (c->bpp / 8) > output_end)
|
if (output + p1 * (c->bpp / 8) > output_end)
|
||||||
@ -139,17 +157,15 @@ static int decode_rle(CamtasiaContext *c, unsigned int srcsize)
|
|||||||
switch(c->bpp){
|
switch(c->bpp){
|
||||||
case 8: *output++ = pix[0];
|
case 8: *output++ = pix[0];
|
||||||
break;
|
break;
|
||||||
case 16: *output++ = pix[0];
|
case 16: *(uint16_t*)output = pix16;
|
||||||
*output++ = pix[1];
|
output += 2;
|
||||||
break;
|
break;
|
||||||
case 24: *output++ = pix[0];
|
case 24: *output++ = pix[0];
|
||||||
*output++ = pix[1];
|
*output++ = pix[1];
|
||||||
*output++ = pix[2];
|
*output++ = pix[2];
|
||||||
break;
|
break;
|
||||||
case 32: *output++ = pix[0];
|
case 32: *(uint32_t*)output = pix32;
|
||||||
*output++ = pix[1];
|
output += 4;
|
||||||
*output++ = pix[2];
|
|
||||||
*output++ = pix[3];
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user