#include "rfxswf.h"
-#ifdef HAVE_LIBJPEG
-#ifdef HAVE_JPEGLIB_H
+#ifdef HAVE_JPEGLIB
#define HAVE_BOOLEAN
#include <jpeglib.h>
-#define _JPEGLIB_INCLUDED_
-#endif // HAVE_JPEGLIB_H
-#endif // HAVE_LIBJPEG
+#endif // HAVE_JPEGLIB
-#ifdef HAVE_LIBZ
-#ifdef HAVE_ZLIB_H
+#ifdef HAVE_ZLIB
#include <zlib.h>
-#define _ZLIB_INCLUDED_
-#endif // HAVE_ZLIB_H
-#endif // HAVE_LIBZ
+#endif // HAVE_ZLIB
#define LAME
#include "lame/lame.h"
#endif
}
+char* swf_GetString(TAG*t)
+{
+ char* str = ((char*)(&(t)->data[(t)->pos]));
+ while(swf_GetU8(t));
+ return str;
+}
+
U8 swf_GetU8(TAG * t)
{ swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
int swf_GetRect(TAG * t,SRECT * r)
{ int nbits;
SRECT dummy;
- if(!t) {r->xmin=r->xmax=r->ymin=r->ymax;return 0;}
+ if(!t) {r->xmin=r->xmax=r->ymin=r->ymax=0;return 0;}
if (!r) r = &dummy;
nbits = (int) swf_GetBits(t,5);
r->xmin = swf_GetSBits(t,nbits);
}
void swf_ExpandRect2(SRECT*src, SRECT*add)
{
+ if((add->xmin | add->ymin | add->xmax | add->ymax)==0)
+ return;
if(add->xmin < src->xmin)
src->xmin = add->xmin;
if(add->ymin < src->ymin)
SPOINT swf_TurnPoint(SPOINT p, MATRIX* m)
{
SPOINT r;
- r.x = (int)(m->sx*(1/65536.0)*p.x + m->r0*(1/65536.0)*p.y + 0.5) + m->tx;
- r.y = (int)(m->r1*(1/65536.0)*p.x + m->sy*(1/65536.0)*p.y + 0.5) + m->ty;
+ r.x = (int)(m->sx*(1/65536.0)*p.x + m->r1*(1/65536.0)*p.y + 0.5) + m->tx;
+ r.y = (int)(m->r0*(1/65536.0)*p.x + m->sy*(1/65536.0)*p.y + 0.5) + m->ty;
return r;
}
SRECT swf_TurnRect(SRECT r, MATRIX* m)
return t;
}
+TAG * swf_InsertTagBefore(SWF* swf, TAG * before,U16 id) // updates frames, if nescessary
+{ TAG * t;
+
+ t = (TAG *)malloc(sizeof(TAG));
+ if (t)
+ { memset(t,0x00,sizeof(TAG));
+ t->id = id;
+
+ if (before)
+ { t->frame = before->frame;
+ t->next = before;
+ t->prev = before->prev;
+ before->prev = t;
+ if (t->prev) t->prev->next = t;
+
+ if (id==ST_SHOWFRAME) swf_UpdateFrame(t->next,+1);
+ }
+ }
+ if(swf && swf->firstTag == before) {
+ swf->firstTag = t;
+ }
+ return t;
+}
+
+void swf_ClearTag(TAG * t)
+{
+ if (t->data) free(t->data);
+ t->data = 0;
+ t->pos = 0;
+ t->len = 0;
+ t->readBit = 0;
+ t->writeBit = 0;
+ t->memsize = 0;
+}
+
+void swf_ResetTag(TAG*tag, U16 id)
+{
+ tag->len = tag->pos = tag->readBit = tag->writeBit = 0;
+ tag->id = id;
+}
+
int swf_DeleteTag(TAG * t)
{ if (!t) return -1;
swf_SetU16(&t2, swf->frameCount);
l = swf_GetTagLen(&t2)+8;
}
+ if(swf->compressed == 8) {
+ l -= 8;
+ }
fileSize = l+len;
if(len) {// don't touch headers without tags
swf->fileSize = fileSize;
swf->frameCount = frameCount;
}
-
- if(swf->compressed) {
- char*id = "CWS";
- writer->write(writer, id, 3);
- }
- else {
- char*id = "FWS";
- writer->write(writer, id, 3);
- }
- writer->write(writer, &swf->fileVersion, 1);
- PUT32(b4, swf->fileSize);
- writer->write(writer, b4, 4);
+ if(swf->compressed != 8) {
+ /* compressed flag set to 8 means "skip first 8
+ header bytes". This is necessary if the caller wants to
+ create compressed SWFs himself */
+ if(swf->compressed) {
+ char*id = "CWS";
+ writer->write(writer, id, 3);
+ }
+ else {
+ char*id = "FWS";
+ writer->write(writer, id, 3);
+ }
- if(swf->compressed) {
- writer_init_zlibdeflate(&zwriter, writer);
- writer = &zwriter;
+ writer->write(writer, &swf->fileVersion, 1);
+ PUT32(b4, swf->fileSize);
+ writer->write(writer, b4, 4);
+
+ if(swf->compressed) {
+ writer_init_zlibdeflate(&zwriter, writer);
+ writer = &zwriter;
+ }
}
swf_SetRect(&t1,&swf->movieSize);
{ if (swf_WriteTag2(writer, t)<0) return -1;
t = swf_NextTag(t);
}
- writer->finish(writer); //e.g. flush zlib buffers
+ if(swf->compressed != 8)
+ writer->finish(writer); // flush zlib buffers - only if _we_ initialized that writer.
}
}
return (int)fileSize;
#include "modules/swfbits.c"
#include "modules/swfaction.c"
#include "modules/swfsound.c"
-