40Dart_Handle ImageDescriptor::initEncoded(Dart_Handle descriptor_handle,
42 Dart_Handle callback_handle) {
43 if (!Dart_IsClosure(callback_handle)) {
47 if (!immutable_buffer) {
52 auto dart_state = UIDartState::Current();
53 auto registry = dart_state->GetImageGeneratorRegistry();
57 "Failed to access the internal image decoder "
58 "registry on this isolate. Please file a bug on "
59 "https://github.com/flutter/flutter/issues.");
63 registry->CreateCompatibleGenerator(immutable_buffer->
data());
70 auto descriptor = fml::MakeRefCounted<ImageDescriptor>(
71 immutable_buffer->
data(), std::move(generator));
75 descriptor->AssociateWithDartWrapper(descriptor_handle);
81void ImageDescriptor::initRaw(Dart_Handle descriptor_handle,
89 switch (pixel_format) {
90 case PixelFormat::kRGBA8888:
93 case PixelFormat::kBGRA8888:
96 case PixelFormat::kRGBAFloat32:
104 auto descriptor = fml::MakeRefCounted<ImageDescriptor>(
105 data->data(), std::move(image_info),
106 row_bytes == -1 ? std::nullopt : std::optional<size_t>(row_bytes));
107 descriptor->AssociateWithDartWrapper(descriptor_handle);
110void ImageDescriptor::instantiateCodec(Dart_Handle codec_handle,
114 if (!generator_ || generator_->GetFrameCount() == 1) {
115 ui_codec = fml::MakeRefCounted<SingleFrameCodec>(
119 ui_codec = fml::MakeRefCounted<MultiFrameCodec>(generator_);
121 ui_codec->AssociateWithDartWrapper(codec_handle);
std::shared_ptr< const fml::Mapping > data