VSE: Cache invalidation
Add invalidation to strip add functions Add invalidation for scene and movieclip strips Skip invalidation for sound strips Reviewed By: brecht Differential Revision: https://developer.blender.org/D4989
This commit is contained in:
parent
2175fb0217
commit
9c00605729
|
@ -398,6 +398,8 @@ void BKE_sequence_invalidate_cache_raw(struct Scene *scene, struct Sequence *seq
|
|||
void BKE_sequence_invalidate_cache_preprocessed(struct Scene *scene, struct Sequence *seq);
|
||||
void BKE_sequence_invalidate_cache_composite(struct Scene *scene, struct Sequence *seq);
|
||||
void BKE_sequence_invalidate_dependent(struct Scene *scene, struct Sequence *seq);
|
||||
void BKE_sequence_invalidate_scene_strips(struct Main *bmain, struct Scene *scene_target);
|
||||
void BKE_sequence_invalidate_movieclip_strips(struct Main *bmain, struct MovieClip *clip_target);
|
||||
|
||||
void BKE_sequencer_update_sound_bounds_all(struct Scene *scene);
|
||||
void BKE_sequencer_update_sound_bounds(struct Scene *scene, struct Sequence *seq);
|
||||
|
|
|
@ -4349,16 +4349,68 @@ void BKE_sequence_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
|
|||
|
||||
void BKE_sequence_invalidate_cache_composite(Scene *scene, Sequence *seq)
|
||||
{
|
||||
if (ELEM(seq->type, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD)) {
|
||||
return;
|
||||
}
|
||||
|
||||
sequence_invalidate_cache(
|
||||
scene, seq, true, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT);
|
||||
}
|
||||
|
||||
void BKE_sequence_invalidate_dependent(Scene *scene, Sequence *seq)
|
||||
{
|
||||
if (ELEM(seq->type, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD)) {
|
||||
return;
|
||||
}
|
||||
|
||||
sequence_invalidate_cache(
|
||||
scene, seq, false, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT);
|
||||
}
|
||||
|
||||
static void invalidate_scene_strips(Scene *scene, Scene *scene_target, ListBase *seqbase)
|
||||
{
|
||||
for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) {
|
||||
if (seq->scene == scene_target) {
|
||||
BKE_sequence_invalidate_cache_raw(scene, seq);
|
||||
}
|
||||
|
||||
if (seq->seqbase.first != NULL) {
|
||||
invalidate_scene_strips(scene, scene_target, &seq->seqbase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_sequence_invalidate_scene_strips(Main *bmain, Scene *scene_target)
|
||||
{
|
||||
for (Scene *scene = bmain->scenes.first; scene != NULL; scene = scene->id.next) {
|
||||
if (scene->ed != NULL) {
|
||||
invalidate_scene_strips(scene, scene_target, &scene->ed->seqbase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void invalidate_movieclip_strips(Scene *scene, MovieClip *clip_target, ListBase *seqbase)
|
||||
{
|
||||
for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) {
|
||||
if (seq->clip == clip_target) {
|
||||
BKE_sequence_invalidate_cache_raw(scene, seq);
|
||||
}
|
||||
|
||||
if (seq->seqbase.first != NULL) {
|
||||
invalidate_movieclip_strips(scene, clip_target, &seq->seqbase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_sequence_invalidate_movieclip_strips(Main *bmain, MovieClip *clip_target)
|
||||
{
|
||||
for (Scene *scene = bmain->scenes.first; scene != NULL; scene = scene->id.next) {
|
||||
if (scene->ed != NULL) {
|
||||
invalidate_movieclip_strips(scene, clip_target, &scene->ed->seqbase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_sequencer_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
|
||||
{
|
||||
Sequence *seq;
|
||||
|
@ -5486,6 +5538,7 @@ Sequence *BKE_sequencer_add_image_strip(bContext *C, ListBase *seqbasep, SeqLoad
|
|||
seq->flag |= seq_load->flag & SEQ_USE_VIEWS;
|
||||
|
||||
seq_load_apply(CTX_data_main(C), scene, seq, seq_load);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
return seq;
|
||||
}
|
||||
|
@ -5688,6 +5741,7 @@ Sequence *BKE_sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoad
|
|||
|
||||
/* can be NULL */
|
||||
seq_load_apply(CTX_data_main(C), scene, seq, seq_load);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
MEM_freeN(anim_arr);
|
||||
return seq;
|
||||
|
|
|
@ -352,6 +352,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
|
|||
|
||||
sequencer_add_apply_replace_sel(C, op, seq);
|
||||
sequencer_add_apply_overlap(C, op, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
@ -435,6 +436,7 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op)
|
|||
|
||||
sequencer_add_apply_replace_sel(C, op, seq);
|
||||
sequencer_add_apply_overlap(C, op, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
@ -518,6 +520,7 @@ static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op)
|
|||
|
||||
sequencer_add_apply_replace_sel(C, op, seq);
|
||||
sequencer_add_apply_overlap(C, op, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
@ -960,6 +963,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
|
|||
if (op->customdata) {
|
||||
MEM_freeN(op->customdata);
|
||||
}
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
@ -1110,6 +1114,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
|
|||
/* not sure if this is needed with update_changed_seq_and_deps.
|
||||
* it was NOT called in blender 2.4x, but wont hurt */
|
||||
BKE_sequencer_sort(scene);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
|
|
@ -2673,7 +2673,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
|
|||
while (seq) {
|
||||
next = seq->next;
|
||||
if (seq != seqm && (seq->flag & SELECT)) {
|
||||
BKE_sequence_invalidate_dependent(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
channel_max = max_ii(seq->machine, channel_max);
|
||||
BLI_remlink(ed->seqbasep, seq);
|
||||
BLI_addtail(&seqm->seqbase, seq);
|
||||
|
@ -2692,7 +2692,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
|
|||
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
|
||||
|
||||
BKE_sequence_base_unique_name_recursive(&scene->ed->seqbase, seqm);
|
||||
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -2745,7 +2745,7 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
}
|
||||
|
||||
for (seq = last_seq->seqbase.first; seq != NULL; seq = seq->next) {
|
||||
BKE_sequence_invalidate_dependent(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
}
|
||||
|
||||
BLI_movelisttolist(ed->seqbasep, &last_seq->seqbase);
|
||||
|
|
|
@ -126,8 +126,7 @@ static void rna_Camera_background_images_clear(Camera *cam)
|
|||
|
||||
static void rna_Camera_dof_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr))
|
||||
{
|
||||
/* TODO(sergey): Can be more selective here. */
|
||||
BKE_sequencer_cache_cleanup_all(bmain);
|
||||
BKE_sequence_invalidate_scene_strips(bmain, scene);
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
}
|
||||
|
||||
|
|
|
@ -598,12 +598,14 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
|
|||
MovieClip *clip = (MovieClip *)id;
|
||||
|
||||
BKE_movieclip_reload(bmain, clip);
|
||||
BKE_sequence_invalidate_movieclip_strips(bmain, clip);
|
||||
|
||||
WM_main_add_notifier(NC_MOVIECLIP | ND_DISPLAY, &clip->id);
|
||||
WM_main_add_notifier(NC_MOVIECLIP | NA_EDITED, &clip->id);
|
||||
}
|
||||
else if (GS(id->name) == ID_SCE) {
|
||||
Scene *scene = (Scene *)id;
|
||||
BKE_sequence_invalidate_scene_strips(bmain, scene);
|
||||
|
||||
if (scene->ed) {
|
||||
ColorManagedColorspaceSettings *colorspace_settings = (ColorManagedColorspaceSettings *)
|
||||
|
@ -641,8 +643,6 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
|
|||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
BKE_sequencer_cache_cleanup_all(bmain);
|
||||
}
|
||||
|
||||
static char *rna_ColorManagedSequencerColorspaceSettings_path(PointerRNA *UNUSED(ptr))
|
||||
|
|
|
@ -46,6 +46,8 @@
|
|||
|
||||
# include "ED_clip.h"
|
||||
|
||||
# include "BKE_sequencer.h"
|
||||
|
||||
# include "DNA_screen_types.h"
|
||||
# include "DNA_space_types.h"
|
||||
|
||||
|
@ -71,7 +73,14 @@ static float rna_MovieClip_fps_get(PointerRNA *ptr)
|
|||
return BKE_movieclip_get_fps(clip);
|
||||
}
|
||||
|
||||
static void rna_MovieClipUser_proxy_render_settings_update(Main *UNUSED(bmain),
|
||||
static void rna_MovieClip_use_proxy_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
MovieClip *clip = (MovieClip *)ptr->id.data;
|
||||
BKE_movieclip_clear_cache(clip);
|
||||
BKE_sequence_invalidate_movieclip_strips(bmain, clip);
|
||||
}
|
||||
|
||||
static void rna_MovieClipUser_proxy_render_settings_update(Main *bmain,
|
||||
Scene *UNUSED(scene),
|
||||
PointerRNA *ptr)
|
||||
{
|
||||
|
@ -97,6 +106,7 @@ static void rna_MovieClipUser_proxy_render_settings_update(Main *UNUSED(bmain),
|
|||
|
||||
if (clip && (clip->flag & MCLIP_USE_PROXY)) {
|
||||
BKE_movieclip_clear_cache(clip);
|
||||
BKE_sequence_invalidate_movieclip_strips(bmain, clip);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -336,7 +346,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
|
|||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Use Proxy / Timecode", "Use a preview proxy and/or timecode index for this clip");
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
|
||||
RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_MovieClip_use_proxy_update");
|
||||
|
||||
prop = RNA_def_int_vector(srna,
|
||||
"size",
|
||||
|
|
|
@ -2052,7 +2052,7 @@ static void rna_SceneCamera_update(Main *bmain, Scene *UNUSED(scene), PointerRNA
|
|||
Scene *scene = (Scene *)ptr->id.data;
|
||||
Object *camera = scene->camera;
|
||||
|
||||
BKE_sequencer_cache_cleanup_all(bmain);
|
||||
BKE_sequence_invalidate_scene_strips(bmain, scene);
|
||||
|
||||
if (camera && (camera->type == OB_CAMERA)) {
|
||||
DEG_id_tag_update(&camera->id, ID_RECALC_GEOMETRY);
|
||||
|
|
|
@ -133,6 +133,7 @@ static Sequence *rna_Sequences_new_mask(
|
|||
id_us_plus((ID *)mask);
|
||||
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
|
@ -153,6 +154,7 @@ static Sequence *rna_Sequences_new_scene(
|
|||
id_us_plus((ID *)sce_seq);
|
||||
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
|
@ -181,6 +183,7 @@ static Sequence *rna_Sequences_new_image(ID *id,
|
|||
}
|
||||
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
|
@ -216,6 +219,7 @@ static Sequence *rna_Sequences_new_movie(ID *id,
|
|||
seq->len = IMB_anim_get_duration(an, IMB_TC_RECORD_RUN);
|
||||
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
|
@ -340,6 +344,7 @@ static Sequence *rna_Sequences_new_effect(ID *id,
|
|||
|
||||
BKE_sequence_calc(scene, seq);
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
BKE_sequence_invalidate_cache_composite(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
|
@ -375,7 +380,6 @@ static StripElem *rna_SequenceElements_append(ID *id, Sequence *seq, const char
|
|||
seq->len++;
|
||||
|
||||
BKE_sequence_calc_disp(scene, seq);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
|
||||
|
||||
return se;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "BKE_movieclip.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_studiolight.h"
|
||||
#include "BKE_sequencer.h"
|
||||
|
||||
#include "BLI_math.h"
|
||||
|
||||
|
@ -1974,9 +1975,14 @@ static void rna_SpaceConsole_rect_update(Main *UNUSED(bmain),
|
|||
WM_main_add_notifier(NC_SPACE | ND_SPACE_CONSOLE | NA_EDITED, sc);
|
||||
}
|
||||
|
||||
static void rna_Sequencer_view_type_update(Main *UNUSED(bmain),
|
||||
Scene *UNUSED(scene),
|
||||
PointerRNA *ptr)
|
||||
static void rna_SequenceEditor_update_cache(Main *UNUSED(bmain),
|
||||
Scene *scene,
|
||||
PointerRNA *UNUSED(ptr))
|
||||
{
|
||||
BKE_sequencer_cache_cleanup(scene);
|
||||
}
|
||||
|
||||
static void rna_Sequencer_view_type_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
ScrArea *sa = rna_area_from_space(ptr);
|
||||
ED_area_tag_refresh(sa);
|
||||
|
@ -4498,13 +4504,13 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
|
|||
"Display Channel",
|
||||
"The channel number shown in the image preview. 0 is the result of all strips combined");
|
||||
RNA_def_property_range(prop, -5, MAXSEQ);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
|
||||
|
||||
prop = RNA_def_property(srna, "preview_channels", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
|
||||
RNA_def_property_enum_items(prop, preview_channels_items);
|
||||
RNA_def_property_ui_text(prop, "Display Channels", "Channels of the preview to draw");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
|
||||
|
||||
prop = RNA_def_property(srna, "waveform_display_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
|
||||
|
@ -4524,7 +4530,7 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
|
|||
RNA_def_property_ui_text(prop,
|
||||
"Proxy Render Size",
|
||||
"Display preview using full resolution or different proxy resolutions");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
|
||||
|
||||
/* grease pencil */
|
||||
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
|
||||
|
|
Loading…
Reference in New Issue