Skip to content

[IOS Xamarin] System.ExecutionEngineException: Attempting to JIT compile method 'void SixLabors.ImageSharp.Formats.Png.PngScanlineProcessor:ProcessRgbScanline<SixLabors.ImageSharp.PixelFormats.Rgba32> #1708

Description

@MichielDG

Prerequisites

  • I have written a descriptive issue title
  • I have verified that I am running the latest version of ImageSharp
  • I have verified if the problem exist in both DEBUG and RELEASE mode
  • I have searched open and closed issues to ensure it has not already been reported

Description

In a xamarin forms for IOS project I'm using the method Image.Load to load a PNG image. I used it with imagedecoder and without but the same issue exists. The error I get is:

PngDecoderCore.ProcessDefilteredScanline[TPixel] (System.ReadOnlySpan`1[T] defilteredScanline, SixLabors.ImageSharp.ImageFrame`1[TPixel] pixels, SixLabors.ImageSharp.Formats.Png.PngMetadata pngMetadata)
System.ExecutionEngineException: Attempting to JIT compile method 'void SixLabors.ImageSharp.Formats.Png.PngScanlineProcessor:ProcessRgbScanline<SixLabors.ImageSharp.PixelFormats.Rgba32> (SixLabors.ImageSharp.Configuration,SixLabors.ImageSharp.Formats.Png.PngHeader&,System.ReadOnlySpan`1<byte>,System.Span`1<SixLabors.ImageSharp.PixelFormats.Rgba32>,int,int,bool,SixLabors.ImageSharp.PixelFormats.Rgb48,SixLabors.ImageSharp.PixelFormats.Rgb24)' while running in aot-only mode. See https://docs.microsoft.com/xamarin/ios/internals/limitations for more information.

Stack traces
SixLabors.ImageSharp.Formats.Png
PngDecoderCore.ProcessDefilteredScanline[TPixel] (System.ReadOnlySpan`1[T] defilteredScanline, SixLabors.ImageSharp.ImageFrame`1[TPixel] pixels, SixLabors.ImageSharp.Formats.Png.PngMetadata pngMetadata)
SixLabors.ImageSharp.Formats.Png
PngDecoderCore.DecodePixelData[TPixel] (System.IO.Compression.DeflateStream compressedStream, SixLabors.ImageSharp.ImageFrame`1[TPixel] image, SixLabors.ImageSharp.Formats.Png.PngMetadata pngMetadata)
SixLabors.ImageSharp.Formats.Png
PngDecoderCore.ReadScanlines[TPixel] (SixLabors.ImageSharp.Formats.Png.PngChunk chunk, SixLabors.ImageSharp.ImageFrame`1[TPixel] image, SixLabors.ImageSharp.Formats.Png.PngMetadata pngMetadata)
SixLabors.ImageSharp.Formats.Png
PngDecoderCore.Decode[TPixel] (SixLabors.ImageSharp.IO.BufferedReadStream stream, System.Threading.CancellationToken cancellationToken)
SixLabors.ImageSharp.Formats
ImageDecoderUtilities.Decode[TPixel] (SixLabors.ImageSharp.Formats.IImageDecoderInternals decoder, SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream, System.Func`3[T1,T2,TResult] largeImageExceptionFactory)
SixLabors.ImageSharp.Formats
ImageDecoderUtilities.Decode[TPixel] (SixLabors.ImageSharp.Formats.IImageDecoderInternals decoder, SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream)
SixLabors.ImageSharp.Formats.Png
PngDecoder.Decode[TPixel] (SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream)
SixLabors.ImageSharp.Formats.Png
PngDecoder.Decode (SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream)
SixLabors.ImageSharp
Image.Decode (System.IO.Stream stream, SixLabors.ImageSharp.Configuration config)
SixLabors.ImageSharp
Image+<>c__DisplayClass137_0.<Load>b__0 (System.IO.Stream s)
SixLabors.ImageSharp
Image.WithSeekableStream[T] (SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream, System.Func`2[T,TResult] action)
SixLabors.ImageSharp
Image.Load (SixLabors.ImageSharp.Configuration configuration, System.IO.Stream stream, SixLabors.ImageSharp.Formats.IImageFormat& format)
SixLabors.ImageSharp
Image.Load (SixLabors.ImageSharp.Configuration configuration, System.Byte[] data, SixLabors.ImageSharp.Formats.IImageFormat& format)
SixLabors.ImageSharp
Image.Load (System.Byte[] data, SixLabors.ImageSharp.Formats.IImageFormat& format)

