FastLED 3.9.15
Loading...
Searching...
No Matches

◆ decodeWithTimeout()

bool fl::Jpeg::decodeWithTimeout ( const JpegConfig & config,
fl::span< const fl::u8 > data,
Frame * frame,
fl::u32 timeout_ms,
float * progress_out = nullptr,
fl::string * error_message = nullptr )
static

Definition at line 380 of file jpeg.cpp.hpp.

386 {
387
388 if (!frame) {
389 if (error_message) {
390 *error_message = "Frame pointer is null";
391 }
392 return false;
393 }
394
395 auto decoder = createDecoder(config);
396 auto stream = fl::make_shared<fl::memorybuf>(data.size());
397 stream->write(data);
398
399 if (!decoder->begin(stream)) {
400 if (error_message) {
401 decoder->hasError(error_message);
402 }
403 return false;
404 }
405
406 fl::u32 start_time = fl::millis();
407 fl::u32 deadline = start_time + timeout_ms;
408
409 // Use callback-based decode with time budget check
410 DecodeResult result = decoder->decode(fl::function<bool()>([&]() {
411 if (mProgressout) {
412 *mProgressout = decoder->getProgress();
413 }
414 return fl::millis() >= deadline; // Yield if time budget exceeded
415 }));
416
418 Frame decoded = decoder->getCurrentFrame();
419
420 if (frame->getWidth() != decoded.getWidth() || frame->getHeight() != decoded.getHeight()) {
421 if (error_message) {
422 *error_message = "Target frame dimensions do not match decoded image dimensions";
423 }
424 return false;
425 }
426
427 frame->copy(decoded);
428 return true;
429 } else if (result == DecodeResult::Error || decoder->hasError()) {
430 if (error_message) {
431 decoder->hasError(error_message);
432 }
433 return false;
434 }
435
436 // Partial completion due to timeout
437 if (mProgressout) {
438 *mProgressout = decoder->getProgress();
439 }
440 return false; // Not complete yet
441}
static JpegDecoderPtr createDecoder(const JpegConfig &config)
Definition jpeg.cpp.hpp:372
constexpr fl::size size() const FL_NOEXCEPT
Definition span.h:458
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
Definition shared_ptr.h:414
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31
DecodeResult
Definition idecoder.h:18

References fl::Frame::copy(), createDecoder(), fl::Error, fl::Frame::getHeight(), fl::Frame::getWidth(), fl::make_shared(), fl::millis(), fl::span< T, Extent >::size(), and fl::Success.

+ Here is the call graph for this function: