implement header rewriting for -X, -Y, -r.
[swftools.git] / src / swfcombine.c
index a552fd8..ce578af 100644 (file)
@@ -720,6 +720,20 @@ TAG* write_master(TAG*tag, SWF*master, SWF*slave, int spriteid, int replaceddefi
     return tag;
 }
 
+void adjustheader(SWF*swf)
+{
+    if(config.framerate)
+       swf->frameRate = config.framerate;
+    if(config.hassizex) {
+       swf->movieSize.xmax = 
+       swf->movieSize.xmin + config.sizex;
+    }
+    if(config.hassizey) {
+       swf->movieSize.ymax = 
+       swf->movieSize.ymin + config.sizey;
+    }
+}
+
 void catcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
 {
     char* depths;
@@ -746,7 +760,9 @@ void catcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
     jpeg_assert(master, slave);
     
     memcpy(newswf, master, sizeof(SWF));
-    tag = newswf->firstTag = swf_InsertTag(0, ST_REFLEX);
+    adjustheader(newswf);
+
+    tag = newswf->firstTag = swf_InsertTag(0, ST_REFLEX); // to be removed later
 
     depths = malloc(65536);
     if(!depths) {
@@ -806,6 +822,10 @@ void catcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
        stag = stag->next;
     }
     tag = swf_InsertTag(tag, ST_END);
+
+    tag = newswf->firstTag;
+    newswf->firstTag = newswf->firstTag->next; //remove temporary tag
+    swf_DeleteTag(tag);
 }
 
 void normalcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
@@ -873,7 +893,9 @@ void normalcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
     // write file 
 
     memcpy(newswf, master, sizeof(SWF));
-    newswf->firstTag = tag = swf_InsertTag(0, ST_REFLEX);
+    adjustheader(newswf);
+
+    newswf->firstTag = tag = swf_InsertTag(0, ST_REFLEX); // to be removed later
 
     if (config.antistream) {
        if (config.merge) {
@@ -891,6 +913,10 @@ void normalcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)
            tag = write_master(tag, master, slave, spriteid, replaceddefine, 
                FLAGS_WRITEDEFINES|FLAGS_WRITENONDEFINES|FLAGS_WRITESPRITE);
     }
+
+    tag = newswf->firstTag;
+    newswf->firstTag = newswf->firstTag->next; //remove temporary tag
+    swf_DeleteTag(tag);
 }
 
 void combine(SWF*master, char*slave_name, SWF*slave, SWF*newswf)