174 {
175 FASTLED_ASSERT(
mTime,
"mTime is null");
178 return false;
179 }
181 return false;
182 }
183
184 fl::u32 currFrameNumber = 0;
185 fl::u32 nextFrameNumber = 0;
186 bool needs_frame =
188 if (!needs_frame) {
189 return true;
190 }
191
194 return false;
195 }
196
199
200 fl::FixedVector<fl::u32, 2> frame_numbers;
201 if (!has_current_frame) {
202 frame_numbers.
push_back(currFrameNumber);
203 }
205 if (capacity > 1 && !has_next_frame) {
206 frame_numbers.
push_back(nextFrameNumber);
207 }
208
209 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
210 FramePtr recycled_frame;
212 fl::u32 frame_to_erase = 0;
213 bool ok =
215 if (!ok) {
216 FL_WARN(
"get_oldest_frame_number failed");
217 return false;
218 }
220 if (!recycled_frame) {
221 FL_WARN(
"erase failed for frame: " << frame_to_erase);
222 return false;
223 }
224 }
225 fl::u32 frame_to_fetch = frame_numbers[i];
226 if (!recycled_frame) {
227
229 }
230
231 if (!
mStream->readFrame(recycled_frame.get())) {
235 return false;
236 }
238 frame_to_fetch = 0;
239 if (!
mStream->readFrameAt(frame_to_fetch,
240 recycled_frame.get())) {
242 return false;
243 }
244 } else {
245
246
247
249 return true;
250 }
251 FL_WARN(
"We failed for some other reason");
252 return false;
253 }
254 }
256 if (!ok) {
258 return false;
259 }
260 }
261 return true;
262}
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