448 {
449
450 if (!frame || !input_stream) {
451 return false;
452 }
453
455
456 ProgressiveConfig prog_config;
457 prog_config.max_time_per_tick_ms = max_time_per_chunk_ms;
458 decoder->setProgressiveConfig(prog_config);
459
460 if (!decoder->begin(input_stream)) {
461 return false;
462 }
463
464
466 if (mProgresscallback) {
467 yield_func = fl::function<bool()>([&]() {
468 float progress = decoder->getProgress();
469 return !mProgresscallback(progress);
470 });
471 }
473
475 Frame decoded = decoder->getCurrentFrame();
476
477 if (frame->getWidth() != decoded.getWidth() || frame->getHeight() != decoded.getHeight()) {
478 return false;
479 }
480
481 frame->copy(decoded);
482 return true;
483 }
484
485 return false;
486}
static JpegDecoderPtr createDecoder(const JpegConfig &config)
expected< T, E > result
Alias for expected (Rust-style naming)