X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfbits.c;h=0454f10c736fae3b3a406d496ca78703b4770155;hb=0e4e674622c2f2adb7946bca3b773bcaf0750d5d;hp=a1110e3f984da76e5b59a979660ccc2da724b820;hpb=4466cccb28955a0d145a5ef1534d56109497e40b;p=swftools.git diff --git a/lib/modules/swfbits.c b/lib/modules/swfbits.c index a1110e3..0454f10 100644 --- a/lib/modules/swfbits.c +++ b/lib/modules/swfbits.c @@ -184,9 +184,8 @@ int swf_SetJPEGBits(TAG * t,char * fname,int quality) int y = js[x*3+0]; int u = js[x*3+1]; int v = js[x*3+1]; - // untested: js[x*3+0] = y + ((360*(v-128))>>8); - js[x*3+1] = y - ((88*(u-128)-183*(v-128))>>8); + js[x*3+1] = y - ((88*(u-128)+183*(v-128))>>8); js[x*3+2] = y + ((455 * (u-128))>>8); } } @@ -338,7 +337,6 @@ int swf_SetLosslessBits(TAG * t,U16 width,U16 height,void * bitmap,U8 bitmap_fla int swf_SetLosslessBitsIndexed(TAG * t,U16 width,U16 height,U8 * bitmap,RGBA * palette,U16 ncolors) { RGBA * pal = palette; int bps = BYTES_PER_SCANLINE(width); - U8 * data; int res = 0; if (!pal) // create default palette for grayscale images @@ -413,16 +411,24 @@ int swf_SetLosslessBitsIndexed(TAG * t,U16 width,U16 height,U8 * bitmap,RGBA * p deflateEnd(&zs); - if (zs.next_out>data) swf_SetBlock(t,data,zs.next_out-data); - free(zpal); } else res = -2; // memory error } else res = -3; // zlib error - free(data); } if (!palette) free(pal); + while(t->len < 64) { /* actually, 63 and above is o.k., but let's stay on the safe side */ + + /* Flash players up to MX crash or do strange things if they encounter a + DefineLossless(2) Tag with a payload of less than 63 bytes. They also + substitute the whole bitmap by a red rectangle. + + This loop fills up the tag with zeroes so that this doesn't happen. + */ + swf_SetU8(t, 0); + } + return res; }