frame rate calculation fix from Andrew Mace
[swftools.git] / lib / rfxswf.c
index b652790..14ec250 100644 (file)
@@ -1077,6 +1077,14 @@ void swf_FoldAll(SWF*swf)
     }
 }
 
+void swf_FoldAllTags(TAG*tag)
+{
+    SWF swf;
+    memset(&swf, 0, sizeof(swf));
+    swf.firstTag = tag;
+    swf_FoldAll(&swf);
+}
+
 void swf_UnFoldAll(SWF*swf)
 {
     TAG*tag = swf->firstTag;
@@ -1198,6 +1206,7 @@ int  swf_WriteSWF2(struct writer_t*writer, SWF * swf)     // Writes SWF to file,
   int frameCount=0;
   struct writer_t zwriter;
   int fileSize = 0;
+  int inSprite = 0;
     
   if (!swf) return -1;
 
@@ -1217,10 +1226,12 @@ int  swf_WriteSWF2(struct writer_t*writer, SWF * swf)     // Writes SWF to file,
   t = swf->firstTag;
   frameCount = 0;
 
-  while(t)
-  { len += swf_WriteTag(-1, t);
-    if (t->id==ST_SHOWFRAME) frameCount++;
-    t = swf_NextTag(t);
+  while(t) {
+      len += swf_WriteTag(-1,t);
+      if(t->id == ST_DEFINESPRITE) inSprite++;
+      else if(t->id == ST_END && inSprite) inSprite--;
+      else if(t->id == ST_SHOWFRAME && !inSprite) frameCount++;
+      t = swf_NextTag(t);
   }
   
   { TAG t1;