386 {
387
388 if (!frame) {
389 if (error_message) {
390 *error_message = "Frame pointer is null";
391 }
392 return false;
393 }
394
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
407 fl::u32 deadline = start_time + timeout_ms;
408
409
411 if (mProgressout) {
412 *mProgressout = decoder->getProgress();
413 }
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;
430 if (error_message) {
431 decoder->hasError(error_message);
432 }
433 return false;
434 }
435
436
437 if (mProgressout) {
438 *mProgressout = decoder->getProgress();
439 }
440 return false;
441}
static JpegDecoderPtr createDecoder(const JpegConfig &config)
constexpr fl::size size() const FL_NOEXCEPT
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
expected< T, E > result
Alias for expected (Rust-style naming)