Steps to Reproduce

Use an IOS Xamarin project and execute the following code:

byte[] imageData; // fill this with a png
var imageDecoder = new SixLabors.ImageSharp.Formats.Png.PngDecoder();
var image = Image.Load(imageData, imageDecoder);
  • ImageSharp version: 1.0.3
  • Environment (Operating system, version and so on): IOS 14.5
  • .NET Standard: 2.0

Activity

  1. JimBobSquarePants commented on Jul 19, 2021

    @JimBobSquarePants
    Member

    You've chopped off the first line of the exception message that tells us the exception thrown can you please supply it?

    Can you also update the target framework. It can't be .NET Standard 2.0 unless it is a class library.

    We'll also need the image.

    Edit.

    Just realized you put the exception in the title. You'll need to raise this upstream. It's an issue with the Xamarin AOT compiler not with ImageSharp. See this note as to why. #1703 (comment)

    We have tried to patch our way around issues so I would suggest trying one of our nightly builds to see if we've managed to avoid this particular issue.

  2. MichielDG commented on Jul 20, 2021

    @MichielDG
    Author

    You've chopped off the first line of the exception message that tells us the exception thrown can you please supply it?

    Can you also update the target framework. It can't be .NET Standard 2.0 unless it is a class library.

    We'll also need the image.

    Edit.

    Just realized you put the exception in the title. You'll need to raise this upstream. It's an issue with the Xamarin AOT compiler not with ImageSharp. See this note as to why. #1703 (comment)

    We have tried to patch our way around issues so I would suggest trying one of our nightly builds to see if we've managed to avoid this particular issue.

    It is implemented in a class library. That class library is used inside an Xamarin Forms IOS project (Xamarin Forms version 5.0.0.2012).
    I just tried SixLabors.ImageSharp version 1.0.4-alpha.0.49. I have the same issue with this version.
    I have the problem with every picture that is taken with the Xamarin.Essentials.MediaPicker in IOS.

  3. JimBobSquarePants commented on Jul 20, 2021

    @JimBobSquarePants
    Member

    Yeah it’s not the image (hence the reason I struck out the comment) it’s Xamarins AOT compiler. You should raise the issue upstream with them.

  4. softlion commented on Aug 11, 2021

    @softlion

    Same issue.

    It's because the template class is too complicated.

    Error: Failed to save measurement (exception) | ExecutionEngineException: Attempting to JIT compile method 'void SixLabors.ImageSharp.Formats.Png.PngScanlineProcessor:ProcessRgbaScanline<SixLabors.ImageSharp.PixelFormats.Rgba32> (SixLabors.ImageSharp.Configuration,SixLabors.ImageSharp.Formats.Png.PngHeader&,System.ReadOnlySpan`1<byte>,System.Span`1<SixLabors.ImageSharp.PixelFormats.Rgba32>,int,int)' while running in aot-only mode. See https://docs.microsoft.com/xamarin/ios/internals/limitations for more information.
    
  5. JimBobSquarePants commented on Aug 11, 2021

    @JimBobSquarePants
    Member

    It's because the template class is too complicated.

    I don’t understand what you mean by this

  6. JimBobSquarePants commented on Aug 11, 2021

    @JimBobSquarePants
    Member

    Has anyone raised the the issue with Xamarin? As I said before. The issue is with their compiler

  7. softlion commented on Aug 11, 2021

    @softlion

    They won't do anything. They are full on MAUI with a new AOT "compiler" (which may have the same limitations).

    AOT can't, sometime, find out all the template classes that are used in a library. As live code generation is refused by apple devices.

  8. JimBobSquarePants commented on Aug 11, 2021

    @JimBobSquarePants
    Member

    We don’t do any live code generation. No emit, nothing dynamic. Raise the issue with them.

  9. softlion commented on Aug 11, 2021

    @softlion

    It's not dynamic code. It's templated classes.

  10. softlion commented on Aug 11, 2021

    @softlion
  11. JimBobSquarePants commented on Aug 11, 2021

    @JimBobSquarePants
    Member

    I’m closing this. The conversation has ceased to be constructive. There are no issues with the ImageSharp codebase

  12. locked as resolved and limited conversation to collaborators on Aug 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions