[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58560] branches/soc-2013-vse/source/ blender/sequencer: Better reorganization of sequencer (c++).
Alexander Kuznetsov
kuzsasha at gmail.com
Wed Jul 24 06:49:27 CEST 2013
Revision: 58560
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58560
Author: alexk
Date: 2013-07-24 04:49:26 +0000 (Wed, 24 Jul 2013)
Log Message:
-----------
Better reorganization of sequencer (c++). seqBucket and other stuff
Also backporting some functionality due to few previous bugs. Tomorrow I should finish.
Modified Paths:
--------------
branches/soc-2013-vse/source/blender/sequencer/sequencer_common.h
branches/soc-2013-vse/source/blender/sequencer/sequencer_main.cpp
branches/soc-2013-vse/source/blender/sequencer/sequencer_main.h
Modified: branches/soc-2013-vse/source/blender/sequencer/sequencer_common.h
===================================================================
--- branches/soc-2013-vse/source/blender/sequencer/sequencer_common.h 2013-07-24 03:28:44 UTC (rev 58559)
+++ branches/soc-2013-vse/source/blender/sequencer/sequencer_common.h 2013-07-24 04:49:26 UTC (rev 58560)
@@ -4,25 +4,40 @@
#include <vector>
+
+#include "pthread.h"
#include "sequencer_main.h"
+#include "MEM_guardedalloc.h"
typedef struct seqFrame seqFrame;
class seq_CommandBase;
+class seqBucket;
-typedef struct seqBucket
+
+typedef struct seqBucket_deplist
{
+ seqBucket *buck;
+ uint dataid;
- struct seqBucket *next, *prev;
+} seqBucket_deplist;
+class seqBucket
+{
+
+public:
+
+ seqBucket *next, *prev;
+
+
uint bid;
@@ -46,27 +61,66 @@
seqBucket_deplist * dl;
- size_t imagest_num;
- seqImageStackInfo *ImStack;
+// size_t imagest_num;
+// seqImageStackInfo *ImStack;
+
+
seqImageStorage firstImgOutput;
seqImageStorage *internalImg;
void *commands;
-
+std::vector<seqImageStackInfo> ImStack_cpp;
std::vector<seq_CommandBase*> commands_cpp;
+ seqBucket(void)
+ {
+ pthread_mutex_init(&this->bucket_mutex, NULL);
+ }
-} seqBucket;
+ void Retain(void)
+ {
+ pthread_mutex_lock(&this->bucket_mutex);
+ this->refcount++;
+ pthread_mutex_unlock(&this->bucket_mutex);
+ }
+ void Rlease(void)
+ {
+ seq_bucket_ref_dec(0, this);
+ }
+ void init(seqEngine *se, seqFrame *frm)
+ {
+
+ seq_bucket_ref_init(se, frm, this);
+
+ }
+
+
+
+
+
+
+ MEM_CXX_CLASS_ALLOC_FUNCS("seqBucket");
+
+
+
+
+};
+
+
+
+
+
+
typedef enum seqOutput_Type
{
SEQ_OUTPUT_TYPE_IMAGE = 1,
@@ -79,6 +133,8 @@
{
public:
seqOutput_Type type;
+
+ int channel;
} ;
Modified: branches/soc-2013-vse/source/blender/sequencer/sequencer_main.cpp
===================================================================
--- branches/soc-2013-vse/source/blender/sequencer/sequencer_main.cpp 2013-07-24 03:28:44 UTC (rev 58559)
+++ branches/soc-2013-vse/source/blender/sequencer/sequencer_main.cpp 2013-07-24 04:49:26 UTC (rev 58560)
@@ -17,6 +17,7 @@
#include "IMB_imbuf_types.h"
#include "IMB_colormanagement.h"
+#include "DNA_sequence_types.h"
#ifdef __cplusplus
}
@@ -32,6 +33,7 @@
#include "sequencer_bucket.h"
#include "sequencer_common.h"
+#include "sequencer_effect.h"
@@ -82,6 +84,7 @@
void seqFilter_cpu_GenTestImage(seqBucket * bucket, seqFilter_GenTestImage *filt)
{
+ /*
uint size[2];
uint i, j;
@@ -112,7 +115,7 @@
}
}
-
+*/
}
@@ -123,7 +126,7 @@
void seqFilter_cpu_BrightnessContrast(seqBucket * bucket, seqFilter_BrightnessContrast *filt)
{
-
+/*
uint size[2];
uint i;
@@ -154,10 +157,10 @@
rio[i+3] = rii[i+3];
}
+*/
-
/* glColor4f(1.0, 1.0, 1.0, 1.0);
glEnable(GL_TEXTURE_2D);
@@ -237,11 +240,12 @@
}
- if(bucket->ImStack) MEM_freeN(bucket->ImStack);
+ //if(bucket->ImStack) MEM_freeN(bucket->ImStack);
if(bucket->dl) MEM_freeN(bucket->dl);
//if(bucket->commands_cpp) delete;
bucket->commands_cpp.clear();
+ bucket->ImStack_cpp.clear();
@@ -299,7 +303,7 @@
void seq_prepare_bucket_cl(seqDeviceCL * devcl, seqBucket * bucket)
{
- uint *commands= (uint *)bucket->commands;
+/* uint *commands= (uint *)bucket->commands;
int stop = 0;
int err;
@@ -309,7 +313,8 @@
for(i = 0; i<bucket->imagest_num; i++)
{
- bucket->internalImg[i].gi = bucket->ImStack[i];
+ //bucket->internalImg[i].gi = bucket->ImStack[i];
+ bucket->internalImg[i].gi = bucket->ImStack_cpp[i];
}
for(i = 0; i < bucket->dl_num; i++)
@@ -344,10 +349,10 @@
ci->pointer = NULL;
-
+*/
/* after we copied, decrease counter */
+/*
-
seq_bucket_ref_dec(depbucket->device_associated->gen.se, depbucket);
@@ -363,6 +368,7 @@
}
}
+ */
}
@@ -371,13 +377,13 @@
{
int i;
- bucket->internalImg = (seqImageStorage*)MEM_callocN(sizeof(seqImageStorage)*bucket->imagest_num, "internalImg");
+ bucket->internalImg = (seqImageStorage*)MEM_callocN(sizeof(seqImageStorage)*bucket->ImStack_cpp.size(), "internalImg");
- for(i = 0; i < bucket->imagest_num; i++)
+ for(i = 0; i < bucket->ImStack_cpp.size(); i++)
{
- bucket->internalImg[i].gi = bucket->ImStack[i];
+ bucket->internalImg[i].gi = bucket->ImStack_cpp[i];
+ //bucket->internalImg[i].gi = bucket->ImStack[i];
-
}
for(i = 0; i < bucket->dl_num; i++)
@@ -514,14 +520,23 @@
cbuck = new seqBucket;
- pthread_mutex_init(&cbuck->bucket_mutex, NULL);
+ //pthread_mutex_init(&cbuck->bucket_mutex, NULL);
cbuck->bid = 0;
- cbuck->imagest_num = 1;
- cbuck->ImStack = (seqImageStackInfo*)MEM_callocN(sizeof(seqImageStackInfo)*1, "seqImageStackInfo");
+ //cbuck->imagest_num = 1;
+ /*cbuck->ImStack = (seqImageStackInfo*)MEM_callocN(sizeof(seqImageStackInfo)*1, "seqImageStackInfo");
cbuck->ImStack[0].format = SEQ_ING_FORMAT_RGBA;
cbuck->ImStack[0].size[0] = foimg->size[0];
- cbuck->ImStack[0].size[1] = foimg->size[1];
+ cbuck->ImStack[0].size[1] = foimg->size[1];*/
+
+ seqImageStackInfo ti;
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = foimg->size[0];
+ ti.size[1] = foimg->size[1];
+
+
+ cbuck->ImStack_cpp.push_back(ti);
+
cbuck->foi = foimg;
cbuck->dl = NULL;
@@ -619,11 +634,11 @@
{
cbuck = new seqBucket;
- pthread_mutex_init(&cbuck->bucket_mutex, NULL);
+ //pthread_mutex_init(&cbuck->bucket_mutex, NULL);
cbuck->bid = 1;
- cbuck->imagest_num = 2;
- cbuck->ImStack = (seqImageStackInfo*)MEM_callocN(sizeof(seqImageStackInfo)*
+ //cbuck->imagest_num = 2;
+ /*cbuck->ImStack = (seqImageStackInfo*)MEM_callocN(sizeof(seqImageStackInfo)*
cbuck->imagest_num, "seqImageStackInfo");
@@ -633,8 +648,24 @@
cbuck->ImStack[1].format = SEQ_ING_FORMAT_RGBA;
cbuck->ImStack[1].size[0] = foimg->size[0];
- cbuck->ImStack[1].size[1] = foimg->size[1];
+ cbuck->ImStack[1].size[1] = foimg->size[1];*/
+
+ seqImageStackInfo ti;
+
+
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = foimg->size[0];
+ ti.size[1] = foimg->size[1];
+ cbuck->ImStack_cpp.push_back(ti);
+
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = foimg->size[0];
+ ti.size[1] = foimg->size[1];
+ cbuck->ImStack_cpp.push_back(ti);
+
+
+
cbuck->dl_num = 1;
cbuck->dl = (seqBucket_deplist*)MEM_mallocN(sizeof(seqBucket_deplist)*
cbuck->dl_num,
@@ -912,10 +943,201 @@
+void SEQ_sequence_effect_create(Sequence *s)
+{
+ if(!s)
+ return;
-void SEQ_display_frame(int cframe, SeqRenderNode *rtree)
+ if(!s->cpp_effect)
+ {
+ seq_seqEffect** effect = (seq_seqEffect**)&s->cpp_effect;
+
+ switch(s->type)
+ {
+ case SEQ_TYPE_MOVIE:
+ {
+ *effect = new seq_seqEffectGenerate;
+ break;
+ }
+
+ case SEQ_TYPE_GLOW:
+ {
+ *effect = new seq_seqEffectBrightness;
+ break;
+ }
+ case SEQ_TYPE_ADD:
+ {
+ *effect = new seq_seqEffectAdd;
+ break;
+ }
+
+ default:
+ BLI_assert(0);
+
+
+
+
+ }
+
+
+
+
+ }
+
+
+
+}
+
+
+
+void SEQ_generate_effects(SeqRenderNode *rtree)
{
+ if(!rtree)
+ return;
+
+ SEQ_sequence_effect_create(rtree->data);
+ SEQ_generate_effects(rtree->input_low);
+ SEQ_generate_effects(rtree->input_high);
+
+
+
+}
+
+
+seqBucket *createBucketFromTree(SeqRenderNode *rtree, seqOutputImage *out, int type, SeqCanvasInfo *canvas)
+{
+ seqBucket *b = new seqBucket;
+
+ seqImageStackInfo ti;
+
+
+ int sop;
+
+
+ seq_seqEffect *efff = (seq_seqEffect*)rtree->data->cpp_effect;//rtree->data->type; CHANGE
+
+
+ int num_inp = efff->get_num_inputs();
+
+ b->foi = out;
+
+ b->dl_num = 0;
+ b->dl = (seqBucket_deplist*)MEM_mallocN(sizeof(seqBucket_deplist)*num_inp, "dl");
+
+
+
+
+
+
+
+
+
+
+ if(num_inp >= 1 && rtree->input_low)
+ {
+
+ seqBucket *lb = createBucketFromTree(rtree->input_low, out, type, canvas);
+
+ b->dl[0].buck = lb;
+ b->dl[0].dataid = 0;
+ b->dl_num = 1;
+
+
+
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = canvas->memory_size[0];
+ ti.size[1] = canvas->memory_size[1];
+
+ b->ImStack_cpp.push_back(ti);
+
+
+
+
+ if(num_inp >= 2 && rtree->input_high)
+ {
+ seqBucket *hb = createBucketFromTree(rtree->input_low, out, type, canvas);
+
+ b->dl[1].buck = lb;
+ b->dl[1].dataid = 1;
+ b->dl_num = 2;
+
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = canvas->memory_size[0];
+ ti.size[1] = canvas->memory_size[1];
+
+ b->ImStack_cpp.push_back(ti);
+
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ if(b->dl_num != num_inp)
+ {
+ BLI_assert(0);
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ ti.format = SEQ_ING_FORMAT_RGBA;
+ ti.size[0] = canvas->memory_size[0];
+ ti.size[1] = canvas->memory_size[1];
+
+
+
+ sop = efff->gen_command_for_bucket(b, canvas, rtree->data->effectdata, b->dl_num>0?0:-1, b->dl_num>1?1:-1);
+
+
+
+
+ out->buckets_cpp.push_back(b);
+
+
+
+ return b;
+
+
+
+}
+
+
+void SEQ_generate_instruction(SeqRenderNode *rtree, seqOutputImage *out, int type, SeqCanvasInfo *canvas)
+{
+ createBucketFromTree(rtree, out, type, canvas);
+
+
+
+
+
+}
+
+
+void SEQ_display_frame(int cframe, SeqRenderNode *rtree, SeqCanvasInfo *canvas)
+{
+
seqFrame *selframe;
seqFrame *nextframe;
seqFrame *curframe = 0;
@@ -924,9 +1146,14 @@
SEQ_seqEngine_start(&seqeng);
+ SEQ_generate_effects(rtree);
+ seqOutputImage out;
+ SEQ_generate_instruction(rtree, &out, 0, canvas);
+
+
mainplayseq.frame_current = cframe;
mainplayseq.frame_last = mainplayseq.frame_current+3;
Modified: branches/soc-2013-vse/source/blender/sequencer/sequencer_main.h
===================================================================
--- branches/soc-2013-vse/source/blender/sequencer/sequencer_main.h 2013-07-24 03:28:44 UTC (rev 58559)
+++ branches/soc-2013-vse/source/blender/sequencer/sequencer_main.h 2013-07-24 04:49:26 UTC (rev 58560)
@@ -16,14 +16,12 @@
typedef struct seqCLPlatform seqCLPlatform;
typedef struct seqEngine seqEngine;
-typedef struct seqBucket seqBucket;
-
#define SEQ_KER_TYPE_CHAR (0)
#define SEQ_KER_TYPE_HALFFLOAT (1)
#define SEQ_KER_TYPE_FLOAT (2)
@@ -84,18 +82,10 @@
-typedef struct seqBucket_deplist
-{
- struct seqBucket *buck;
- uint dataid;
-} seqBucket_deplist;
-
-
-
typedef enum seqImageFormat
{
SEQ_ING_FORMAT_RGBA = 1
@@ -310,7 +300,7 @@
struct SeqRenderNode *input_low, *input_high;
- seqBucket *bucketref;
+ //seqBucket *bucketref;
int count;
@@ -330,13 +320,23 @@
+typedef struct SeqCanvasInfo
+{
+ int memory_size[2];
+ float real_size[2];
-void SEQ_display_frame(int cframe, SeqRenderNode *rtree);
+} SeqCanvasInfo;
+
+
+
+
+
+void SEQ_display_frame(int cframe, SeqRenderNode *rtree, SeqCanvasInfo *canvas);
void SEQ_seqEngine_start(seqEngine *engine/*cldm param,*/);
void SEQ_Engine_exit(void);
More information about the Bf-blender-cvs
mailing list