X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfbits.c;h=70a7729562fdfa3c20f49e891cc4c06a912a556e;hb=9a0c8e1b682a8ce8856af78c4740f3bb1763f3f4;hp=a1110e3f984da76e5b59a979660ccc2da724b820;hpb=4466cccb28955a0d145a5ef1534d56109497e40b;p=swftools.git diff --git a/lib/modules/swfbits.c b/lib/modules/swfbits.c index a1110e3..70a7729 100644 --- a/lib/modules/swfbits.c +++ b/lib/modules/swfbits.c @@ -7,9 +7,19 @@ Copyright (c) 2000, 2001 Rainer Böhme - This file is distributed under the GPL, see file COPYING for details + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -*/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define OUTBUFFER_SIZE 0x8000 @@ -184,9 +194,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 +347,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 +421,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; }