MCPcopy Create free account
hub / github.com/FastLED/FastLED / updateBufferFromFile

Method updateBufferFromFile

src/fl/video/video_impl.cpp.hpp:241–333  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

239}
240
241bool VideoImpl::updateBufferFromFile(fl::u32 now, bool forward) {
242 fl::u32 currFrameNumber = 0;
243 fl::u32 nextFrameNumber = 0;
244 bool needs_frame =
245 mFrameInterpolator->needsFrame(now, &currFrameNumber, &nextFrameNumber);
246 if (!needs_frame) {
247 return true;
248 }
249 bool has_curr_frame = mFrameInterpolator->has(currFrameNumber);
250 bool has_next_frame = mFrameInterpolator->has(nextFrameNumber);
251 if (has_curr_frame && has_next_frame) {
252 return true;
253 }
254 if (mFrameInterpolator->capacity() == 0) {
255 FL_WARN("capacity == 0");
256 return false;
257 }
258
259 fl::FixedVector<fl::u32, 2> frame_numbers;
260 if (!mFrameInterpolator->has(currFrameNumber)) {
261 frame_numbers.push_back(currFrameNumber);
262 }
263 if (mFrameInterpolator->capacity() > 1 &&
264 !mFrameInterpolator->has(nextFrameNumber)) {
265 frame_numbers.push_back(nextFrameNumber);
266 }
267
268 for (size_t i = 0; i < frame_numbers.size(); ++i) {
269 FramePtr recycled_frame;
270 if (mFrameInterpolator->full()) {
271 fl::u32 frame_to_erase = 0;
272 bool ok = false;
273 if (forward) {
274 ok = mFrameInterpolator->get_oldest_frame_number(
275 &frame_to_erase);
276 if (!ok) {
277 FL_WARN("get_oldest_frame_number failed");
278 return false;
279 }
280 } else {
281 ok = mFrameInterpolator->get_newest_frame_number(
282 &frame_to_erase);
283 if (!ok) {
284 FL_WARN("get_newest_frame_number failed");
285 return false;
286 }
287 }
288 recycled_frame = mFrameInterpolator->erase(frame_to_erase);
289 if (!recycled_frame) {
290 FL_WARN("erase failed for frame: " << frame_to_erase);
291 return false;
292 }
293 }
294 fl::u32 frame_to_fetch = frame_numbers[i];
295 if (!recycled_frame) {
296 // Happens when we are not full and we need to allocate a new frame.
297 recycled_frame = fl::make_shared<Frame>(mPixelsPerFrame);
298 }

Callers

nothing calls this directly

Calls 15

readFrameAtMethod · 0.80
atEndMethod · 0.80
needsFrameMethod · 0.45
hasMethod · 0.45
capacityMethod · 0.45
push_backMethod · 0.45
sizeMethod · 0.45
fullMethod · 0.45
eraseMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected