1414#include " flutter/fml/status_or.h"
1515#include " flutter/fml/trace_event.h"
1616#include " flutter/lib/ui/painting/image.h"
17+ #include " fml/status.h"
1718#if IMPELLER_SUPPORTS_RENDERING
1819#include " flutter/lib/ui/painting/image_encoding_impeller.h"
1920#endif // IMPELLER_SUPPORTS_RENDERING
@@ -64,16 +65,17 @@ void InvokeDataCallback(std::unique_ptr<DartPersistentValue> callback,
6465 DartInvoke (callback->value (), {dart_data, Dart_Null ()});
6566}
6667
67- sk_sp<SkData> CopyImageByteData (const sk_sp<SkImage>& raster_image,
68- SkColorType color_type,
69- SkAlphaType alpha_type) {
68+ fml::StatusOr<sk_sp<SkData>> CopyImageByteData (
69+ const sk_sp<SkImage>& raster_image,
70+ SkColorType color_type,
71+ SkAlphaType alpha_type) {
7072 FML_DCHECK (raster_image);
7173
7274 SkPixmap pixmap;
7375
7476 if (!raster_image->peekPixels (&pixmap)) {
75- FML_LOG (ERROR) << " Could not copy pixels from the raster image. " ;
76- return nullptr ;
77+ return fml::Status (fml::StatusCode:: kInternal ,
78+ " Could not copy pixels from the raster image. " ) ;
7779 }
7880
7981 // The color types already match. No need to swizzle. Return early.
@@ -87,15 +89,15 @@ sk_sp<SkData> CopyImageByteData(const sk_sp<SkImage>& raster_image,
8789 color_type, alpha_type, nullptr ));
8890
8991 if (!surface) {
90- FML_LOG (ERROR) << " Could not set up the surface for swizzle. " ;
91- return nullptr ;
92+ fml::Status (fml::StatusCode:: kInternal ,
93+ " Could not set up the surface for swizzle. " ) ;
9294 }
9395
9496 surface->writePixels (pixmap, 0 , 0 );
9597
9698 if (!surface->peekPixels (&pixmap)) {
97- FML_LOG (ERROR) << " Pixel address is not available. " ;
98- return nullptr ;
99+ return fml::Status (fml::StatusCode:: kInternal ,
100+ " Pixel address is not available. " ) ;
99101 }
100102
101103 return SkData::MakeWithCopy (pixmap.addr (), pixmap.computeByteSize ());
@@ -125,7 +127,8 @@ void EncodeImageAndInvokeDataCallback(
125127 [callback_task = std::move (callback_task), format,
126128 ui_task_runner](const fml::StatusOr<sk_sp<SkImage>>& raster_image) {
127129 if (raster_image.ok ()) {
128- sk_sp<SkData> encoded = EncodeImage (raster_image.value (), format);
130+ fml::StatusOr<sk_sp<SkData>> encoded =
131+ EncodeImage (raster_image.value (), format);
129132 ui_task_runner->PostTask ([callback_task = callback_task,
130133 encoded = std::move (encoded)]() mutable {
131134 callback_task (std::move (encoded));
@@ -199,21 +202,21 @@ Dart_Handle EncodeImage(CanvasImage* canvas_image,
199202 return Dart_Null ();
200203}
201204
202- sk_sp<SkData> EncodeImage (const sk_sp<SkImage>& raster_image,
203- ImageByteFormat format) {
205+ fml::StatusOr< sk_sp<SkData> > EncodeImage (const sk_sp<SkImage>& raster_image,
206+ ImageByteFormat format) {
204207 TRACE_EVENT0 (" flutter" , __FUNCTION__);
205208
206209 if (!raster_image) {
207- return nullptr ;
210+ return fml::Status (fml::StatusCode:: kInternal , " Missing raster image. " ) ;
208211 }
209212
210213 switch (format) {
211214 case kPNG : {
212215 auto png_image = SkPngEncoder::Encode (nullptr , raster_image.get (), {});
213216
214217 if (png_image == nullptr ) {
215- FML_LOG (ERROR) << " Could not convert raster image to PNG. " ;
216- return nullptr ;
218+ return fml::Status (fml::StatusCode:: kInternal ,
219+ " Could not convert raster image to PNG. " ) ;
217220 };
218221 return png_image;
219222 }
@@ -233,8 +236,8 @@ sk_sp<SkData> EncodeImage(const sk_sp<SkImage>& raster_image,
233236 kUnpremul_SkAlphaType );
234237 }
235238
236- FML_LOG (ERROR) << " Unknown error encoding image. " ;
237- return nullptr ;
239+ return fml::Status (fml::StatusCode:: kInternal ,
240+ " Unknown error encoding image. " ) ;
238241}
239242
240243} // namespace flutter
0 commit comments