Refactor: move MovieClip .blend I/O to IDTypeInfo callbacks
This commit is contained in:
@@ -6920,109 +6920,6 @@ static void lib_link_sound(BlendLibReader *reader, bSound *sound)
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Read ID: Movie Clip
|
||||
* \{ */
|
||||
|
||||
static void direct_link_movieReconstruction(BlendDataReader *reader,
|
||||
MovieTrackingReconstruction *reconstruction)
|
||||
{
|
||||
BLO_read_data_address(reader, &reconstruction->cameras);
|
||||
}
|
||||
|
||||
static void direct_link_movieTracks(BlendDataReader *reader, ListBase *tracksbase)
|
||||
{
|
||||
BLO_read_list(reader, tracksbase);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
BLO_read_data_address(reader, &track->markers);
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_moviePlaneTracks(BlendDataReader *reader, ListBase *plane_tracks_base)
|
||||
{
|
||||
BLO_read_list(reader, plane_tracks_base);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
BLO_read_pointer_array(reader, (void **)&plane_track->point_tracks);
|
||||
for (int i = 0; i < plane_track->point_tracksnr; i++) {
|
||||
BLO_read_data_address(reader, &plane_track->point_tracks[i]);
|
||||
}
|
||||
|
||||
BLO_read_data_address(reader, &plane_track->markers);
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_movieclip(BlendDataReader *reader, MovieClip *clip)
|
||||
{
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
|
||||
BLO_read_data_address(reader, &clip->adt);
|
||||
|
||||
direct_link_movieTracks(reader, &tracking->tracks);
|
||||
direct_link_moviePlaneTracks(reader, &tracking->plane_tracks);
|
||||
direct_link_movieReconstruction(reader, &tracking->reconstruction);
|
||||
|
||||
BLO_read_data_address(reader, &clip->tracking.act_track);
|
||||
BLO_read_data_address(reader, &clip->tracking.act_plane_track);
|
||||
|
||||
clip->anim = NULL;
|
||||
clip->tracking_context = NULL;
|
||||
clip->tracking.stats = NULL;
|
||||
|
||||
/* TODO we could store those in undo cache storage as well, and preserve them instead of
|
||||
* re-creating them... */
|
||||
BLI_listbase_clear(&clip->runtime.gputextures);
|
||||
|
||||
/* Needed for proper versioning, will be NULL for all newer files anyway. */
|
||||
BLO_read_data_address(reader, &clip->tracking.stabilization.rot_track);
|
||||
|
||||
clip->tracking.dopesheet.ok = 0;
|
||||
BLI_listbase_clear(&clip->tracking.dopesheet.channels);
|
||||
BLI_listbase_clear(&clip->tracking.dopesheet.coverage_segments);
|
||||
|
||||
BLO_read_list(reader, &tracking->objects);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingObject *, object, &tracking->objects) {
|
||||
direct_link_movieTracks(reader, &object->tracks);
|
||||
direct_link_moviePlaneTracks(reader, &object->plane_tracks);
|
||||
direct_link_movieReconstruction(reader, &object->reconstruction);
|
||||
}
|
||||
}
|
||||
|
||||
static void lib_link_movieTracks(BlendLibReader *reader, MovieClip *clip, ListBase *tracksbase)
|
||||
{
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
BLO_read_id_address(reader, clip->id.lib, &track->gpd);
|
||||
}
|
||||
}
|
||||
|
||||
static void lib_link_moviePlaneTracks(BlendLibReader *reader,
|
||||
MovieClip *clip,
|
||||
ListBase *tracksbase)
|
||||
{
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, tracksbase) {
|
||||
BLO_read_id_address(reader, clip->id.lib, &plane_track->image);
|
||||
}
|
||||
}
|
||||
|
||||
static void lib_link_movieclip(BlendLibReader *reader, MovieClip *clip)
|
||||
{
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
|
||||
BLO_read_id_address(reader, clip->id.lib, &clip->gpd);
|
||||
|
||||
lib_link_movieTracks(reader, clip, &tracking->tracks);
|
||||
lib_link_moviePlaneTracks(reader, clip, &tracking->plane_tracks);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingObject *, object, &tracking->objects) {
|
||||
lib_link_movieTracks(reader, clip, &object->tracks);
|
||||
lib_link_moviePlaneTracks(reader, clip, &object->plane_tracks);
|
||||
}
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Read ID: Masks
|
||||
* \{ */
|
||||
@@ -7435,9 +7332,6 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
|
||||
case ID_GD:
|
||||
direct_link_gpencil(&reader, (bGPdata *)id);
|
||||
break;
|
||||
case ID_MC:
|
||||
direct_link_movieclip(&reader, (MovieClip *)id);
|
||||
break;
|
||||
case ID_MSK:
|
||||
direct_link_mask(&reader, (Mask *)id);
|
||||
break;
|
||||
@@ -7472,6 +7366,7 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
|
||||
case ID_LS:
|
||||
case ID_TXT:
|
||||
case ID_VF:
|
||||
case ID_MC:
|
||||
/* Do nothing. Handled by IDTypeInfo callback. */
|
||||
break;
|
||||
}
|
||||
@@ -8098,9 +7993,6 @@ static void lib_link_all(FileData *fd, Main *bmain)
|
||||
* 3D viewport may contains pointers to other ID data (like bgpic)! See T41411. */
|
||||
lib_link_screen(&reader, (bScreen *)id);
|
||||
break;
|
||||
case ID_MC:
|
||||
lib_link_movieclip(&reader, (MovieClip *)id);
|
||||
break;
|
||||
case ID_WO:
|
||||
lib_link_world(&reader, (World *)id);
|
||||
break;
|
||||
@@ -8187,6 +8079,7 @@ static void lib_link_all(FileData *fd, Main *bmain)
|
||||
case ID_LS:
|
||||
case ID_TXT:
|
||||
case ID_VF:
|
||||
case ID_MC:
|
||||
/* Do nothing. Handled by IDTypeInfo callback. */
|
||||
break;
|
||||
}
|
||||
@@ -9229,10 +9122,6 @@ static void expand_lightprobe(BlendExpander *UNUSED(expander), LightProbe *UNUSE
|
||||
{
|
||||
}
|
||||
|
||||
static void expand_movieclip(BlendExpander *UNUSED(expander), MovieClip *UNUSED(clip))
|
||||
{
|
||||
}
|
||||
|
||||
static void expand_mask_parent(BlendExpander *expander, MaskParent *parent)
|
||||
{
|
||||
if (parent->id) {
|
||||
@@ -9397,9 +9286,6 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
|
||||
case ID_PA:
|
||||
expand_particlesettings(&expander, (ParticleSettings *)id);
|
||||
break;
|
||||
case ID_MC:
|
||||
expand_movieclip(&expander, (MovieClip *)id);
|
||||
break;
|
||||
case ID_MSK:
|
||||
expand_mask(&expander, (Mask *)id);
|
||||
break;
|
||||
|
||||
@@ -2506,79 +2506,6 @@ static void write_paintcurve(BlendWriter *writer, PaintCurve *pc, const void *id
|
||||
}
|
||||
}
|
||||
|
||||
static void write_movieTracks(BlendWriter *writer, ListBase *tracks)
|
||||
{
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
track = tracks->first;
|
||||
while (track) {
|
||||
BLO_write_struct(writer, MovieTrackingTrack, track);
|
||||
|
||||
if (track->markers) {
|
||||
BLO_write_struct_array(writer, MovieTrackingMarker, track->markersnr, track->markers);
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void write_moviePlaneTracks(BlendWriter *writer, ListBase *plane_tracks_base)
|
||||
{
|
||||
MovieTrackingPlaneTrack *plane_track;
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
BLO_write_struct(writer, MovieTrackingPlaneTrack, plane_track);
|
||||
|
||||
BLO_write_pointer_array(writer, plane_track->point_tracksnr, plane_track->point_tracks);
|
||||
BLO_write_struct_array(
|
||||
writer, MovieTrackingPlaneMarker, plane_track->markersnr, plane_track->markers);
|
||||
}
|
||||
}
|
||||
|
||||
static void write_movieReconstruction(BlendWriter *writer,
|
||||
MovieTrackingReconstruction *reconstruction)
|
||||
{
|
||||
if (reconstruction->camnr) {
|
||||
BLO_write_struct_array(
|
||||
writer, MovieReconstructedCamera, reconstruction->camnr, reconstruction->cameras);
|
||||
}
|
||||
}
|
||||
|
||||
static void write_movieclip(BlendWriter *writer, MovieClip *clip, const void *id_address)
|
||||
{
|
||||
if (clip->id.us > 0 || BLO_write_is_undo(writer)) {
|
||||
/* Clean up, important in undo case to reduce false detection of changed datablocks. */
|
||||
clip->anim = NULL;
|
||||
clip->tracking_context = NULL;
|
||||
clip->tracking.stats = NULL;
|
||||
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingObject *object;
|
||||
|
||||
BLO_write_id_struct(writer, MovieClip, id_address, &clip->id);
|
||||
BKE_id_blend_write(writer, &clip->id);
|
||||
|
||||
if (clip->adt) {
|
||||
BKE_animdata_blend_write(writer, clip->adt);
|
||||
}
|
||||
|
||||
write_movieTracks(writer, &tracking->tracks);
|
||||
write_moviePlaneTracks(writer, &tracking->plane_tracks);
|
||||
write_movieReconstruction(writer, &tracking->reconstruction);
|
||||
|
||||
object = tracking->objects.first;
|
||||
while (object) {
|
||||
BLO_write_struct(writer, MovieTrackingObject, object);
|
||||
|
||||
write_movieTracks(writer, &object->tracks);
|
||||
write_moviePlaneTracks(writer, &object->plane_tracks);
|
||||
write_movieReconstruction(writer, &object->reconstruction);
|
||||
|
||||
object = object->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void write_mask(BlendWriter *writer, Mask *mask, const void *id_address)
|
||||
{
|
||||
if (mask->id.us > 0 || BLO_write_is_undo(writer)) {
|
||||
@@ -3056,9 +2983,6 @@ static bool write_file_handle(Main *mainvar,
|
||||
case ID_SCR:
|
||||
write_screen(&writer, (bScreen *)id_buffer, id);
|
||||
break;
|
||||
case ID_MC:
|
||||
write_movieclip(&writer, (MovieClip *)id_buffer, id);
|
||||
break;
|
||||
case ID_MSK:
|
||||
write_mask(&writer, (Mask *)id_buffer, id);
|
||||
break;
|
||||
@@ -3147,6 +3071,7 @@ static bool write_file_handle(Main *mainvar,
|
||||
case ID_LS:
|
||||
case ID_TXT:
|
||||
case ID_VF:
|
||||
case ID_MC:
|
||||
/* Do nothing, handled in IDTypeInfo callback. */
|
||||
break;
|
||||
case ID_LI:
|
||||
|
||||
Reference in New Issue
Block a user