Page MenuHome

VFX & VideoProject
ActivePublic

Details

Description

This project includes the video sequencer, compositor, motion tracking, Libmv, audio and more.

Important links

Contacts

Sub-Modules:


Long-Term Roadmap

VFX & Video Roadmap

Recent Activity

Today

Richard Antalik (ISS) changed the status of T88073: (Video editing) Different audio/video lenght after import strip from Needs Information from Developers to Confirmed.

This can happen when movie framerate is different to scene framerate, or if movie has variable framerate.
Judging from movie metadata, that is what is happening, but without example I can't tell for sure.

Sun, May 9, 3:04 AM · Video Sequencer, VFX & Video, BF Blender
Richard Antalik (ISS) updated the summary of D10209: Better handling of effect strip splitting.
Sun, May 9, 2:51 AM · VFX & Video, Video Sequencer
Richard Antalik (ISS) updated the diff for D10209: Better handling of effect strip splitting.

Use iterator to get effect chain of strip that has to be split.

Sun, May 9, 2:51 AM · VFX & Video, Video Sequencer

Fri, May 7

Germano Cavalcante (mano-wii) changed the status of T88073: (Video editing) Different audio/video lenght after import strip from Needs Triage to Needs Information from Developers.

As the report has no steps to reproduce the bug, it cannot be confirmed as valid.
But maybe it is a common problem?
I'll let the VFX & Video team decide.

Fri, May 7, 8:33 PM · Video Sequencer, VFX & Video, BF Blender
Bastien Montagne (mont29) moved T87044: rendered video from VSE could not be played with VLC from Backlog to bcon3: Bugs on the BF Blender (2.93) board.
Fri, May 7, 6:45 PM · BF Blender (2.93), Video Sequencer, VFX & Video
Campbell Barton (campbellbarton) added a comment to T81751: Poor playback performance with large float images in the animation-player.

This issue should be largely resolved:

Fri, May 7, 3:11 PM · VFX & Video, BF Blender
Sergey Sharybin (sergey) closed T88100: Crash going to shading tab (probably elsewhere, too) as Resolved by committing rB23acca0c3202: Fix T88100: Crash going to shading tab.
Fri, May 7, 12:45 PM · Video Sequencer, VFX & Video, BF Blender
Philipp Oeser (lichtwerk) updated subscribers of T88100: Crash going to shading tab (probably elsewhere, too).

@Richard Antalik (ISS): can you check this?

Fri, May 7, 12:32 PM · Video Sequencer, VFX & Video, BF Blender
Philipp Oeser (lichtwerk) changed the status of T88100: Crash going to shading tab (probably elsewhere, too) from Needs Triage to Confirmed.
Fri, May 7, 12:30 PM · Video Sequencer, VFX & Video, BF Blender
Richard Antalik (ISS) closed T81751: Poor playback performance with large float images in the animation-player as Resolved by committing rBfd3e44492e76: Fix T81751: Use GLSL for better anim player performance.
Fri, May 7, 10:03 AM · VFX & Video, BF Blender
Duarte Farrajota Ramos (duarteframos) added a comment to T74355: Selecting (or connecting) nodes in Compositor is malfunctioning when when monitors have different dpi.

This seems to be similar or the same underlying issue as

Fri, May 7, 12:38 AM · VFX & Video, Nodes, User Interface, BF Blender

Thu, May 6

Evan Wilson (EAW) added a project to T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output: Images & Movies.
Thu, May 6, 11:03 PM · Images & Movies, VFX & Video, BF Blender, Compositing
Evan Wilson (EAW) added a project to T88049: Cryptomatte EXR Output Bit Depth should always be 32bit.: Images & Movies.
Thu, May 6, 11:02 PM · Images & Movies, Render & Cycles, Compositing, VFX & Video, BF Blender
Jesse Y (deadpin) added projects to D11009: Fix T70356: ImBuf upscaling fails if original width or height are 1: Sculpt, Paint & Texture, Images & Movies.

Adding tags to match the original bug.

Thu, May 6, 8:51 PM · Images & Movies, Sculpt, Paint & Texture, VFX & Video
Falk David (filedescriptor) closed T87983: Motion tracker tooltips identical for different buttons as Resolved by committing rBb24b197cec04: Fix T87983: Motion tracker button tooltips identical.
Thu, May 6, 11:01 AM · BF Blender (2.93), VFX & Video, Motion Tracking
Richard Antalik (ISS) added a comment to D10209: Better handling of effect strip splitting.

Alternative version based on new iterator:

1diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
2index 9c204373ffc..e215041b374 100644
3--- a/source/blender/editors/space_sequencer/sequencer_edit.c
4+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
5@@ -1570,52 +1570,41 @@ void SEQUENCER_OT_split(struct wmOperatorType *ot)
6
7 RNA_def_property_flag(prop, PROP_HIDDEN);
8 }
9
10 /** \} */
11
12 /* -------------------------------------------------------------------- */
13 /** \name Duplicate Strips Operator
14 * \{ */
15
16-static int apply_unique_name_fn(Sequence *seq, void *arg_pt)
17-{
18- Scene *scene = (Scene *)arg_pt;
19- char name[sizeof(seq->name) - 2];
20-
21- BLI_strncpy_utf8(name, seq->name + 2, sizeof(name));
22- SEQ_sequence_base_unique_name_recursive(&scene->ed->seqbase, seq);
23- SEQ_dupe_animdata(scene, name, seq->name + 2);
24- return 1;
25-}
26-
27 static int sequencer_add_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
28 {
29 Scene *scene = CTX_data_scene(C);
30 Editing *ed = SEQ_editing_get(scene, false);
31
32 ListBase nseqbase = {NULL, NULL};
33
34 if (ed == NULL) {
35 return OPERATOR_CANCELLED;
36 }
37
38 SEQ_sequence_base_dupli_recursive(scene, scene, &nseqbase, ed->seqbasep, SEQ_DUPE_CONTEXT, 0);
39
40 if (nseqbase.first) {
41 Sequence *seq = nseqbase.first;
42 /* Rely on the nseqbase list being added at the end.
43 * Their UUIDs has been re-generated by the SEQ_sequence_base_dupli_recursive(), */
44 BLI_movelisttolist(ed->seqbasep, &nseqbase);
45
46 for (; seq; seq = seq->next) {
47- SEQ_recursive_apply(seq, apply_unique_name_fn, scene);
48+ SEQ_recursive_apply(seq, SEQ_apply_unique_name_fn, scene);
49 }
50
51 WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
52 return OPERATOR_FINISHED;
53 }
54
55 return OPERATOR_CANCELLED;
56 }
57
58 void SEQUENCER_OT_duplicate(wmOperatorType *ot)
59@@ -2458,21 +2447,21 @@ static int sequencer_paste_exec(bContext *C, wmOperator *op)
60 SEQ_clipboard_pointers_store(bmain, &seqbase_clipboard);
61
62 iseq_first = nseqbase.first;
63
64 /* NOTE: SEQ_sequence_base_dupli_recursive() takes care of generating new UUIDs for sequences
65 * in the new list. */
66 BLI_movelisttolist(ed->seqbasep, &nseqbase);
67
68 for (iseq = iseq_first; iseq; iseq = iseq->next) {
69 /* Make sure, that pasted strips have unique names. */
70- SEQ_recursive_apply(iseq, apply_unique_name_fn, scene);
71+ SEQ_recursive_apply(iseq, SEQ_apply_unique_name_fn, scene);
72 /* Translate after name has been changed, otherwise this will affect animdata of original
73 * strip. */
74 SEQ_transform_translate_sequence(scene, iseq, ofs);
75 /* Ensure, that pasted strips don't overlap. */
76 if (SEQ_transform_test_overlap(ed->seqbasep, iseq)) {
77 SEQ_transform_seqbase_shuffle(ed->seqbasep, iseq, scene);
78 }
79 }
80
81 DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
82diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
83index 0eaf8cc02ea..2fbf96419ba 100644
84--- a/source/blender/editors/space_sequencer/sequencer_select.c
85+++ b/source/blender/editors/space_sequencer/sequencer_select.c
86@@ -1614,51 +1614,20 @@ static bool select_grouped_time_overlap(Editing *ed, Sequence *actseq)
87 LISTBASE_FOREACH (Sequence *, seq, SEQ_active_seqbase_get(ed)) {
88 if (seq->startdisp < actseq->enddisp && seq->enddisp > actseq->startdisp) {
89 seq->flag |= SELECT;
90 changed = true;
91 }
92 }
93
94 return changed;
95 }
96
97-/* Query all effect strips that are directly or indirectly connected to seq_reference. */
98-void query_strip_effect_chain(Sequence *seq_reference,
99- ListBase *seqbase,
100- SeqCollection *collection)
101-{
102- if (!SEQ_collection_append_strip(seq_reference, collection)) {
103- return; /* Strip is already in set, so all effects connected to it are as well. */
104- }
105-
106- /* Find all strips that seq_reference is connected to. */
107- if (seq_reference->type & SEQ_TYPE_EFFECT) {
108- if (seq_reference->seq1) {
109- query_strip_effect_chain(seq_reference->seq1, seqbase, collection);
110- }
111- if (seq_reference->seq2) {
112- query_strip_effect_chain(seq_reference->seq2, seqbase, collection);
113- }
114- if (seq_reference->seq3) {
115- query_strip_effect_chain(seq_reference->seq3, seqbase, collection);
116- }
117- }
118-
119- /* Find all strips connected to seq_reference. */
120- LISTBASE_FOREACH (Sequence *, seq_test, seqbase) {
121- if (seq_test->seq1 == seq_reference || seq_test->seq2 == seq_reference ||
122- seq_test->seq3 == seq_reference) {
123- query_strip_effect_chain(seq_test, seqbase, collection);
124- }
125- }
126-}
127-
128 /* Query strips that are in lower channel and intersect in time with seq_reference. */
129 static void query_lower_channel_strips(Sequence *seq_reference,
130 ListBase *seqbase,
131 SeqCollection *collection)
132 {
133 LISTBASE_FOREACH (Sequence *, seq_test, seqbase) {
134 if (seq_test->machine > seq_reference->machine) {
135 continue; /* Not lower channel. */
136 }
137 if (seq_test->enddisp <= seq_reference->startdisp ||
138@@ -1672,21 +1641,21 @@ static void query_lower_channel_strips(Sequence *seq_reference,
139 /* Select all strips within time range and with lower channel of initial selection. Then select
140 * effect chains of these strips. */
141 static bool select_grouped_effect_link(Editing *ed, Sequence *actseq, const int channel)
142 {
143 ListBase *seqbase = SEQ_active_seqbase_get(ed);
144
145 /* Get collection of strips. */
146 SeqCollection *collection = SEQ_query_selected_strips(seqbase);
147 const int selected_strip_count = BLI_gset_len(collection->set);
148 SEQ_collection_expand(seqbase, collection, query_lower_channel_strips);
149- SEQ_collection_expand(seqbase, collection, query_strip_effect_chain);
150+ SEQ_collection_expand(seqbase, collection, SEQ_query_strip_effect_chain);
151
152 /* Check if other strips will be affected. */
153 const bool changed = BLI_gset_len(collection->set) > selected_strip_count;
154
155 /* Actual logic. */
156 SEQ_ITERATOR_FOREACH (seq, collection) {
157 seq->flag |= SELECT;
158 }
159 SEQ_collection_free(collection);
160
161diff --git a/source/blender/sequencer/SEQ_iterator.h b/source/blender/sequencer/SEQ_iterator.h
162index ac1d958add5..a440cc0744b 100644
163--- a/source/blender/sequencer/SEQ_iterator.h
164+++ b/source/blender/sequencer/SEQ_iterator.h
165@@ -72,14 +72,17 @@ void SEQ_collection_expand(struct ListBase *seqbase,
166 void query_func(struct Sequence *seq_reference,
167 struct ListBase *seqbase,
168 SeqCollection *collection));
169 SeqCollection *SEQ_reference_query(struct Sequence *seq_reference,
170 struct ListBase *seqbase,
171 void seq_query_func(struct Sequence *seq_reference,
172 struct ListBase *seqbase,
173 SeqCollection *collection));
174 SeqCollection *SEQ_query_selected_strips(struct ListBase *seqbase);
175 SeqCollection *SEQ_query_all_strips_recursive(ListBase *seqbase);
176+void SEQ_query_strip_effect_chain(struct Sequence *seq_reference,
177+ struct ListBase *seqbase,
178+ SeqCollection *collection);
179
180 #ifdef __cplusplus
181 }
182 #endif
183diff --git a/source/blender/sequencer/SEQ_utils.h b/source/blender/sequencer/SEQ_utils.h
184index 52fac5d7d0e..51d63d365f0 100644
185--- a/source/blender/sequencer/SEQ_utils.h
186+++ b/source/blender/sequencer/SEQ_utils.h
187@@ -53,13 +53,14 @@ void SEQ_set_scale_to_fit(const struct Sequence *seq,
188 const int image_height,
189 const int preview_width,
190 const int preview_height,
191 const eSeqImageFitMethod fit_method);
192 int SEQ_seqbase_recursive_apply(struct ListBase *seqbase,
193 int (*apply_fn)(struct Sequence *seq, void *),
194 void *arg);
195 int SEQ_recursive_apply(struct Sequence *seq,
196 int (*apply_fn)(struct Sequence *, void *),
197 void *arg);
198+int SEQ_apply_unique_name_fn(struct Sequence *seq, void *arg_pt);
199 #ifdef __cplusplus
200 }
201 #endif
202diff --git a/source/blender/sequencer/intern/iterator.c b/source/blender/sequencer/intern/iterator.c
203index ab34be2bfd8..305e7e2528a 100644
204--- a/source/blender/sequencer/intern/iterator.c
205+++ b/source/blender/sequencer/intern/iterator.c
206@@ -173,10 +173,47 @@ SeqCollection *SEQ_query_selected_strips(ListBase *seqbase)
207 {
208 SeqCollection *collection = SEQ_collection_create();
209 LISTBASE_FOREACH (Sequence *, seq, seqbase) {
210 if ((seq->flag & SELECT) == 0) {
211 continue;
212 }
213 SEQ_collection_append_strip(seq, collection);
214 }
215 return collection;
216 }
217+
218+/**
219+ * Query all effect strips that are directly or indirectly connected to seq_reference.
220+ *
221+ * \param seq_reference: reference strip
222+ * \param seqbase: ListBase in which strips are queried
223+ * \param collection: collection to be filled
224+ */
225+void SEQ_query_strip_effect_chain(Sequence *seq_reference,
226+ ListBase *seqbase,
227+ SeqCollection *collection)
228+{
229+ if (!SEQ_collection_append_strip(seq_reference, collection)) {
230+ return; /* Strip is already in set, so all effects connected to it are as well. */
231+ }
232+
233+ /* Find all strips that seq_reference is connected to. */
234+ if (seq_reference->type & SEQ_TYPE_EFFECT) {
235+ if (seq_reference->seq1) {
236+ SEQ_query_strip_effect_chain(seq_reference->seq1, seqbase, collection);
237+ }
238+ if (seq_reference->seq2) {
239+ SEQ_query_strip_effect_chain(seq_reference->seq2, seqbase, collection);
240+ }
241+ if (seq_reference->seq3) {
242+ SEQ_query_strip_effect_chain(seq_reference->seq3, seqbase, collection);
243+ }
244+ }
245+
246+ /* Find all strips connected to seq_reference. */
247+ LISTBASE_FOREACH (Sequence *, seq_test, seqbase) {
248+ if (seq_test->seq1 == seq_reference || seq_test->seq2 == seq_reference ||
249+ seq_test->seq3 == seq_reference) {
250+ SEQ_query_strip_effect_chain(seq_test, seqbase, collection);
251+ }
252+ }
253+}
254diff --git a/source/blender/sequencer/intern/strip_edit.c b/source/blender/sequencer/intern/strip_edit.c
255index 4a27fb3a087..1cbc1c219fe 100644
256--- a/source/blender/sequencer/intern/strip_edit.c
257+++ b/source/blender/sequencer/intern/strip_edit.c
258@@ -32,24 +32,26 @@
259 #include "BLI_string.h"
260
261 #include "BLT_translation.h"
262
263 #include "BKE_main.h"
264 #include "BKE_movieclip.h"
265 #include "BKE_scene.h"
266 #include "BKE_sound.h"
267
268 #include "strip_time.h"
269+#include "utils.h"
270
271 #include "SEQ_add.h"
272 #include "SEQ_edit.h"
273 #include "SEQ_effects.h"
274+#include "SEQ_iterator.h"
275 #include "SEQ_relations.h"
276 #include "SEQ_sequencer.h"
277 #include "SEQ_time.h"
278 #include "SEQ_transform.h"
279 #include "SEQ_utils.h"
280
281 int SEQ_edit_sequence_swap(Sequence *seq_a, Sequence *seq_b, const char **error_str)
282 {
283 char name[sizeof(seq_a->name)];
284
285@@ -336,20 +338,43 @@ static void seq_split_set_left_offset(Sequence *seq, int timeline_frame)
286 seq->startstill = seq->start - timeline_frame;
287 }
288 /* Adjust within range of extended stillframes after strip. */
289 if ((seq->start + seq->len) < timeline_frame) {
290 seq->start = timeline_frame - seq->len + 1;
291 seq->endstill = seq->enddisp - timeline_frame - 1;
292 }
293 SEQ_transform_set_left_handle_frame(seq, timeline_frame);
294 }
295
296+static void seq_edit_split_handle_strip_offsets(Main *bmain,
297+ Scene *scene,
298+ Sequence *left_seq,
299+ Sequence *right_seq,
300+ const int timeline_frame,
301+ const eSeqSplitMethod method)
302+{
303+ switch (method) {
304+ case SEQ_SPLIT_SOFT:
305+ seq_split_set_left_offset(right_seq, timeline_frame);
306+ seq_split_set_right_offset(left_seq, timeline_frame);
307+ break;
308+ case SEQ_SPLIT_HARD:
309+ seq_split_set_right_hold_offset(left_seq, timeline_frame);
310+ seq_split_set_left_hold_offset(right_seq, timeline_frame);
311+ SEQ_add_reload_new_file(bmain, scene, left_seq, false);
312+ SEQ_add_reload_new_file(bmain, scene, right_seq, false);
313+ break;
314+ }
315+ SEQ_time_update_sequence(scene, left_seq);
316+ SEQ_time_update_sequence(scene, right_seq);
317+}
318+
319 /**
320 * Split Sequence at timeline_frame in two.
321 *
322 * \param bmain: Main in which Sequence is located
323 * \param scene: Scene in which Sequence is located
324 * \param seqbase: ListBase in which Sequence is located
325 * \param seq: Sequence to be split
326 * \param timeline_frame: frame at which seq is split.
327 * \param method: affects type of offset to be applied to resize Sequence
328 * \return The newly created sequence strip. This is always Sequence on right side.
329@@ -358,47 +383,57 @@ Sequence *SEQ_edit_strip_split(Main *bmain,
330 Scene *scene,
331 ListBase *seqbase,
332 Sequence *seq,
333 const int timeline_frame,
334 const eSeqSplitMethod method)
335 {
336 if (timeline_frame <= seq->startdisp || timeline_frame >= seq->enddisp) {
337 return NULL;
338 }
339
340- if (method == SEQ_SPLIT_HARD) {
341- /* Precaution, needed because the length saved on-disk may not match the length saved in the
342- * blend file, or our code may have minor differences reading file length between versions.
343- * This causes hard-split to fail, see: T47862. */
344- SEQ_add_reload_new_file(bmain, scene, seq, true);
345- SEQ_time_update_sequence(scene, seq);
346+ SeqCollection *collection = SEQ_collection_create();
347+ SEQ_collection_append_strip(seq, collection);
348+ SEQ_collection_expand(seqbase, collection, SEQ_query_strip_effect_chain);
349+
350+ /* Move strips in collection from seqbase to new ListBase. */
351+ ListBase left_strips = {NULL, NULL};
352+ SEQ_ITERATOR_FOREACH (seq, collection) {
353+ BLI_remlink(seqbase, seq);
354+ BLI_addtail(&left_strips, seq);
355 }
356
357- Sequence *left_seq = seq;
358- Sequence *right_seq = SEQ_sequence_dupli_recursive(
359- scene, scene, seqbase, seq, SEQ_DUPE_UNIQUE_NAME | SEQ_DUPE_ANIM);
360+ /* Sort list, so that no strip can depend on next strip in list. */
361+ seq_sort_ex(&left_strips);
362+
363+ /* Duplicate ListBase. */
364+ ListBase right_strips = {NULL, NULL};
365+ SEQ_sequence_base_dupli_recursive(
366+ scene, scene, &right_strips, &left_strips, SEQ_DUPE_ANIM | SEQ_DUPE_ALL, 0);
367+
368+ /* Split strips. */
369+ Sequence *left_seq = left_strips.first;
370+ Sequence *right_seq = right_strips.first;
371+ Sequence *return_seq = right_strips.first;
372+ while (left_seq && right_seq) {
373+ seq_edit_split_handle_strip_offsets(bmain, scene, left_seq, right_seq, timeline_frame, method);
374+ left_seq = left_seq->next;
375+ right_seq = right_seq->next;
376+ }
377
378- switch (method) {
379- case SEQ_SPLIT_SOFT:
380- seq_split_set_left_offset(right_seq, timeline_frame);
381- seq_split_set_right_offset(left_seq, timeline_frame);
382- break;
383- case SEQ_SPLIT_HARD:
384- seq_split_set_right_hold_offset(left_seq, timeline_frame);
385- seq_split_set_left_hold_offset(right_seq, timeline_frame);
386- SEQ_add_reload_new_file(bmain, scene, left_seq, false);
387- SEQ_add_reload_new_file(bmain, scene, right_seq, false);
388- break;
389+ /* Move strips back to seqbase. Move right strips first, so left strips don't change name. */
390+ BLI_movelisttolist(seqbase, &right_strips);
391+ BLI_movelisttolist(seqbase, &left_strips);
392+ LISTBASE_FOREACH (Sequence *, seq, seqbase) {
393+ SEQ_recursive_apply(seq, SEQ_apply_unique_name_fn, scene);
394 }
395- SEQ_time_update_sequence(scene, left_seq);
396- SEQ_time_update_sequence(scene, right_seq);
397- return right_seq;
398+
399+ return return_seq;
400 }
401
402 /**
403 * Find gap after initial_frame and move strips on right side to close the gap
404 *
405 * \param scene: Scene in which strips are located
406 * \param seqbase: ListBase in which strips are located
407 * \param initial_frame: frame on timeline from where gaps are searched for
408 * \param remove_all_gaps: remove all gaps instead of one gap
409 * \return true if gap is removed, otherwise false
410diff --git a/source/blender/sequencer/intern/utils.c b/source/blender/sequencer/intern/utils.c
411index 6d5332b2b15..84712db23ad 100644
412--- a/source/blender/sequencer/intern/utils.c
413+++ b/source/blender/sequencer/intern/utils.c
414@@ -26,88 +26,91 @@
415
416 #include <stdlib.h>
417 #include <string.h>
418
419 #include "MEM_guardedalloc.h"
420
421 #include "DNA_mask_types.h"
422 #include "DNA_scene_types.h"
423 #include "DNA_sequence_types.h"
424
425-#include "BLI_listbase.h"
426-#include "BLI_path_util.h"
427-#include "BLI_string.h"
428-#include "BLI_utildefines.h"
429+#include "BLI_blenlib.h"
430
431 #include "BKE_image.h"
432 #include "BKE_main.h"
433 #include "BKE_scene.h"
434
435 #include "SEQ_iterator.h"
436 #include "SEQ_relations.h"
437 #include "SEQ_select.h"
438 #include "SEQ_sequencer.h"
439 #include "SEQ_utils.h"
440
441 #include "IMB_imbuf.h"
442 #include "IMB_imbuf_types.h"
443
444 #include "multiview.h"
445 #include "proxy.h"
446 #include "utils.h"
447
448-void SEQ_sort(Scene *scene)
449+void seq_sort_ex(ListBase *seqbase)
450 {
451- /* all strips together per kind, and in order of y location ("machine") */
452- ListBase seqbase, effbase;
453- Editing *ed = SEQ_editing_get(scene, false);
454+ /* all strips together per kind, and in order of y location ("machine") */
455+ ListBase inputbase, effbase;
456 Sequence *seq, *seqt;
457
458- if (ed == NULL) {
459- return;
460- }
461-
462- BLI_listbase_clear(&seqbase);
463+ BLI_listbase_clear(&inputbase);
464 BLI_listbase_clear(&effbase);
465
466- while ((seq = BLI_pophead(ed->seqbasep))) {
467+ while ((seq = BLI_pophead(seqbase))) {
468
469 if (seq->type & SEQ_TYPE_EFFECT) {
470 seqt = effbase.first;
471 while (seqt) {
472 if (seqt->machine >= seq->machine) {
473 BLI_insertlinkbefore(&effbase, seqt, seq);
474 break;
475 }
476 seqt = seqt->next;
477 }
478 if (seqt == NULL) {
479 BLI_addtail(&effbase, seq);
480 }
481 }
482 else {
483- seqt = seqbase.first;
484+ seqt = inputbase.first;
485 while (seqt) {
486 if (seqt->machine >= seq->machine) {
487- BLI_insertlinkbefore(&seqbase, seqt, seq);
488+ BLI_insertlinkbefore(&inputbase, seqt, seq);
489 break;
490 }
491 seqt = seqt->next;
492 }
493 if (seqt == NULL) {
494- BLI_addtail(&seqbase, seq);
495+ BLI_addtail(&inputbase, seq);
496 }
497 }
498 }
499
500- BLI_movelisttolist(&seqbase, &effbase);
501- *(ed->seqbasep) = seqbase;
502+ BLI_movelisttolist(seqbase, &inputbase);
503+ BLI_movelisttolist(seqbase, &effbase);
504+}
505+
506+void SEQ_sort(Scene *scene)
507+{
508+ Editing *ed = SEQ_editing_get(scene, false);
509+
510+ if (ed == NULL) {
511+ return;
512+ }
513+
514+ seq_sort_ex(SEQ_active_seqbase_get(ed));
515 }
516
517 typedef struct SeqUniqueInfo {
518 Sequence *seq;
519 char name_src[SEQ_NAME_MAXSTR];
520 char name_dest[SEQ_NAME_MAXSTR];
521 int count;
522 int match;
523 } SeqUniqueInfo;
524
525@@ -605,10 +608,21 @@ int SEQ_recursive_apply(Sequence *seq, int (*apply_fn)(Sequence *, void *), void
526 if (ret == -1) {
527 return -1; /* bail out */
528 }
529
530 if (ret && seq->seqbase.first) {
531 ret = SEQ_seqbase_recursive_apply(&seq->seqbase, apply_fn, arg);
532 }
533
534 return ret;
535 }
536+
537+int SEQ_apply_unique_name_fn(Sequence *seq, void *arg_pt)
538+{
539+ Scene *scene = (Scene *)arg_pt;
540+ char name[sizeof(seq->name) - 2];
541+
542+ BLI_strncpy_utf8(name, seq->name + 2, sizeof(name));
543+ SEQ_sequence_base_unique_name_recursive(&scene->ed->seqbase, seq);
544+ SEQ_dupe_animdata(scene, name, seq->name + 2);
545+ return 1;
546+}
547diff --git a/source/blender/sequencer/intern/utils.h b/source/blender/sequencer/intern/utils.h
548index 97f33bb3ae0..0413681afcf 100644
549--- a/source/blender/sequencer/intern/utils.h
550+++ b/source/blender/sequencer/intern/utils.h
551@@ -27,14 +27,15 @@
552 extern "C" {
553 #endif
554
555 struct Scene;
556
557 bool sequencer_seq_generates_image(struct Sequence *seq);
558 void seq_open_anim_file(struct Scene *scene, struct Sequence *seq, bool openfile);
559 struct Sequence *seq_find_metastrip_by_sequence(ListBase *seqbase /* = ed->seqbase */,
560 struct Sequence *meta /* = NULL */,
561 struct Sequence *seq);
562+void seq_sort_ex(ListBase *seqbase);
563
564 #ifdef __cplusplus
565 }
566 #endif

Thu, May 6, 8:39 AM · VFX & Video, Video Sequencer
Campbell Barton (campbellbarton) abandoned D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.

Committed rB0499dbc5c16fe6b276da81d65cade4f5da92a308

Thu, May 6, 3:34 AM · VFX & Video
Richard Antalik (ISS) accepted D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
Thu, May 6, 3:03 AM · VFX & Video

Wed, May 5

Campbell Barton (campbellbarton) updated the diff for D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
  • Note that zero disables caching
Wed, May 5, 11:52 PM · VFX & Video
Campbell Barton (campbellbarton) updated the diff for D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
  • Use
Wed, May 5, 11:47 PM · VFX & Video
Sergey Sharybin (sergey) requested changes to D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.

This caching should really be implemented using MovieCache. It will give you all the functionality needed to support memory limits on a random frame access. I don't think it will take you longer to use MovieCache than re-implementing the limiting logic in the player.

Wed, May 5, 2:21 PM · VFX & Video
Campbell Barton (campbellbarton) updated the summary of D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
Wed, May 5, 2:03 PM · VFX & Video
Campbell Barton (campbellbarton) updated the diff for D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
  • Store the amount of memory in bytes to simplify applying the memory limit
Wed, May 5, 2:02 PM · VFX & Video
Campbell Barton (campbellbarton) updated the diff for D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
  • remove print
Wed, May 5, 1:58 PM · VFX & Video
Campbell Barton (campbellbarton) updated the summary of D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
Wed, May 5, 1:51 PM · VFX & Video
Campbell Barton (campbellbarton) added a comment to T81751: Poor playback performance with large float images in the animation-player.

This is caused by images being slow to load & the cache being hard-coded to 30 frames, which are always freed.

Wed, May 5, 1:51 PM · VFX & Video, BF Blender
Campbell Barton (campbellbarton) renamed T81751: Poor playback performance with large float images in the animation-player from Poor playback performance with Tiff files in Blender 2.91 Alpha to Poor playback performance with large float images in the animation-player.
Wed, May 5, 1:50 PM · VFX & Video, BF Blender
Campbell Barton (campbellbarton) moved T81751: Poor playback performance with large float images in the animation-player from Backlog to Known Issues on the VFX & Video board.
Wed, May 5, 1:49 PM · VFX & Video, BF Blender
Campbell Barton (campbellbarton) added a project to T81751: Poor playback performance with large float images in the animation-player: VFX & Video.
Wed, May 5, 1:49 PM · VFX & Video, BF Blender
Campbell Barton (campbellbarton) updated the summary of D11167: Fix T81751: use the system-memory preference for animation playback cache limiting.
Wed, May 5, 1:48 PM · VFX & Video
Campbell Barton (campbellbarton) added a reviewer for D11167: Fix T81751: use the system-memory preference for animation playback cache limiting: Sergey Sharybin (sergey).
Wed, May 5, 1:46 PM · VFX & Video
Jeroen Bakker (jbakker) added a comment to T88049: Cryptomatte EXR Output Bit Depth should always be 32bit..

Cryptomatte hashes can only be stored in 32 bits and with lossless compression or no compression enabled. Otherwise that are unusable.

Wed, May 5, 12:06 PM · Images & Movies, Render & Cycles, Compositing, VFX & Video, BF Blender
Philipp Oeser (lichtwerk) changed the status of T88049: Cryptomatte EXR Output Bit Depth should always be 32bit. from Needs Triage to Needs Information from Developers.

I can do the change, but would like additional confirmation from @Jeroen Bakker (jbakker) and/or @Brecht Van Lommel (brecht) if this is the way to go.
(not this originally came up in T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output)

Wed, May 5, 11:54 AM · Images & Movies, Render & Cycles, Compositing, VFX & Video, BF Blender
Saku Partamies (Saku) added a comment to T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output.

Also related to same 32bit issue: Both save methods save Cryptomatte layers as 16bit if Half Float format is selected, but Cryptomatte must be 32bit to be usable.

Could you report this separately? Having only one issue per report makes the whole process easier.

Wed, May 5, 10:38 AM · Images & Movies, VFX & Video, BF Blender, Compositing

Tue, May 4

Wouter Stomp (wouterstomp) added a comment to T87983: Motion tracker tooltips identical for different buttons.

Thanks for picking this up. The patch is still missing individual tooltips for the clear and refine buttons (although they are a bit more self-explanatory).

Tue, May 4, 9:36 PM · BF Blender (2.93), VFX & Video, Motion Tracking
Philipp Oeser (lichtwerk) updated the summary of D11157: Compositor: force full float EXR for File Output node if Depth is connected.
Tue, May 4, 2:37 PM · Compositing, Render & Cycles, VFX & Video
Philipp Oeser (lichtwerk) added a comment to T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output.

Also related to same 32bit issue: Both save methods save Cryptomatte layers as 16bit if Half Float format is selected, but Cryptomatte must be 32bit to be usable.

Tue, May 4, 2:36 PM · Images & Movies, VFX & Video, BF Blender, Compositing
Philipp Oeser (lichtwerk) added projects to D11157: Compositor: force full float EXR for File Output node if Depth is connected: VFX & Video, Render & Cycles, Compositing.
Tue, May 4, 2:04 PM · Compositing, Render & Cycles, VFX & Video
Philipp Oeser (lichtwerk) added a revision to T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output: D11157: Compositor: force full float EXR for File Output node if Depth is connected.
Tue, May 4, 2:04 PM · Images & Movies, VFX & Video, BF Blender, Compositing
Philipp Oeser (lichtwerk) changed the status of T87988: Open EXR layer bit depths differ in Output Properties and Compositor File Output from Needs Triage to Confirmed.

Can confirm, will check on this

Tue, May 4, 9:55 AM · Images & Movies, VFX & Video, BF Blender, Compositing
Richard Antalik (ISS) added a comment to T87776: Framerate detection uses decimals in base when shouldn't.

I should be able to have a look and find solution. I have noticed more places where FPS calculation fails or causes problems as well.

Tue, May 4, 1:37 AM · VFX & Video, BF Blender
Richard Antalik (ISS) added a comment to T87678: VSE - Metastrip's Blend mode ignored with Effect strip bellow.

@Richard Antalik (ISS), Correct me if I'm wrong, it does seem like this is not a recent regression. If so, addressing it for the 3.0 sounds good to me.

Just making sure we don't introduce known regressions in the LTS release (known old limitations are fine though :)

Tue, May 4, 1:33 AM · Video Sequencer, VFX & Video, BF Blender

Mon, May 3

Bastien Montagne (mont29) added a comment to T87983: Motion tracker tooltips identical for different buttons.

@Sergey Sharybin (sergey) in that case I would say yes.

Mon, May 3, 6:41 PM · BF Blender (2.93), VFX & Video, Motion Tracking
Sergey Sharybin (sergey) closed T86456: Motion Tracking Keyframe A & B, relative not absolute. as Resolved.

The relative behavior of the keyframes is how they were designed to: you can think of it as "this picture A and that picture B is what defines the keyframes". Where exactly they are mapping in time is a bit irrelevant from the solver perspective.

Mon, May 3, 4:16 PM · Motion Tracking, VFX & Video, BF Blender
Sergey Sharybin (sergey) moved T87044: rendered video from VSE could not be played with VLC from Backlog to Blender 2.93 on the VFX & Video board.
Mon, May 3, 3:29 PM · BF Blender (2.93), Video Sequencer, VFX & Video
Sergey Sharybin (sergey) moved T86361: Rendered video is missing frames that are on the playback timeline from Backlog to Known Issues on the VFX & Video board.
Mon, May 3, 3:26 PM · VFX & Video, BF Blender
Sergey Sharybin (sergey) moved T86861: Video Editing (outline on the border) from Backlog to Known Issues on the VFX & Video board.
Mon, May 3, 3:26 PM · VFX & Video, Video Sequencer, BF Blender
Sergey Sharybin (sergey) moved T87678: VSE - Metastrip's Blend mode ignored with Effect strip bellow from Backlog to Long-Term on the VFX & Video board.
Mon, May 3, 3:26 PM · Video Sequencer, VFX & Video, BF Blender
Sergey Sharybin (sergey) added a comment to T87678: VSE - Metastrip's Blend mode ignored with Effect strip bellow.

@Richard Antalik (ISS), Correct me if I'm wrong, it does seem like this is not a recent regression. If so, addressing it for the 3.0 sounds good to me.

Mon, May 3, 3:25 PM · Video Sequencer, VFX & Video, BF Blender
Sergey Sharybin (sergey) updated subscribers of T87776: Framerate detection uses decimals in base when shouldn't.

@Richard Antalik (ISS), Do you feel like you can look into the issue in a long term?

Mon, May 3, 3:19 PM · VFX & Video, BF Blender