241 {
242 fl::u32 currFrameNumber = 0;
243 fl::u32 nextFrameNumber = 0;
244 bool needs_frame =
246 if (!needs_frame) {
247 return true;
248 }
251 if (has_curr_frame && has_next_frame) {
252 return true;
253 }
256 return false;
257 }
258
259 fl::FixedVector<fl::u32, 2> frame_numbers;
261 frame_numbers.
push_back(currFrameNumber);
262 }
265 frame_numbers.
push_back(nextFrameNumber);
266 }
267
268 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
269 FramePtr recycled_frame;
271 fl::u32 frame_to_erase = 0;
272 bool ok = false;
275 &frame_to_erase);
276 if (!ok) {
277 FL_WARN(
"get_oldest_frame_number failed");
278 return false;
279 }
280 } else {
282 &frame_to_erase);
283 if (!ok) {
284 FL_WARN(
"get_newest_frame_number failed");
285 return false;
286 }
287 }
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
298 }
299
300 do {
301 if (!
mStream->readFrameAt(frame_to_fetch, recycled_frame.get())) {
303
304 return false;
305 }
309 return false;
310 }
312 frame_to_fetch = 0;
313 if (!
mStream->readFrameAt(frame_to_fetch,
314 recycled_frame.get())) {
316 return false;
317 }
318 break;
319 }
320 FL_WARN(
"We failed for some other reason");
321 return false;
322 }
323 break;
324 } while (false);
325
327 if (!ok) {
329 return false;
330 }
331 }
332 return true;
333}
void push_back(const T &value) FL_NOEXCEPT
constexpr fl::size size() const FL_NOEXCEPT
FrameInterpolatorPtr mFrameInterpolator
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT