along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+#include "mem.h"
#include "rfxswf.h"
#ifdef HAVE_JPEGLIB
#include "./bitio.h"
#include "./MD5.h"
-// memory allocation
-
-void* rfx_alloc(int size)
-{
- void*ptr;
- if(size == 0) {
- //*(int*)0 = 0xdead;
- //fprintf(stderr, "Warning: Zero alloc\n");
- return 0;
- }
-
- ptr = malloc(size);
- if(!ptr) {
- fprintf(stderr, "FATAL: Out of memory\n");
- /* TODO: we should send a signal, so that the debugger kicks in */
- exit(1);
- }
- return ptr;
-}
-void* rfx_realloc(void*data, int size)
-{
- void*ptr;
- if(size == 0) {
- //*(int*)0 = 0xdead;
- //fprintf(stderr, "Warning: Zero realloc\n");
- rfx_free(data);
- return 0;
- }
- if(!data) {
- ptr = malloc(size);
- } else {
- ptr = realloc(data, size);
- }
-
- if(!ptr) {
- fprintf(stderr, "FATAL: Out of memory\n");
- /* TODO: we should send a signal, so that the debugger kicks in */
- exit(1);
- }
- return ptr;
-}
-void* rfx_calloc(int size)
-{
- void*ptr;
- if(size == 0) {
- //*(int*)0 = 0xdead;
- //fprintf(stderr, "Warning: Zero alloc\n");
- return 0;
- }
-#ifdef HAVE_CALLOC
- ptr = calloc(size);
-#else
- ptr = malloc(size);
-#endif
- if(!ptr) {
- fprintf(stderr, "FATAL: Out of memory\n");
- /* TODO: we should send a signal, so that the debugger kicks in */
- exit(1);
- }
-#ifndef HAVE_CALLOC
- memset(ptr, 0, size);
-#endif
- return ptr;
-}
-
-void rfx_free(void*ptr)
-{
- if(!ptr)
- return;
- free(ptr);
-}
-
-#ifdef MEMORY_INFO
-long rfx_memory_used()
-{
-}
-
-char* rfx_memory_used_str()
-{
-}
-#endif
-
// internal constants
#define MALLOC_SIZE 128
return (S32)res;
}
-U32 reader_GetBits(struct reader_t*reader, int nbits)
+U32 reader_GetBits(reader_t*reader, int nbits)
{ return reader_readbits(reader, nbits);
}
-S32 reader_GetSBits(struct reader_t*reader, int nbits)
+S32 reader_GetSBits(reader_t*reader, int nbits)
{ U32 res = reader_readbits(reader, nbits);
if (res&(1<<(nbits-1))) res|=(0xffffffff<<nbits);
return (S32)res;
return 0;
}
-int reader_GetRect(struct reader_t*reader,SRECT * r)
+int reader_GetRect(reader_t*reader,SRECT * r)
{ int nbits;
SRECT dummy;
if (!r) r = &dummy;
nbits = swf_CountBits(m->sx,0);
nbits = swf_CountBits(m->sy,nbits);
if(nbits>=32) {
+ /* TODO: happens on AMD64 systems for normal values? */
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
nbits = 31;
}
return 0;
}
-TAG * swf_ReadTag(struct reader_t*reader, TAG * prev)
+TAG * swf_ReadTag(reader_t*reader, TAG * prev)
{ TAG * t;
U16 raw;
U32 len;
int swf_DefineSprite_GetRealSize(TAG * t);
-int swf_WriteTag2(struct writer_t*writer, TAG * t)
+int swf_WriteTag2(writer_t*writer, TAG * t)
// returns tag length in bytes (incl. Header), -1 = Error
// writer = 0 -> no output
{ U16 raw[3];
len = (t->id==ST_DEFINESPRITE)?swf_DefineSprite_GetRealSize(t):t->len;
- short_tag = len<0x3f&&(t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2);
+ short_tag = len<0x3f&&
+ (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&&
+ t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3);
if (writer)
{ if (short_tag)
int swf_WriteTag(int handle, TAG * t)
{
- struct writer_t writer;
+ writer_t writer;
int len = 0;
if(handle<0)
return swf_WriteTag2(0, t);
do
{
- if(t->len<0x3f&&t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2) {
+ if(t->len<0x3f&&
+ (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&&
+ t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3)
+ ) {
swf_SetU16(sprtag,t->len|(t->id<<6));
} else {
swf_SetU16(sprtag,0x3f|(t->id<<6));
// Movie Functions
-int swf_ReadSWF2(struct reader_t*reader, SWF * swf) // Reads SWF to memory (malloc'ed), returns length or <0 if fails
+int swf_ReadSWF2(reader_t*reader, SWF * swf) // Reads SWF to memory (malloc'ed), returns length or <0 if fails
{
if (!swf) return -1;
memset(swf,0x00,sizeof(SWF));
int len;
TAG * t;
TAG t1;
- struct reader_t zreader;
+ reader_t zreader;
if ((len = reader->read(reader ,b,8))<8) return -1;
int swf_ReadSWF(int handle, SWF * swf)
{
- struct reader_t reader;
+ reader_t reader;
reader_init_filereader(&reader, handle);
return swf_ReadSWF2(&reader, swf);
}
-int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, returns length or <0 if fails
+int swf_WriteSWF2(writer_t*writer, SWF * swf) // Writes SWF to file, returns length or <0 if fails
{ U32 len;
TAG * t;
int frameCount=0;
- struct writer_t zwriter;
+ writer_t zwriter;
int fileSize = 0;
int inSprite = 0;
int writer_lastpos = 0;
#ifdef INSERT_RFX_TAG
- if (swf->firstTag && swf->firstTag->next &&
- (swf->firstTag->id != ST_REFLEX || swf->firstTag->next->id != ST_REFLEX)
- ) {
+ if ((swf->firstTag && swf->firstTag->id != ST_REFLEX) &&
+ (!swf->firstTag->next || swf->firstTag->next->id != ST_REFLEX))
+ {
swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),"rfx",3);
}
int swf_WriteSWF(int handle, SWF * swf) // Writes SWF to file, returns length or <0 if fails
{
- struct writer_t writer;
+ writer_t writer;
int len = 0;
swf->compressed = 0;
int swf_WriteSWC(int handle, SWF * swf) // Writes SWF to file, returns length or <0 if fails
{
- struct writer_t writer;
+ writer_t writer;
int len = 0;
swf->compressed = 1;
return len;
}
-int swf_WriteHeader2(struct writer_t*writer,SWF * swf)
+int swf_WriteHeader2(writer_t*writer,SWF * swf)
{
SWF myswf;
memcpy(&myswf,swf,sizeof(SWF));