19 size_t nFramesInBuffer)
80 i32 frames =
mStream->framesRemaining();
84 fl::u32 micros_per_frame =
86 return (frames * micros_per_frame);
95 now =
mTime->update(now);
103 FL_WARN(
"updateBufferIfNecessary failed");
120 i32 frames_remaining =
mStream->framesRemaining();
121 if (frames_remaining < 0) {
127 fl::u32 micros_per_frame =
129 fl::u32 millis_left =
130 (frames_remaining * micros_per_frame) / 1000;
152 FASTLED_ASSERT(
mTime,
"mTime is null");
161 fl::u32 currFrameNumber = 0;
162 fl::u32 nextFrameNumber = 0;
178 if (!has_current_frame) {
179 frame_numbers.
push_back(currFrameNumber);
182 if (capacity > 1 && !has_next_frame) {
183 frame_numbers.
push_back(nextFrameNumber);
186 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
187 FramePtr recycled_frame;
189 fl::u32 frame_to_erase = 0;
193 FL_WARN(
"get_oldest_frame_number failed");
197 if (!recycled_frame) {
198 FL_WARN(
"erase failed for frame: " << frame_to_erase);
202 fl::u32 frame_to_fetch = frame_numbers[i];
203 if (!recycled_frame) {
208 if (!
mStream->readFrame(recycled_frame.get())) {
216 if (!
mStream->readFrameAt(frame_to_fetch,
217 recycled_frame.get())) {
228 FL_WARN(
"We failed for some other reason");
242 fl::u32 currFrameNumber = 0;
243 fl::u32 nextFrameNumber = 0;
251 if (has_curr_frame && has_next_frame) {
261 frame_numbers.
push_back(currFrameNumber);
265 frame_numbers.
push_back(nextFrameNumber);
268 for (
size_t i = 0; i < frame_numbers.
size(); ++i) {
269 FramePtr recycled_frame;
271 fl::u32 frame_to_erase = 0;
277 FL_WARN(
"get_oldest_frame_number failed");
284 FL_WARN(
"get_newest_frame_number failed");
289 if (!recycled_frame) {
290 FL_WARN(
"erase failed for frame: " << frame_to_erase);
294 fl::u32 frame_to_fetch = frame_numbers[i];
295 if (!recycled_frame) {
301 if (!
mStream->readFrameAt(frame_to_fetch, recycled_frame.get())) {
313 if (!
mStream->readFrameAt(frame_to_fetch,
314 recycled_frame.get())) {
320 FL_WARN(
"We failed for some other reason");
336 const bool forward = now >= prev;
360 return mStream->hasEmbeddedScreenMap();
366 return mStream->embeddedScreenMapJson();
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
void push_back(const T &value) FL_NOEXCEPT
constexpr fl::size size() const FL_NOEXCEPT
fl::u32 microsecondsPerFrame() const
bool updateBufferFromStream(fl::u32 now)
void setFade(fl::u32 fadeInTime, fl::u32 fadeOutTime)
size_t pixelsPerFrame() const
i32 durationMicros() const
bool updateBufferFromFile(fl::u32 now, bool forward)
FrameInterpolatorPtr mFrameInterpolator
VideoImpl(size_t pixelsPerFrame, float fpsVideo, size_t frameHistoryCount=0)
bool needsFrame(fl::u32 now) const
bool hasEmbeddedScreenMap() const FL_NOEXCEPT
void setTimeScale(float timeScale)
const fl::string & embeddedScreenMapJson() const FL_NOEXCEPT
bool draw(fl::u32 now, fl::span< CRGB > leds)
bool updateBufferIfNecessary(fl::u32 prev, fl::u32 now)
void begin(fl::filebuf_ptr h)
Centralized logging categories for FastLED hardware interfaces and subsystems.
constexpr common_type_t< T, U > max(T a, U b) FL_NOEXCEPT
fl::u64 time() FL_NOEXCEPT
Alias for millis64() - returns 64-bit millisecond time.
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
fl::shared_ptr< filebuf > filebuf_ptr
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
Base definition for an LED controller.
@ Black
<div style='background:#000000;width:4em;height:4em;'></div>