fix for DEFINEBITSLOSSLESS short tag bug.
[swftools.git] / lib / rfxswf.c
index cd2e0b6..9b3c51e 100644 (file)
@@ -865,7 +865,7 @@ int swf_WriteTag2(struct writer_t*writer, TAG * t)
 
   len = (t->id==ST_DEFINESPRITE)?swf_DefineSprite_GetRealSize(t):t->len;
 
-  short_tag = len<0x3f;
+  short_tag = len<0x3f&&(t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2);
 
   if (writer)
   { if (short_tag)
@@ -1042,7 +1042,7 @@ void swf_FoldSprite(TAG * t)
 
   do
   { 
-    if(t->len<0x3f) {
+    if(t->len<0x3f&&t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2) {
        swf_SetU16(sprtag,t->len|(t->id<<6));
     } else {
        swf_SetU16(sprtag,0x3f|(t->id<<6));
@@ -1207,6 +1207,7 @@ int  swf_WriteSWF2(struct writer_t*writer, SWF * swf)     // Writes SWF to file,
   int fileSize = 0;
   int inSprite = 0;
   int writer_lastpos = 0;
+  int ret;
     
   if (!swf) return -1;
   if (!writer) return -1; // the caller should provide a nullwriter, not 0, for querying SWF size
@@ -1296,7 +1297,7 @@ int  swf_WriteSWF2(struct writer_t*writer, SWF * swf)     // Writes SWF to file,
     swf_SetU16(&t1,swf->frameRate);
     swf_SetU16(&t1,swf->frameCount);
 
-    int ret = writer->write(writer,b,swf_GetTagLen(&t1));
+    ret = writer->write(writer,b,swf_GetTagLen(&t1));
     if (ret!=swf_GetTagLen(&t1))
     {
       #ifdef DEBUG_RFXSWF