Revision: 14510
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14510
Author:   campbellbarton
Date:     2008-04-22 00:17:49 +0200 (Tue, 22 Apr 2008)

Log Message:
-----------
bpy sequencer api can add color strips, changing strip length wasnt 
re-allocating stripdata which was causing memory free errors, added proxy 
options, directort read/write and some more flags.

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/sceneSequence.c

Modified: trunk/blender/source/blender/python/api2_2x/sceneSequence.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/sceneSequence.c 2008-04-21 
22:02:15 UTC (rev 14509)
+++ trunk/blender/source/blender/python/api2_2x/sceneSequence.c 2008-04-21 
22:17:49 UTC (rev 14510)
@@ -125,7 +125,7 @@
        
        seq = alloc_sequence(seqbase, start, machine); /* warning, this sets 
last */
        
-       if (PyTuple_Check(py_data)) {
+       if (PyTuple_Check(py_data) && PyTuple_GET_SIZE(py_data) == 2) {
                /* Image */
                PyObject *list;
                char *name;
@@ -155,7 +155,33 @@
                        strncpy(se->name, name, FILE_MAXFILE-1);
                        se++;
                }               
+       } else if (PyTuple_Check(py_data) && PyTuple_GET_SIZE(py_data) == 3) {
+               float r,g,b;
+               SolidColorVars *colvars;
+               seq->effectdata = MEM_callocN(sizeof(struct SolidColorVars), 
"solidcolor");
+               colvars = (SolidColorVars *)seq->effectdata;
                
+               if (!PyArg_ParseTuple( py_data, "fff", &r, &g, &b)) {
+                       return EXPP_ReturnPyObjError( PyExc_ValueError,
+                                       "color needs to be a tuple of 3 floats 
- (r,g,b)" );
+               }
+               
+               seq->type= SEQ_COLOR;
+               
+               CLAMP(r,0,1);
+               CLAMP(g,0,1);
+               CLAMP(b,0,1);
+               
+               colvars->col[0] = r;
+               colvars->col[1] = b;
+               colvars->col[2] = g;
+               
+               /* basic defaults */
+               seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
+               strip->len = seq->len = 1;
+               strip->us= 1;
+               strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), 
"stripelem");
+               
        } else if (BPy_Sound_Check(py_data)) {
                /* sound */
                int totframe;
@@ -358,6 +384,7 @@
 
 
 
+
 static PyObject *Sequence_getName( BPy_Sequence * self )
 {
        return PyString_FromString( self->seq->name+2 );
@@ -376,7 +403,33 @@
        return 0;
 }
 
+static PyObject *Sequence_getProxyDir( BPy_Sequence * self )
+{
+       return PyString_FromString( self->seq->strip->proxy ? 
self->seq->strip->proxy->dir : "" );
+}
 
+static int Sequence_setProxyDir( BPy_Sequence * self, PyObject * value )
+{
+       char *name = NULL;
+       
+       name = PyString_AsString ( value );
+       if( !name ) {
+               return EXPP_ReturnIntError( PyExc_TypeError,
+                                             "expected string argument" );
+       }
+       
+       if (strlen(name) == 0) {
+               if (self->seq->strip->proxy) {
+                       MEM_freeN(self->seq->strip->proxy); 
+               }
+       } else {
+               self->seq->strip->proxy = MEM_callocN(sizeof(struct 
StripProxy), "StripProxy");
+               strncpy(self->seq->strip->proxy->dir, name, sizeof(struct 
StripProxy));
+       }
+       return 0;
+}
+
+
 static PyObject *Sequence_getSound( BPy_Sequence * self )
 {
        if (self->seq->type == SEQ_RAM_SOUND && self->seq->sound)
@@ -578,7 +631,7 @@
        struct Sequence *seq= self->seq;
        
        /*printf("%i %i %i %i %i %i %i %i %i\n", seq->len, seq->start, 
seq->startofs, seq->endofs, seq->startstill, seq->endstill, seq->startdisp, 
seq->enddisp, seq->depth );*/
-       switch( (int)type ) {
+       switch( GET_INT_FROM_POINTER(type) ) {
        case EXPP_SEQ_ATTR_TYPE: 
                param = seq->type;
                break;
@@ -632,17 +685,18 @@
 static int setIntAttrClamp( BPy_Sequence *self, PyObject *value, void *type )
 {
        struct Sequence *seq= self->seq;
-       int number, origval=0;
+       int number, origval=0, regen_data;
 
        if( !PyInt_Check( value ) )
                return EXPP_ReturnIntError( PyExc_TypeError, "expected an int 
value" );
        
        number = PyInt_AS_LONG( value );
                
-       switch( (int)type ) {
+       switch( GET_INT_FROM_POINTER(type) ) {
        case EXPP_SEQ_ATTR_CHAN:
                CLAMP(number, 1, 1024);
                seq->machine = number;
+               regen_data = 0;
                break;
        case EXPP_SEQ_ATTR_START:
                if (self->seq->type == SEQ_EFFECT)
@@ -651,6 +705,7 @@
                CLAMP(number, -MAXFRAME, MAXFRAME);
                origval = seq->start;
                seq->start = number;
+               regen_data = 0;
                break;
        
        case EXPP_SEQ_ATTR_STARTOFS:
@@ -658,28 +713,36 @@
                        return EXPP_ReturnIntError( PyExc_RuntimeError,
                                "This property dosnt apply to an effect" );
                CLAMP(number, 0, seq->len - seq->endofs);
+               origval = seq->startofs;
                seq->startofs = number;
+               regen_data = 1;
                break;
        case EXPP_SEQ_ATTR_ENDOFS:
                if (self->seq->type == SEQ_EFFECT)
                        return EXPP_ReturnIntError( PyExc_RuntimeError,
                                "This property dosnt apply to an effect" );
                CLAMP(number, 0, seq->len - seq->startofs);
+               origval = seq->endofs;
                seq->endofs = number;
+               regen_data = 1;
                break;
        case EXPP_SEQ_ATTR_STARTSTILL:
                if (self->seq->type == SEQ_EFFECT)
                        return EXPP_ReturnIntError( PyExc_RuntimeError,
                                "This property dosnt apply to an effect" );
                CLAMP(number, 1, MAXFRAME);
+               origval = seq->startstill;
                seq->startstill = number;
+               regen_data = 1;
                break;
        case EXPP_SEQ_ATTR_ENDSTILL:
                if (self->seq->type == SEQ_EFFECT)
                        return EXPP_ReturnIntError( PyExc_RuntimeError,
                                "This property dosnt apply to an effect" );
                CLAMP(number, seq->startstill+1, MAXFRAME);
+               origval = seq->endstill;
                seq->endstill = number;
+               regen_data = 1;
                break;
        case EXPP_SEQ_ATTR_LENGTH:
                if (self->seq->type == SEQ_EFFECT)
@@ -687,25 +750,31 @@
                                "cannot set the length of an effect directly" );
                CLAMP(number, 1, MAXFRAME);
                origval = seq->len;
-               seq->start = number;
+               seq->len = number;
+               regen_data = 1;
                break;
        default:
                return EXPP_ReturnIntError( PyExc_RuntimeError,
                                "undefined type in setFloatAttrClamp" );
        }
-       
-       intern_pos_update(seq);
-       
-       if ((int)type == EXPP_SEQ_ATTR_START && number != origval )
-               intern_recursive_pos_update(seq, origval - seq->start);
-       
+
+       if (number != origval) {
+               intern_pos_update(seq);
+               
+               if (GET_INT_FROM_POINTER(type) == EXPP_SEQ_ATTR_START)
+                       intern_recursive_pos_update(seq, origval - seq->start);
+               
+               if (regen_data) {
+                       new_tstripdata(seq);
+               }
+       }
        return 0;
 }
 
 
 static PyObject *getFlagAttr( BPy_Sequence *self, void *type )
 {
-       if (self->seq->flag & (int)type)
+       if (self->seq->flag & GET_INT_FROM_POINTER(type))
                Py_RETURN_TRUE;
        else
                Py_RETURN_FALSE;
@@ -718,7 +787,7 @@
 
 static int setFlagAttr( BPy_Sequence *self, PyObject *value, void *type )
 {
-       int t = (int)type;
+       int t = GET_INT_FROM_POINTER(type);
        int param = PyObject_IsTrue( value );
        
        if( param == -1 )
@@ -746,6 +815,10 @@
         (getter)Sequence_getName, (setter)Sequence_setName,
         "Sequence name",
          NULL},
+       {"proxyDir",
+        (getter)Sequence_getProxyDir, (setter)Sequence_setProxyDir,
+        "Sequence proxy directory",
+         NULL},
        {"ipo",
         (getter)Sequence_getIpo, (setter)Sequence_setIpo,
         "Sequence ipo",
@@ -814,10 +887,30 @@
         (getter)getFlagAttr, (setter)setFlagAttr,
         "",
         (void *)SEQ_FILTERY},
+       {"flipX",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "",
+        (void *)SEQ_FLIPX},
+       {"flipY",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "",
+        (void *)SEQ_FLIPY},
        {"mute",
         (getter)getFlagAttr, (setter)setFlagAttr,
         "",
         (void *)SEQ_MUTE},
+       {"floatBuffer",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "",
+        (void *)SEQ_MAKE_FLOAT},
+       {"lock",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "",
+        (void *)SEQ_LOCK},
+       {"useProxy",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "",
+        (void *)SEQ_USE_PROXY},
        {"premul",
         (getter)getFlagAttr, (setter)setFlagAttr,
         "",
@@ -830,10 +923,6 @@
         (getter)getFlagAttr, (setter)setFlagAttr,
         "",
         (void *)SEQ_IPO_FRAME_LOCKED},
-       {"ipoLocked",
-        (getter)getFlagAttr, (setter)setFlagAttr,
-        "",
-        (void *)SEQ_IPO_FRAME_LOCKED},
         
        {NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to