MCPcopy Create free account
hub / github.com/Tencent/libpag / GetAverageSpeed

Function GetAverageSpeed

exporter/src/export/stream/StreamProperty.cpp:140–224  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

138}
139
140std::vector<float> GetAverageSpeed(AEGP_StreamRefH streamHandle, int index, int dimensionality) {
141 const auto& Suites = GetSuites();
142 const auto& PluginID = GetPluginID();
143
144 std::vector<float> averageSpeedList;
145 AEGP_StreamType streamType;
146 Suites->StreamSuite4()->AEGP_GetStreamType(streamHandle, &streamType);
147 if (streamType == AEGP_StreamType_NO_DATA) {
148 averageSpeedList.push_back(1);
149 return averageSpeedList;
150 }
151
152 AEGP_StreamValue2 lastValue = {};
153 Suites->KeyframeSuite4()->AEGP_GetNewKeyframeValue(PluginID, streamHandle, index - 1, &lastValue);
154 AEGP_StreamValue2 value = {};
155 Suites->KeyframeSuite4()->AEGP_GetNewKeyframeValue(PluginID, streamHandle, index, &value);
156
157 A_Time lastTime = {};
158 Suites->KeyframeSuite4()->AEGP_GetKeyframeTime(streamHandle, index - 1, AEGP_LTimeMode_CompTime,
159 &lastTime);
160 A_Time time = {};
161 Suites->KeyframeSuite4()->AEGP_GetKeyframeTime(streamHandle, index, AEGP_LTimeMode_CompTime,
162 &time);
163 auto duration = static_cast<float>(time.value - lastTime.value) / time.scale;
164
165 switch (streamType) {
166 case AEGP_StreamType_ThreeD_SPATIAL:
167 case AEGP_StreamType_TwoD_SPATIAL: {
168 AEGP_StreamValue2 spatialTemp = {};
169 AEGP_StreamValue2 spatialIn = {};
170 AEGP_StreamValue2 spatialOut = {};
171 Suites->KeyframeSuite4()->AEGP_GetNewKeyframeSpatialTangents(
172 PluginID, streamHandle, index - 1, &spatialTemp, &spatialOut);
173 Suites->KeyframeSuite4()->AEGP_GetNewKeyframeSpatialTangents(PluginID, streamHandle, index,
174 &spatialIn, &spatialTemp);
175 auto curveLength = GetCurveLength(lastValue, spatialOut, spatialIn, value);
176 Suites->StreamSuite4()->AEGP_DisposeStreamValue(&spatialTemp);
177 Suites->StreamSuite4()->AEGP_DisposeStreamValue(&spatialIn);
178 Suites->StreamSuite4()->AEGP_DisposeStreamValue(&spatialOut);
179 averageSpeedList.push_back(curveLength / duration);
180 } break;
181 case AEGP_StreamType_ThreeD:
182 averageSpeedList.push_back(static_cast<float>(value.val.three_d.x - lastValue.val.three_d.x) /
183 duration);
184 averageSpeedList.push_back(static_cast<float>(value.val.three_d.y - lastValue.val.three_d.y) /
185 duration);
186 averageSpeedList.push_back(static_cast<float>(value.val.three_d.z - lastValue.val.three_d.z) /
187 duration);
188 break;
189 case AEGP_StreamType_TwoD:
190 averageSpeedList.push_back(static_cast<float>(value.val.two_d.x - lastValue.val.two_d.x) /
191 duration);
192 averageSpeedList.push_back(static_cast<float>(value.val.two_d.y - lastValue.val.two_d.y) /
193 duration);
194 break;
195 case AEGP_StreamType_OneD:
196 averageSpeedList.push_back(static_cast<float>(value.val.one_d - lastValue.val.one_d) /
197 duration);

Callers 1

GetKeyframeFunction · 0.85

Calls 6

GetSuitesFunction · 0.85
GetPluginIDFunction · 0.85
GetCurveLengthFunction · 0.85
push_backMethod · 0.80
sizeMethod · 0.80
clearMethod · 0.45

Tested by

no test coverage detected