Refactor: move sequencer modifier .blend I/O to sequencer module

Ref T76372.
This commit is contained in:
2020-11-06 14:27:51 +01:00
parent 94ce248b30
commit dfa027fe09
5 changed files with 83 additions and 59 deletions

View File

@@ -3859,15 +3859,6 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
}
}
static void lib_link_sequence_modifiers(BlendLibReader *reader, Scene *scene, ListBase *lb)
{
LISTBASE_FOREACH (SequenceModifierData *, smd, lb) {
if (smd->mask_id) {
BLO_read_id_address(reader, scene->id.lib, &smd->mask_id);
}
}
}
/* check for cyclic set-scene,
* libs can cause this case which is normally prevented, see (T#####) */
#define USE_SETSCENE_CHECK
@@ -4020,7 +4011,7 @@ static void lib_link_scene(BlendLibReader *reader, Scene *sce)
}
BLI_listbase_clear(&seq->anims);
lib_link_sequence_modifiers(reader, sce, &seq->modifiers);
BKE_sequence_modifier_blend_read_lib(reader, sce, &seq->modifiers);
}
SEQ_ALL_END;
@@ -4124,28 +4115,6 @@ static void direct_link_paint_helper(BlendDataReader *reader, const Scene *scene
}
}
static void direct_link_sequence_modifiers(BlendDataReader *reader, ListBase *lb)
{
BLO_read_list(reader, lb);
LISTBASE_FOREACH (SequenceModifierData *, smd, lb) {
if (smd->mask_sequence) {
BLO_read_data_address(reader, &smd->mask_sequence);
}
if (smd->type == seqModifierType_Curves) {
CurvesModifierData *cmd = (CurvesModifierData *)smd;
BKE_curvemapping_blend_read(reader, &cmd->curve_mapping);
}
else if (smd->type == seqModifierType_HueCorrect) {
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
BKE_curvemapping_blend_read(reader, &hcmd->curve_mapping);
}
}
}
static void direct_link_scene(BlendDataReader *reader, Scene *sce)
{
sce->depsgraph_hash = NULL;
@@ -4292,7 +4261,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
BLO_read_data_address(reader, &seq->strip->color_balance);
}
direct_link_sequence_modifiers(reader, &seq->modifiers);
BKE_sequence_modifier_blend_read_data(reader, &seq->modifiers);
}
SEQ_ALL_END;

View File

@@ -1292,31 +1292,6 @@ static void write_object(BlendWriter *writer, Object *ob, const void *id_address
}
}
static void write_sequence_modifiers(BlendWriter *writer, ListBase *modbase)
{
LISTBASE_FOREACH (SequenceModifierData *, smd, modbase) {
const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type);
if (smti) {
BLO_write_struct_by_name(writer, smti->struct_name, smd);
if (smd->type == seqModifierType_Curves) {
CurvesModifierData *cmd = (CurvesModifierData *)smd;
BKE_curvemapping_blend_write(writer, &cmd->curve_mapping);
}
else if (smd->type == seqModifierType_HueCorrect) {
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
BKE_curvemapping_blend_write(writer, &hcmd->curve_mapping);
}
}
else {
BLO_write_struct(writer, SequenceModifierData, smd);
}
}
}
static void write_scene(BlendWriter *writer, Scene *sce, const void *id_address)
{
if (BLO_write_is_undo(writer)) {
@@ -1467,7 +1442,7 @@ static void write_scene(BlendWriter *writer, Scene *sce, const void *id_address)
IDP_BlendWrite(writer, seq->prop);
}
write_sequence_modifiers(writer, &seq->modifiers);
BKE_sequence_modifier_blend_write(writer, &seq->modifiers);
}
SEQ_ALL_END;

View File

@@ -23,6 +23,7 @@ set(INC
intern
../blenkernel
../blenlib
../blenloader
../blentranslation
../depsgraph
../imbuf
@@ -33,6 +34,9 @@ set(INC
../windowmanager
../../../intern/atomic
../../../intern/guardedalloc
# dna_type_offsets.h
${CMAKE_CURRENT_BINARY_DIR}/../makesdna/intern
)
set(INC_SYS
@@ -72,3 +76,6 @@ if(WITH_AUDASPACE)
endif()
blender_add_lib(bf_sequencer "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
# Needed so we can use dna_type_offsets.h.
add_dependencies(bf_blenkernel bf_dna)

View File

@@ -44,6 +44,9 @@ struct StripElem;
struct TextVars;
struct bContext;
struct bSound;
struct BlendWriter;
struct BlendDataReader;
struct BlendLibReader;
/* Wipe effect */
enum {
@@ -461,6 +464,12 @@ struct ImBuf *BKE_sequence_modifier_apply_stack(const SeqRenderData *context,
void BKE_sequence_modifier_list_copy(struct Sequence *seqn, struct Sequence *seq);
int BKE_sequence_supports_modifiers(struct Sequence *seq);
void BKE_sequence_modifier_blend_write(struct BlendWriter *writer, struct ListBase *modbase);
void BKE_sequence_modifier_blend_read_data(struct BlendDataReader *reader, struct ListBase *lb);
void BKE_sequence_modifier_blend_read_lib(struct BlendLibReader *reader,
struct Scene *scene,
struct ListBase *lb);
/* **********************************************************************
* seqeffects.c
*

View File

@@ -46,6 +46,8 @@
#include "SEQ_sequencer.h"
#include "BLO_read_write.h"
#include "render.h"
#include "sequencer.h"
@@ -1486,3 +1488,65 @@ int BKE_sequence_supports_modifiers(Sequence *seq)
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name .blend File I/O
* \{ */
void BKE_sequence_modifier_blend_write(BlendWriter *writer, ListBase *modbase)
{
LISTBASE_FOREACH (SequenceModifierData *, smd, modbase) {
const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type);
if (smti) {
BLO_write_struct_by_name(writer, smti->struct_name, smd);
if (smd->type == seqModifierType_Curves) {
CurvesModifierData *cmd = (CurvesModifierData *)smd;
BKE_curvemapping_blend_write(writer, &cmd->curve_mapping);
}
else if (smd->type == seqModifierType_HueCorrect) {
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
BKE_curvemapping_blend_write(writer, &hcmd->curve_mapping);
}
}
else {
BLO_write_struct(writer, SequenceModifierData, smd);
}
}
}
void BKE_sequence_modifier_blend_read_data(BlendDataReader *reader, ListBase *lb)
{
BLO_read_list(reader, lb);
LISTBASE_FOREACH (SequenceModifierData *, smd, lb) {
if (smd->mask_sequence) {
BLO_read_data_address(reader, &smd->mask_sequence);
}
if (smd->type == seqModifierType_Curves) {
CurvesModifierData *cmd = (CurvesModifierData *)smd;
BKE_curvemapping_blend_read(reader, &cmd->curve_mapping);
}
else if (smd->type == seqModifierType_HueCorrect) {
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
BKE_curvemapping_blend_read(reader, &hcmd->curve_mapping);
}
}
}
void BKE_sequence_modifier_blend_read_lib(BlendLibReader *reader, Scene *scene, ListBase *lb)
{
LISTBASE_FOREACH (SequenceModifierData *, smd, lb) {
if (smd->mask_id) {
BLO_read_id_address(reader, scene->id.lib, &smd->mask_id);
}
}
}
/** \} */