|
7 | 7 | #include <array> |
8 | 8 | #include <span> |
9 | 9 |
|
| 10 | +#include <AEFX_SuiteHelper.h> |
10 | 11 | #include <AEGP_SuiteHandler.h> |
11 | 12 | #include <AE_EffectCB.h> |
12 | 13 | #include <AE_EffectCBSuites.h> |
@@ -726,6 +727,8 @@ PF_Err SequenceSetup( |
726 | 727 | = static_cast<Vulkanator::GlobalParams*>( |
727 | 728 | suites.HandleSuite1()->host_lock_handle(in_data->global_data)); |
728 | 729 |
|
| 730 | + std::scoped_lock Lock(GlobalParam->GlobalLock); |
| 731 | + |
729 | 732 | // Cleanup previous sequence datas |
730 | 733 | if( auto SequenceParam = reinterpret_cast<Vulkanator::SequenceParams*>( |
731 | 734 | out_data->sequence_data); |
@@ -1127,9 +1130,34 @@ PF_Err SmartRender( |
1127 | 1130 | // Lock global handle |
1128 | 1131 | Vulkanator::GlobalParams* GlobalParam |
1129 | 1132 | = reinterpret_cast<Vulkanator::GlobalParams*>(*in_data->global_data); |
1130 | | - Vulkanator::SequenceParams* SequenceParam |
1131 | | - = reinterpret_cast<Vulkanator::SequenceParams*>( |
| 1133 | + |
| 1134 | + std::scoped_lock Lock(GlobalParam->GlobalLock); |
| 1135 | + |
| 1136 | + // Vulkanator::SequenceParams const* SequenceParam = nullptr; |
| 1137 | + Vulkanator::SequenceParams* SequenceParam = nullptr; |
| 1138 | + |
| 1139 | + // If MFR is enabled, then `in_data->sequence_data` is null and we must use |
| 1140 | + // the suites to get sequence data. If MFR is disabled, or when running on a |
| 1141 | + // pre-MFR After Effects, then `in_data->sequence_data` has valid date |
| 1142 | + if( in_data->sequence_data ) |
| 1143 | + { |
| 1144 | + SequenceParam = reinterpret_cast<Vulkanator::SequenceParams*>( |
1132 | 1145 | *in_data->sequence_data); |
| 1146 | + } |
| 1147 | + else |
| 1148 | + { |
| 1149 | + AEFX_SuiteScoper<PF_EffectSequenceDataSuite1> seqdata_suite |
| 1150 | + = AEFX_SuiteScoper<PF_EffectSequenceDataSuite1>( |
| 1151 | + in_data, kPFEffectSequenceDataSuite, |
| 1152 | + kPFEffectSequenceDataSuiteVersion1, out_data); |
| 1153 | + |
| 1154 | + PF_ConstHandle const_seq; |
| 1155 | + seqdata_suite->PF_GetConstSequenceData(in_data->effect_ref, &const_seq); |
| 1156 | + |
| 1157 | + SequenceParam = const_cast<Vulkanator::SequenceParams*>( |
| 1158 | + (const Vulkanator::SequenceParams*)*const_seq); |
| 1159 | + } |
| 1160 | + |
1133 | 1161 | Vulkanator::RenderParams* FrameParam |
1134 | 1162 | = reinterpret_cast<Vulkanator::RenderParams*>( |
1135 | 1163 | extra->input->pre_render_data); |
|
0 commit comments