[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12999] trunk/blender/source/blender: == Sequencer ==
Peter Schlaile
peter at schlaile.de
Tue Dec 25 21:31:07 CET 2007
Revision: 12999
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12999
Author: schlaile
Date: 2007-12-25 21:31:07 +0100 (Tue, 25 Dec 2007)
Log Message:
-----------
== Sequencer ==
* Make Lock flag work for metastrips
* Fixes: flags are cleared on exit of metastrips
* Fixes (hopefully): red picture on big endian
Modified Paths:
--------------
trunk/blender/source/blender/imbuf/intern/anim.c
trunk/blender/source/blender/include/BSE_sequence.h
trunk/blender/source/blender/src/editseq.c
trunk/blender/source/blender/src/sequence.c
Modified: trunk/blender/source/blender/imbuf/intern/anim.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/anim.c 2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/imbuf/intern/anim.c 2007-12-25 20:31:07 UTC (rev 12999)
@@ -721,6 +721,7 @@
dst[0] + (anim->y - 1)*dstStride[0],
0, 0, 0 };
int i;
+ unsigned char* r;
sws_scale(anim->img_convert_ctx,
anim->pFrame->data,
@@ -731,8 +732,12 @@
dstStride2);
/* workaround: sws_scale sets alpha = 0... */
+
+ r = (unsigned char*) ibuf->rect;
+
for (i = 0; i < ibuf->x * ibuf->y; i++) {
- ibuf->rect[i] |= 0xff000000;
+ r[3] = 0xff;
+ r+=4;
}
av_free_packet(&packet);
Modified: trunk/blender/source/blender/include/BSE_sequence.h
===================================================================
--- trunk/blender/source/blender/include/BSE_sequence.h 2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/include/BSE_sequence.h 2007-12-25 20:31:07 UTC (rev 12999)
@@ -50,6 +50,13 @@
void new_tstripdata(struct Sequence *seq);
void free_sequence(struct Sequence *seq);
void build_seqar(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq);
+
+#define BUILD_SEQAR_COUNT_NOTHING 0
+#define BUILD_SEQAR_COUNT_CURRENT 1
+#define BUILD_SEQAR_COUNT_CHILDREN 2
+
+void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar,
+ int *totseq, int (*test_func)(struct Sequence * seq));
void free_editing(struct Editing *ed);
void calc_sequence(struct Sequence *seq);
void calc_sequence_disp(struct Sequence *seq);
Modified: trunk/blender/source/blender/src/editseq.c
===================================================================
--- trunk/blender/source/blender/src/editseq.c 2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/src/editseq.c 2007-12-25 20:31:07 UTC (rev 12999)
@@ -2269,8 +2269,8 @@
seqn = dupli_seq(seq);
if (seqn) { /*should never fail */
seq->flag &= SEQ_DESEL;
- seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL);
-
+ seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
+
BLI_addtail(new, seqn);
if(seq->type==SEQ_META)
recurs_dupli_seq(&seq->seqbase,&seqn->seqbase);
@@ -2619,7 +2619,7 @@
}
seq= seq->next;
}
- if(tot < 2) return;
+ if(tot < 1) return;
if(okee("Make Meta Strip")==0) return;
@@ -2763,7 +2763,7 @@
set_last_seq(ms->parseq);
- ms->parseq->flag= SELECT;
+ ms->parseq->flag |= SELECT;
recurs_sel_seq(ms->parseq);
MEM_freeN(ms);
@@ -2859,6 +2859,21 @@
}
}
+static int can_transform_seq_test_func(Sequence * seq)
+{
+ if((seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) {
+ return BUILD_SEQAR_COUNT_CURRENT | BUILD_SEQAR_COUNT_CHILDREN;
+ }
+ if ((seq->flag & SEQ_LOCK) && !(seq->type & SEQ_EFFECT)) {
+ if (seq->type != SEQ_META) {
+ return BUILD_SEQAR_COUNT_NOTHING;
+ } else {
+ return BUILD_SEQAR_COUNT_CURRENT;
+ }
+ }
+ return BUILD_SEQAR_COUNT_CURRENT | BUILD_SEQAR_COUNT_CHILDREN;
+}
+
void transform_seq(int mode, int context)
{
SpaceSeq *sseq= curarea->spacedata.first;
@@ -2903,7 +2918,8 @@
if(ed==0) return;
/* Build the sequence array once, be sure to free it */
- build_seqar( ed->seqbasep, &seqar, &totseq_index );
+ build_seqar_cb( ed->seqbasep, &seqar, &totseq_index,
+ can_transform_seq_test_func );
if (seqar) {
for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
@@ -2922,7 +2938,7 @@
if(seqar) MEM_freeN(seqar);
return;
}
-
+
G.moving= 1;
last_seq = get_last_seq();
@@ -3116,7 +3132,7 @@
if (mode=='g' && !snapskip) {
/* Grab */
for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
- if(seq->flag & SELECT) {
+ if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
int myofs;
// SEQ_DEBUG_INFO(seq);
@@ -3168,7 +3184,7 @@
/* Extend, Similar to grab but operate on one side of the cursor */
for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
- if(seq->flag & SELECT) {
+ if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
/* only move the contents of the metastrip otherwise the transformation is applied twice */
if (sequence_is_free_transformable(seq) && seq->type != SEQ_META) {
@@ -3280,7 +3296,7 @@
/* test for effect and overlap */
for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
- if(seq->flag & SELECT) {
+ if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
seq->flag &= ~SEQ_OVERLAP;
if( test_overlap_seq(seq) ) {
seq->flag |= SEQ_OVERLAP;
@@ -3329,7 +3345,7 @@
ts= transmain;
for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
- if(seq->flag & SELECT) {
+ if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
seq->start= ts->start;
seq->machine= ts->machine;
seq->startstill= ts->startstill;
Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c 2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/src/sequence.c 2007-12-25 20:31:07 UTC (rev 12999)
@@ -211,6 +211,66 @@
*seqar= tseqar;
}
+static void do_seq_count_cb(ListBase *seqbase, int *totseq,
+ int (*test_func)(Sequence * seq))
+{
+ Sequence *seq;
+
+ seq= seqbase->first;
+ while(seq) {
+ int test = test_func(seq);
+ if (test & BUILD_SEQAR_COUNT_CURRENT) {
+ (*totseq)++;
+ }
+ if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) {
+ do_seq_count_cb(&seq->seqbase, totseq, test_func);
+ }
+ seq= seq->next;
+ }
+}
+
+static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth,
+ int (*test_func)(Sequence * seq))
+{
+ Sequence *seq;
+
+ seq= seqbase->first;
+ while(seq) {
+ int test = test_func(seq);
+ seq->depth= depth;
+
+ if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) {
+ do_build_seqar_cb(&seq->seqbase, seqar, depth+1,
+ test_func);
+ }
+ if (test & BUILD_SEQAR_COUNT_CURRENT) {
+ **seqar= seq;
+ (*seqar)++;
+ }
+ seq= seq->next;
+ }
+}
+
+void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq,
+ int (*test_func)(Sequence * seq))
+{
+ Sequence **tseqar;
+
+ *totseq= 0;
+ do_seq_count_cb(seqbase, totseq, test_func);
+
+ if(*totseq==0) {
+ *seqar= 0;
+ return;
+ }
+ *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar");
+ tseqar= *seqar;
+
+ do_build_seqar_cb(seqbase, seqar, 0, test_func);
+ *seqar= tseqar;
+}
+
+
void free_editing(Editing *ed)
{
MetaStack *ms;
More information about the Bf-blender-cvs
mailing list