X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpython%2FSWF.c;h=0c8fd6f931d74b372d3a00683cae012134db42cc;hb=357b4098faaa5cf537c1e2292521305d95f681b1;hp=5f03825951e85ff445776f9d4c3996d30e6ec9d5;hpb=263d494bd93334ec04c81dcbe47b69675fa23007;p=swftools.git diff --git a/lib/python/SWF.c b/lib/python/SWF.c index 5f03825..0c8fd6f 100644 --- a/lib/python/SWF.c +++ b/lib/python/SWF.c @@ -25,8 +25,10 @@ #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" -#include "./tag.h" +#include "./tags.h" #include "./taglist.h" +#include "./primitives.h" +#include "./action.h" /* TODO: @@ -47,7 +49,7 @@ staticforward PyTypeObject SWFClass; typedef struct { PyObject_HEAD - SWF swf; //swf.firstTag ist not used + SWF swf; //swf.firstTag is not used PyObject*taglist; char*filename; } SWFObject; @@ -69,11 +71,17 @@ static PyObject* f_create(PyObject* self, PyObject* args, PyObject* kwargs) if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|idOs", kwlist, &version, &framerate, - &obbox, filename)) + &obbox, &filename)) return NULL; - if (!PyArg_Parse(obbox, "(iiii)", &bbox.xmin, &bbox.ymin, &bbox.xmax, &bbox.ymax)) - return NULL; + if(obbox) { + if (!PY_CHECK_TYPE(obbox, &BBoxClass)) { + obbox = f_BBox(0, obbox, 0); + if(!obbox) + return NULL; + } + bbox = bbox_getSRECT(obbox); + } memset(&swf->swf, 0, sizeof(SWF)); if(filename) @@ -123,6 +131,7 @@ static PyObject* f_load(PyObject* self, PyObject* args) return 0; } close(fi); + swf_FoldAll(&swf->swf); swf->taglist = taglist_new2(swf->swf.firstTag); if(swf->taglist == NULL) { @@ -162,8 +171,9 @@ static PyObject * swf_save(PyObject* self, PyObject* args, PyObject* kwargs) swf->compressed = 1; swf->firstTag = taglist_getTAGs(swfo->taglist); - if(!swf->firstTag) - return NULL; + + /*if(!swf->firstTag) + return NULL;*/ // fix the file, in case it is empty or not terminated properly { @@ -198,7 +208,7 @@ static PyObject * swf_save(PyObject* self, PyObject* args, PyObject* kwargs) } close(fi); - //swf_FreeTags(swf); + swf_FreeTags(swf); /*{ TAG * t = swf->firstTag; while (t) { @@ -216,6 +226,8 @@ static PyObject * swf_save(PyObject* self, PyObject* args, PyObject* kwargs) }*/ swf->firstTag = 0; + mylog(" %08x(%d) f_save filename=%s done\n", (int)self, self->ob_refcnt, filename); + return PY_NONE; } //---------------------------------------------------------------------------- @@ -271,7 +283,7 @@ static int swf_print(PyObject * self, FILE *fi, int flags) //flags&Py_PRINT_RAW static PyObject* swf_getattr(PyObject * self, char* a) { SWFObject*swf = (SWFObject*)self; - PyObject* ret; + PyObject* ret = 0; if(!strcmp(a, "fps")) { double fps = swf->swf.frameRate/256.0; @@ -286,18 +298,24 @@ static PyObject* swf_getattr(PyObject * self, char* a) mylog(" %08x(%d) swf_getattr %s = %s\n", (int)self, self->ob_refcnt, a, filename); return Py_BuildValue("s", filename); } else if(!strcmp(a, "bbox")) { - int xmin,ymin,xmax,ymax; - xmin = swf->swf.movieSize.xmin; - ymin = swf->swf.movieSize.ymin; - xmax = swf->swf.movieSize.xmax; - ymax = swf->swf.movieSize.ymax; - mylog(" %08x(%d) swf_getattr %s = (%d,%d,%d,%d)\n", (int)self, self->ob_refcnt, a, xmin,ymin,xmax,ymax); - return Py_BuildValue("(iiii)", xmin, ymin, xmax, ymax); + return f_BBox2(swf->swf.movieSize); } else if(!strcmp(a, "tags")) { PyObject*ret = (PyObject*)(swf->taglist); Py_INCREF(ret); mylog(" %08x(%d) swf_getattr %s = %08x(%d)\n", (int)self, self->ob_refcnt, a, ret, ret->ob_refcnt); return ret; + } else if(!strcmp(a, "filesize")) { + int s = swf->swf.fileSize; + return Py_BuildValue("i", s); + } else if(!strcmp(a, "width")) { + int w = (swf->swf.movieSize.xmax - swf->swf.movieSize.xmin) / 20; + return Py_BuildValue("i", w); + } else if(!strcmp(a, "height")) { + int h = (swf->swf.movieSize.ymax - swf->swf.movieSize.ymin) / 20; + return Py_BuildValue("i", h); + } else if(!strcmp(a, "framecount")) { + int f = swf->swf.frameCount; + return Py_BuildValue("i", f); } ret = Py_FindMethod(swf_functions, self, a); @@ -333,15 +351,16 @@ static int swf_setattr(PyObject * self, char* a, PyObject * o) mylog(" %08x(%d) swf_setattr %s = %s\n", (int)self, self->ob_refcnt, a, filename); return 0; } else if(!strcmp(a, "bbox")) { - int xmin=0,ymin=0,xmax=0,ymax=0; - if (!PyArg_Parse(o, "(iiii)", &xmin, &ymin, &xmax, &ymax)) - goto err; + PyObject *obbox = o; + if (!PY_CHECK_TYPE(obbox, &BBoxClass)) { + obbox = f_BBox(0, o, 0); + if(!obbox) + return 1; + } + SRECT bbox = bbox_getSRECT(obbox); - swf->swf.movieSize.xmin = xmin; - swf->swf.movieSize.ymin = ymin; - swf->swf.movieSize.xmax = xmax; - swf->swf.movieSize.ymax = ymax; - mylog(" %08x(%d) swf_setattr %s = (%d,%d,%d,%d)\n", (int)self, self->ob_refcnt, a, xmin,ymin,xmax,ymax); + swf->swf.movieSize = bbox; + mylog(" %08x(%d) swf_setattr %s = (%d,%d,%d,%d)\n", (int)self, self->ob_refcnt, a, bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax); return 0; } else if(!strcmp(a, "tags")) { PyObject* taglist; @@ -398,7 +417,7 @@ static PyObject* module_verbose(PyObject* self, PyObject* args, PyObject* kwargs { int _verbose = 0; static char *kwlist[] = {"verbosity", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &verbose)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &_verbose)) return NULL; setVerbosity(_verbose); @@ -416,7 +435,7 @@ void initSWF(void) { PyObject*module; PyMethodDef* primitive_methods = primitive_getMethods(); - PyMethodDef* tag_methods = tag_getMethods(); + PyMethodDef* tag_methods = tags_getMethods(); PyMethodDef* action_methods = action_getMethods(); PyMethodDef* swf_methods = swf_getMethods(); @@ -434,4 +453,3 @@ void initSWF(void) to keep it around */ // free(all_methods) } -