VSE: Free animation strip data if they are not visible
Previously we would only free animation strip data when doing final renders. If not doing a final render or simply just playing back videos in the VSE, we would not free decoders or non VSE cache data from the strips. This would lead to memory usage exploding in complex VSE scenes. Now we instead use the dumb apporach of freeing everything that is not currently visible.
This commit is contained in:
parent
0a1a173e57
commit
88c02bf826
Notes:
blender-bot
2024-01-16 18:05:25 +01:00
Referenced by commit b647509913
, Fix T93844: High memory usage during VSE preview
|
@ -1440,7 +1440,7 @@ static void do_render_full_pipeline(Render *re)
|
|||
|
||||
/* ensure no images are in memory from previous animated sequences */
|
||||
BKE_image_all_free_anim_ibufs(re->main, re->r.cfra);
|
||||
SEQ_relations_free_all_anim_ibufs(re->scene, re->r.cfra);
|
||||
SEQ_cache_cleanup(re->scene);
|
||||
|
||||
if (RE_engine_render(re, true)) {
|
||||
/* in this case external render overrides all */
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
#include "SEQ_iterator.h"
|
||||
#include "SEQ_modifier.h"
|
||||
#include "SEQ_proxy.h"
|
||||
#include "SEQ_relations.h"
|
||||
#include "SEQ_render.h"
|
||||
#include "SEQ_sequencer.h"
|
||||
#include "SEQ_time.h"
|
||||
|
@ -1882,6 +1883,8 @@ ImBuf *SEQ_render_give_ibuf(const SeqRenderData *context, float timeline_frame,
|
|||
}
|
||||
|
||||
seq_cache_free_temp_cache(context->scene, context->task_id, timeline_frame);
|
||||
/* Make sure we only keep the `anim` data for strips that are in view. */
|
||||
SEQ_relations_free_all_anim_ibufs(context->scene, timeline_frame);
|
||||
|
||||
if (count && !out) {
|
||||
BLI_mutex_lock(&seq_render_mutex);
|
||||
|
|
|
@ -354,7 +354,6 @@ void SEQ_relations_update_changed_seq_and_deps(Scene *scene,
|
|||
}
|
||||
}
|
||||
|
||||
/* Unused */
|
||||
static void sequencer_all_free_anim_ibufs(ListBase *seqbase, int timeline_frame)
|
||||
{
|
||||
for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) {
|
||||
|
@ -367,7 +366,6 @@ static void sequencer_all_free_anim_ibufs(ListBase *seqbase, int timeline_frame)
|
|||
}
|
||||
}
|
||||
|
||||
/* Unused */
|
||||
void SEQ_relations_free_all_anim_ibufs(Scene *scene, int timeline_frame)
|
||||
{
|
||||
Editing *ed = SEQ_editing_get(scene);
|
||||
|
@ -375,7 +373,6 @@ void SEQ_relations_free_all_anim_ibufs(Scene *scene, int timeline_frame)
|
|||
return;
|
||||
}
|
||||
sequencer_all_free_anim_ibufs(&ed->seqbase, timeline_frame);
|
||||
SEQ_cache_cleanup(scene);
|
||||
}
|
||||
|
||||
static Sequence *sequencer_check_scene_recursion(Scene *scene, ListBase *seqbase)
|
||||
|
|
Loading…
Reference in New Issue