33 if (!Dart_IsClosure(callback_handle)) {
37 if (status_ == Status::kComplete) {
38 if (!cached_image_->image()) {
49 pending_callbacks_.emplace_back(dart_state, callback_handle);
51 if (status_ == Status::kInProgress) {
57 auto decoder = dart_state->GetImageDecoder();
61 "Failed to access the internal image decoder "
62 "registry on this isolate. Please file a bug on "
63 "https://github.com/flutter/flutter/issues.");
76 {.target_width = target_width_,
77 .target_height = target_height_,
78 .target_format = target_format_},
79 [raw_codec_ref](
const auto&
image,
const auto& decode_error) {
80 std::unique_ptr<fml::RefPtr<SingleFrameCodec>> codec_ref(raw_codec_ref);
83 auto state = codec->pending_callbacks_.front().dart_state().lock();
95 auto canvas_image = fml::MakeRefCounted<CanvasImage>();
96 canvas_image->set_image(std::move(
image));
98 codec->cached_image_ = std::move(canvas_image);
103 codec->status_ = Status::kComplete;
107 codec->pending_callbacks_) {
109 {tonic::ToDart(codec->cached_image_),
110 tonic::ToDart(0), tonic::ToDart(decode_error)});
112 codec->pending_callbacks_.clear();
117 descriptor_ =
nullptr;
119 status_ = Status::kInProgress;