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);
}
}
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
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;
}