Fix T55668: Volume Keyframe on Cut-ted Metastrip.

We actually still had cases of Meta strip duplication resulting in
non-unique strip names. Quiet surprising this went unoticed for so long. :(

Fixed that bug, and think it was last one (at least, no other case of
SEQ_DUPE_UNIQUE_NAME usage should be broken, I think...), and raised
subversion and updated doversion to run uniquename check on strips on
all previous fileversions.

Note: will have to do that again when merging in 2.8...
This commit is contained in:
Bastien Montagne 2018-07-23 17:38:41 +02:00
parent 01f5601fe5
commit bb98e83b99
Notes: blender-bot 2023-02-14 05:40:47 +01:00
Referenced by commit c97794520f, Revert "Fix T55668: Volume Keyframe on Cut-ted Metastrip."
Referenced by issue #60194, Sequencer cut loses animation data for the right strip
Referenced by issue #56579, Cycles Normal Baking Incorrect Edges with Extrusion
Referenced by issue #56099, disappearing particles after first render
Referenced by issue #56090, Alembic Mesh Sequence Cache Override Frame not working using new dependency graph flag
Referenced by issue #55668, Volume Keyframe on Cut-ted Metastrip
6 changed files with 26 additions and 22 deletions

View File

@ -28,7 +28,7 @@
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 279
#define BLENDER_SUBVERSION 5
#define BLENDER_SUBVERSION 6
/* Several breakages with 270, e.g. constraint deg vs rad */
#define BLENDER_MINVERSION 270
#define BLENDER_MINSUBVERSION 6

View File

@ -392,7 +392,7 @@ typedef struct SeqLoadInfo {
/* seq_dupli' flags */
#define SEQ_DUPE_UNIQUE_NAME (1 << 0)
#define SEQ_DUPE_UNIQUE_NAME (1 << 0) /* WARNING: does NOT work when duplicating Meta strips! */
#define SEQ_DUPE_CONTEXT (1 << 1)
#define SEQ_DUPE_ANIM (1 << 2)
#define SEQ_DUPE_ALL (1 << 3) /* otherwise only selected are copied */

View File

@ -5517,6 +5517,7 @@ static Sequence *seq_dupli(const Scene *scene_src, Scene *scene_dst, Sequence *s
if (scene_src == scene_dst) {
if (dupe_flag & SEQ_DUPE_UNIQUE_NAME) {
/* TODO this is broken in case of Meta strips recursive duplication... Not trivial to fix. */
BKE_sequence_base_unique_name_recursive(&scene_dst->ed->seqbase, seqn);
}

View File

@ -633,20 +633,6 @@ static void do_version_constraints_radians_degrees_250(ListBase *lb)
}
}
/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */
static void do_versions_seq_unique_name_all_strips(Scene *sce, ListBase *seqbasep)
{
Sequence * seq = seqbasep->first;
while (seq) {
BKE_sequence_base_unique_name_recursive(&sce->ed->seqbase, seq);
if (seq->seqbase.first) {
do_versions_seq_unique_name_all_strips(sce, &seq->seqbase);
}
seq = seq->next;
}
}
static void do_version_bone_roll_256(Bone *bone)
{
Bone *child;
@ -1326,10 +1312,6 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
if (sce->r.mblur_samples == 0)
sce->r.mblur_samples = sce->r.osa;
if (sce->ed && sce->ed->seqbase.first) {
do_versions_seq_unique_name_all_strips(sce, &sce->ed->seqbase);
}
sce = sce->id.next;
}
}

View File

@ -308,6 +308,18 @@ static char *replace_bbone_easing_rnapath(char *old_path)
}
}
/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already.
* But in 2.79 another case generating non-unique names was discovered (see T55668, involving Meta strips)... */
static void do_versions_seq_unique_name_all_strips(Scene *sce, ListBase *seqbasep)
{
for (Sequence *seq = seqbasep->first; seq != NULL; seq = seq->next) {
BKE_sequence_base_unique_name_recursive(&sce->ed->seqbase, seq);
if (seq->seqbase.first != NULL) {
do_versions_seq_unique_name_all_strips(sce, &seq->seqbase);
}
}
}
static void do_version_bbone_easing_fcurve_fix(ID *UNUSED(id), FCurve *fcu, void *UNUSED(user_data))
{
/* F-Curve's path (for bbone_in/out) */
@ -1826,6 +1838,14 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
if (!MAIN_VERSION_ATLEAST(bmain, 279, 6)) {
for (Scene *sce = bmain->scene.first; sce != NULL; sce = sce->id.next) {
if (sce->ed != NULL && sce->ed->seqbase.first != NULL) {
do_versions_seq_unique_name_all_strips(sce, &sce->ed->seqbase);
}
}
}
}
void do_versions_after_linking_270(Main *bmain)

View File

@ -737,7 +737,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence *seq, int cutframe)
if (!skip_dup) {
/* Duplicate AFTER the first change */
seqn = BKE_sequence_dupli_recursive(scene, scene, seq, SEQ_DUPE_UNIQUE_NAME | SEQ_DUPE_ANIM);
seqn = BKE_sequence_dupli_recursive(scene, scene, seq, SEQ_DUPE_ANIM);
}
if (seqn) {
@ -846,7 +846,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence *seq, int cutframe)
if (!skip_dup) {
/* Duplicate AFTER the first change */
seqn = BKE_sequence_dupli_recursive(scene, scene, seq, SEQ_DUPE_UNIQUE_NAME | SEQ_DUPE_ANIM);
seqn = BKE_sequence_dupli_recursive(scene, scene, seq, SEQ_DUPE_ANIM);
}
if (seqn) {
@ -2112,6 +2112,7 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op)
SEQP_BEGIN (ed, seq)
{
BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq);
if (seq->seq1 || seq->seq2 || seq->seq3) {
BKE_sequence_calc(scene, seq);
}