X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Frfxswf.c;h=9b3c51ed6be0cbc571afaf216326b83f4304327d;hb=bb3b7773036c333bc4179b8f415a886c8c53c42e;hp=f56427a1dd062a76f84fe3a095220ae5c2a97a51;hpb=3f41c996a62423548872c971e6b47ef1454efa72;p=swftools.git diff --git a/lib/rfxswf.c b/lib/rfxswf.c index f56427a..9b3c51e 100644 --- a/lib/rfxswf.c +++ b/lib/rfxswf.c @@ -78,9 +78,11 @@ U32 swf_GetTagPos(TAG * t) { return t->pos; } void swf_SetTagPos(TAG * t,U32 pos) { swf_ResetReadBits(t); if (pos<=t->len) t->pos = pos; - #ifdef DEBUG_RFXSWF - else fprintf(stderr,"SetTagPos() out of bounds: TagID = %i\n",t->id); - #endif + else { +#ifdef DEBUG_RFXSWF + fprintf(stderr,"SetTagPos(%d) out of bounds: TagID = %i\n",pos, t->id); +#endif + } } char* swf_GetString(TAG*t) @@ -288,7 +290,7 @@ int swf_SetRGBA(TAG * t,RGBA * col) void swf_GetRGBA(TAG * t, RGBA * col) { RGBA dummy; - if(!col); + if(!col) col = &dummy; col->r = swf_GetU8(t); col->g = swf_GetU8(t); @@ -433,6 +435,8 @@ void swf_ExpandRect2(SRECT*src, SRECT*add) { if((add->xmin | add->ymin | add->xmax | add->ymax)==0) return; + if((src->xmin | src->ymin | src->xmax | src->ymax)==0) + *src = *add; if(add->xmin < src->xmin) src->xmin = add->xmin; if(add->ymin < src->ymin) @@ -861,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) @@ -1038,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)); @@ -1080,14 +1084,6 @@ 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; @@ -1211,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 @@ -1223,7 +1220,7 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, if (swf->firstTag && swf_NextTag(swf->firstTag)) if (swf_GetTagID(swf_NextTag(swf->firstTag))!=ST_REFLEX) - swf_SetBlock(swf_InsertTag(swf->firstTag,ST_REFLEX),"rfx",3); + swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),"rfx",3); #endif // INSERT_RFX_TAG @@ -1300,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 @@ -1403,6 +1400,7 @@ void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for t free(t); t = tnew; } + swf->firstTag = 0; } // include advanced functions