151 {
152 FASTLED_ASSERT(
mTime,
"mTime is null");
155 return false;
156 }
158 return false;
159 }
160
161 fl::u32 currFrameNumber = 0;
162 fl::u32 nextFrameNumber = 0;
163 bool needs_frame =
165 if (!needs_frame) {
166 return true;
167 }
168
171 return false;
172 }
173
176
177 fl::FixedVector<fl::u32, 2> frame_numbers;
178 if (!has_current_frame) {
179 frame_numbers.
push_back(currFrameNumber);
180 }
182 if (capacity > 1 && !has_next_frame) {
183 frame_numbers.
push_back(nextFrameNumber);
184 }
185
186 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
187 FramePtr recycled_frame;
189 fl::u32 frame_to_erase = 0;
190 bool ok =
192 if (!ok) {
193 FL_WARN(
"get_oldest_frame_number failed");
194 return false;
195 }
197 if (!recycled_frame) {
198 FL_WARN(
"erase failed for frame: " << frame_to_erase);
199 return false;
200 }
201 }
202 fl::u32 frame_to_fetch = frame_numbers[i];
203 if (!recycled_frame) {
204
206 }
207
208 if (!
mStream->readFrame(recycled_frame.get())) {
212 return false;
213 }
215 frame_to_fetch = 0;
216 if (!
mStream->readFrameAt(frame_to_fetch,
217 recycled_frame.get())) {
219 return false;
220 }
221 } else {
222
223
224
226 return true;
227 }
228 FL_WARN(
"We failed for some other reason");
229 return false;
230 }
231 }
233 if (!ok) {
235 return false;
236 }
237 }
238 return true;
239}
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