[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