264 {
265 fl::u32 currFrameNumber = 0;
266 fl::u32 nextFrameNumber = 0;
267 bool needs_frame =
269 if (!needs_frame) {
270 return true;
271 }
274 if (has_curr_frame && has_next_frame) {
275 return true;
276 }
279 return false;
280 }
281
282 fl::FixedVector<fl::u32, 2> frame_numbers;
284 frame_numbers.
push_back(currFrameNumber);
285 }
288 frame_numbers.
push_back(nextFrameNumber);
289 }
290
291 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
292 FramePtr recycled_frame;
294 fl::u32 frame_to_erase = 0;
295 bool ok = false;
298 &frame_to_erase);
299 if (!ok) {
300 FL_WARN(
"get_oldest_frame_number failed");
301 return false;
302 }
303 } else {
305 &frame_to_erase);
306 if (!ok) {
307 FL_WARN(
"get_newest_frame_number failed");
308 return false;
309 }
310 }
312 if (!recycled_frame) {
313 FL_WARN(
"erase failed for frame: " << frame_to_erase);
314 return false;
315 }
316 }
317 fl::u32 frame_to_fetch = frame_numbers[i];
318 if (!recycled_frame) {
319
321 }
322
323 do {
324 if (!
mStream->readFrameAt(frame_to_fetch, recycled_frame.get())) {
326
327 return false;
328 }
332 return false;
333 }
335 frame_to_fetch = 0;
336 if (!
mStream->readFrameAt(frame_to_fetch,
337 recycled_frame.get())) {
339 return false;
340 }
341 break;
342 }
343 FL_WARN(
"We failed for some other reason");
344 return false;
345 }
346 break;
347 } while (false);
348
350 if (!ok) {
352 return false;
353 }
354 }
355 return true;
356}
void push_back(const T &value) FL_NO_EXCEPT
constexpr fl::size size() const FL_NO_EXCEPT
FrameInterpolatorPtr mFrameInterpolator
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
constexpr T && forward(typename remove_reference< T >::type &t) FL_NO_EXCEPT