MCPcopy Create free account
hub / github.com/FastLED/FastLED / updateBufferFromStream

Method updateBufferFromStream

src/fl/video/video_impl.cpp.hpp:151–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151bool VideoImpl::updateBufferFromStream(fl::u32 now) {
152 FASTLED_ASSERT(mTime, "mTime is null");
153 if (!mStream) {
154 FL_WARN("no stream");
155 return false;
156 }
157 if (mStream->atEnd()) {
158 return false;
159 }
160
161 fl::u32 currFrameNumber = 0;
162 fl::u32 nextFrameNumber = 0;
163 bool needs_frame =
164 mFrameInterpolator->needsFrame(now, &currFrameNumber, &nextFrameNumber);
165 if (!needs_frame) {
166 return true;
167 }
168
169 if (mFrameInterpolator->capacity() == 0) {
170 FL_WARN("capacity == 0");
171 return false;
172 }
173
174 const bool has_current_frame = mFrameInterpolator->has(currFrameNumber);
175 const bool has_next_frame = mFrameInterpolator->has(nextFrameNumber);
176
177 fl::FixedVector<fl::u32, 2> frame_numbers;
178 if (!has_current_frame) {
179 frame_numbers.push_back(currFrameNumber);
180 }
181 size_t capacity = mFrameInterpolator->capacity();
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;
188 if (mFrameInterpolator->full()) {
189 fl::u32 frame_to_erase = 0;
190 bool ok =
191 mFrameInterpolator->get_oldest_frame_number(&frame_to_erase);
192 if (!ok) {
193 FL_WARN("get_oldest_frame_number failed");
194 return false;
195 }
196 recycled_frame = mFrameInterpolator->erase(frame_to_erase);
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 // Happens when we are not full and we need to allocate a new frame.
205 recycled_frame = fl::make_shared<Frame>(mPixelsPerFrame);
206 }
207
208 if (!mStream->readFrame(recycled_frame.get())) {

Callers

nothing calls this directly

Calls 15

atEndMethod · 0.80
readFrameMethod · 0.80
readFrameAtMethod · 0.80
needsFrameMethod · 0.45
capacityMethod · 0.45
hasMethod · 0.45
push_backMethod · 0.45
sizeMethod · 0.45
fullMethod · 0.45
eraseMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected