diff options
Diffstat (limited to 'source/blender/blenkernel/intern/sequencer.c')
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 188 |
1 files changed, 117 insertions, 71 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index d147ad9ee87..b4da0c5bd33 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1356,9 +1356,8 @@ const char *BKE_sequence_give_name(Sequence *seq) if (!(seq->type & SEQ_TYPE_EFFECT)) { return seq->strip->dir; } - else { - return "Effect"; - } + + return "Effect"; } return name; } @@ -1662,13 +1661,12 @@ static int seq_num_files(Scene *scene, char views_format, const bool is_multivie if (!is_multiview) { return 1; } - else if (views_format == R_IMF_VIEWS_STEREO_3D) { + if (views_format == R_IMF_VIEWS_STEREO_3D) { return 1; } /* R_IMF_VIEWS_INDIVIDUAL */ - else { - return BKE_scene_multiview_num_views_get(&scene->r); - } + + return BKE_scene_multiview_num_views_get(&scene->r); } static void seq_proxy_index_dir_set(struct anim *anim, const char *base_dir) @@ -1959,9 +1957,8 @@ static ImBuf *seq_proxy_fetch(const SeqRenderData *context, Sequence *seq, int c return ibuf; } - else { - return NULL; - } + + return NULL; } static void seq_proxy_build_frame(const SeqRenderData *context, @@ -2056,9 +2053,8 @@ static bool seq_proxy_multiview_context_invalid(Sequence *seq, Scene *scene, con if (BLI_access(str, R_OK) == 0) { return false; } - else { - return view_id != 0; - } + + return view_id != 0; } return false; } @@ -2426,7 +2422,7 @@ static void color_balance_byte_float(StripColorBalance *cb_, while (p < e) { if (m) { - float t[3] = {m[0] / 255.0f, m[1] / 255.0f, m[2] / 255.0f}; + const float t[3] = {m[0] / 255.0f, m[1] / 255.0f, m[2] / 255.0f}; p[0] = p[0] * (1.0f - t[0]) + t[0] * cb_tab[0][p[0]]; p[1] = p[1] * (1.0f - t[1]) + t[1] * cb_tab[1][p[1]]; @@ -3381,35 +3377,34 @@ static ImBuf *seq_render_mask(const SeqRenderData *context, Mask *mask, float nr if (!mask) { return NULL; } - else { - AnimData *adt; - Mask *mask_temp; - MaskRasterHandle *mr_handle; - mask_temp = BKE_mask_copy_nolib(mask); + AnimData *adt; + Mask *mask_temp; + MaskRasterHandle *mr_handle; - BKE_mask_evaluate(mask_temp, mask->sfra + nr, true); + mask_temp = BKE_mask_copy_nolib(mask); - /* anim-data */ - adt = BKE_animdata_from_id(&mask->id); - const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct( - context->depsgraph, mask->sfra + nr); - BKE_animsys_evaluate_animdata(&mask_temp->id, adt, &anim_eval_context, ADT_RECALC_ANIM, false); + BKE_mask_evaluate(mask_temp, mask->sfra + nr, true); - maskbuf = MEM_mallocN(sizeof(float) * context->rectx * context->recty, __func__); + /* anim-data */ + adt = BKE_animdata_from_id(&mask->id); + const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct( + context->depsgraph, mask->sfra + nr); + BKE_animsys_evaluate_animdata(&mask_temp->id, adt, &anim_eval_context, ADT_RECALC_ANIM, false); - mr_handle = BKE_maskrasterize_handle_new(); + maskbuf = MEM_mallocN(sizeof(float) * context->rectx * context->recty, __func__); - BKE_maskrasterize_handle_init( - mr_handle, mask_temp, context->rectx, context->recty, true, true, true); + mr_handle = BKE_maskrasterize_handle_new(); - BKE_mask_free(mask_temp); - MEM_freeN(mask_temp); + BKE_maskrasterize_handle_init( + mr_handle, mask_temp, context->rectx, context->recty, true, true, true); - BKE_maskrasterize_buffer(mr_handle, context->rectx, context->recty, maskbuf); + BKE_mask_free(mask_temp); + MEM_freeN(mask_temp); - BKE_maskrasterize_handle_free(mr_handle); - } + BKE_maskrasterize_buffer(mr_handle, context->rectx, context->recty, maskbuf); + + BKE_maskrasterize_handle_free(mr_handle); if (make_float) { /* pixels */ @@ -3598,7 +3593,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, /* opengl offscreen render */ depsgraph = BKE_scene_get_depsgraph(context->bmain, scene, view_layer, true); - BKE_scene_graph_update_for_newframe(depsgraph, context->bmain); + BKE_scene_graph_update_for_newframe(depsgraph); ibuf = sequencer_view3d_fn( /* set for OpenGL render (NULL when scrubbing) */ depsgraph, @@ -3657,7 +3652,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, ibufs_arr[view_id] = IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat); memcpy(ibufs_arr[view_id]->rect_float, rres.rectf, - 4 * sizeof(float) * rres.rectx * rres.recty); + sizeof(float[4]) * rres.rectx * rres.recty); if (rres.rectz) { addzbuffloatImBuf(ibufs_arr[view_id]); @@ -3700,7 +3695,7 @@ finally: scene->r.subframe = orig_data.subframe; if (is_frame_update && (depsgraph != NULL)) { - BKE_scene_graph_update_for_newframe(depsgraph, context->bmain); + BKE_scene_graph_update_for_newframe(depsgraph); } #ifdef DURIAN_CAMERA_SWITCH @@ -3853,9 +3848,8 @@ static float seq_estimate_render_cost_end(Scene *scene, clock_t begin) if (time_max != 0) { return time_spent / time_max; } - else { - return 1; - } + + return 1; } static ImBuf *seq_render_preprocess_ibuf(const SeqRenderData *context, @@ -3956,7 +3950,7 @@ static int seq_get_early_out_for_blend_mode(Sequence *seq) if (early_out == EARLY_USE_INPUT_2) { return EARLY_USE_INPUT_1; } - else if (early_out == EARLY_USE_INPUT_1) { + if (early_out == EARLY_USE_INPUT_1) { return EARLY_USE_INPUT_2; } } @@ -4459,9 +4453,8 @@ int BKE_sequence_tx_get_final_left(Sequence *seq, bool metaclip) return max_ii(BKE_sequence_tx_get_final_left(seq, false), BKE_sequence_tx_get_final_left((Sequence *)seq->tmp, true)); } - else { - return (seq->start - seq->startstill) + seq->startofs; - } + + return (seq->start - seq->startstill) + seq->startofs; } int BKE_sequence_tx_get_final_right(Sequence *seq, bool metaclip) { @@ -4470,9 +4463,8 @@ int BKE_sequence_tx_get_final_right(Sequence *seq, bool metaclip) return min_ii(BKE_sequence_tx_get_final_right(seq, false), BKE_sequence_tx_get_final_right((Sequence *)seq->tmp, true)); } - else { - return ((seq->start + seq->len) + seq->endstill) - seq->endofs; - } + + return ((seq->start + seq->len) + seq->endstill) - seq->endofs; } void BKE_sequence_tx_set_final_left(Sequence *seq, int val) @@ -4764,9 +4756,8 @@ bool BKE_sequence_base_shuffle_ex(ListBase *seqbasep, BKE_sequence_calc(evil_scene, test); return false; } - else { - return true; - } + + return true; } bool BKE_sequence_base_shuffle(ListBase *seqbasep, Sequence *test, Scene *evil_scene) @@ -5011,7 +5002,7 @@ ListBase *BKE_sequence_seqbase(ListBase *seqbase, Sequence *seq) if (seq == iseq) { return seqbase; } - else if (iseq->seqbase.first && (lb = BKE_sequence_seqbase(&iseq->seqbase, seq))) { + if (iseq->seqbase.first && (lb = BKE_sequence_seqbase(&iseq->seqbase, seq))) { return lb; } } @@ -5029,7 +5020,7 @@ Sequence *BKE_sequence_metastrip(ListBase *seqbase, Sequence *meta, Sequence *se if (seq == iseq) { return meta; } - else if (iseq->seqbase.first && (rval = BKE_sequence_metastrip(&iseq->seqbase, iseq, seq))) { + if (iseq->seqbase.first && (rval = BKE_sequence_metastrip(&iseq->seqbase, iseq, seq))) { return rval; } } @@ -5214,8 +5205,8 @@ Sequence *BKE_sequence_get_by_name(ListBase *seqbase, const char *name, bool rec if (STREQ(name, iseq->name + 2)) { return iseq; } - else if (recursive && (iseq->seqbase.first) && - (rseq = BKE_sequence_get_by_name(&iseq->seqbase, name, 1))) { + if (recursive && (iseq->seqbase.first) && + (rseq = BKE_sequence_get_by_name(&iseq->seqbase, name, 1))) { return rseq; } } @@ -5237,7 +5228,7 @@ Sequence *BKE_sequencer_from_elem(ListBase *seqbase, StripElem *se) (ARRAY_HAS_ITEM(se, iseq->strip->stripdata, iseq->len))) { break; } - else if ((seq_found = BKE_sequencer_from_elem(&iseq->seqbase, se))) { + if ((seq_found = BKE_sequencer_from_elem(&iseq->seqbase, se))) { iseq = seq_found; break; } @@ -5277,24 +5268,22 @@ int BKE_sequencer_active_get_pair(Scene *scene, Sequence **seq_act, Sequence **s if (*seq_act == NULL) { return 0; } - else { - Sequence *seq; - *seq_other = NULL; + Sequence *seq; - for (seq = ed->seqbasep->first; seq; seq = seq->next) { - if (seq->flag & SELECT && (seq != (*seq_act))) { - if (*seq_other) { - return 0; - } - else { - *seq_other = seq; - } + *seq_other = NULL; + + for (seq = ed->seqbasep->first; seq; seq = seq->next) { + if (seq->flag & SELECT && (seq != (*seq_act))) { + if (*seq_other) { + return 0; } - } - return (*seq_other != NULL); + *seq_other = seq; + } } + + return (*seq_other != NULL); } Mask *BKE_sequencer_mask_get(Scene *scene) @@ -5304,9 +5293,8 @@ Mask *BKE_sequencer_mask_get(Scene *scene) if (seq_act && seq_act->type == SEQ_TYPE_MASK) { return seq_act->mask; } - else { - return NULL; - } + + return NULL; } /* api like funcs for adding */ @@ -6112,6 +6100,64 @@ bool BKE_sequencer_render_loop_check(Sequence *seq_main, Sequence *seq) return false; } +static void sequencer_flag_users_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq) +{ + LISTBASE_FOREACH (Sequence *, user_seq, seqbase) { + /* Look in metas for usage of seq. */ + if (user_seq->type == SEQ_TYPE_META) { + sequencer_flag_users_for_removal(scene, &user_seq->seqbase, seq); + } + + /* Clear seq from modifiers. */ + SequenceModifierData *smd; + for (smd = user_seq->modifiers.first; smd; smd = smd->next) { + if (smd->mask_sequence == seq) { + smd->mask_sequence = NULL; + } + } + + /* Remove effects, that use seq. */ + if ((user_seq->seq1 && user_seq->seq1 == seq) || (user_seq->seq2 && user_seq->seq2 == seq) || + (user_seq->seq3 && user_seq->seq3 == seq)) { + user_seq->flag |= SEQ_FLAG_DELETE; + /* Strips can be used as mask even if not in same seqbase. */ + sequencer_flag_users_for_removal(scene, &scene->ed->seqbase, user_seq); + } + } +} + +/* Flag seq and its users (effects) for removal. */ +void BKE_sequencer_flag_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq) +{ + if (seq == NULL || (seq->flag & SEQ_FLAG_DELETE) != 0) { + return; + } + + /* Flag and remove meta children. */ + if (seq->type == SEQ_TYPE_META) { + LISTBASE_FOREACH (Sequence *, meta_child, &seq->seqbase) { + BKE_sequencer_flag_for_removal(scene, &seq->seqbase, meta_child); + } + } + + seq->flag |= SEQ_FLAG_DELETE; + sequencer_flag_users_for_removal(scene, seqbase, seq); +} + +/* Remove all flagged sequences, return true if sequence is removed. */ +void BKE_sequencer_remove_flagged_sequences(Scene *scene, ListBase *seqbase) +{ + LISTBASE_FOREACH_MUTABLE (Sequence *, seq, seqbase) { + if (seq->flag & SEQ_FLAG_DELETE) { + if (seq->type == SEQ_TYPE_META) { + BKE_sequencer_remove_flagged_sequences(scene, &seq->seqbase); + } + BLI_remlink(seqbase, seq); + BKE_sequence_free(scene, seq, true); + } + } +} + void BKE_sequencer_check_uuids_unique_and_report(const Scene *scene) { if (scene->ed == NULL) { |