Skip to content

Mono AOT decoder workaround for slow jpeg decoding. - #2762

Merged
JimBobSquarePants merged 5 commits into
release/3.1.xfrom
js/mono-aot-decoder-workaround
Jul 31, 2024
Merged

JimBobSquarePants merged 5 commits into
release/3.1.xfrom
js/mono-aot-decoder-workaround

Conversation

@JimBobSquarePants

@JimBobSquarePants JimBobSquarePants commented Jul 3, 2024 •

Copy link
Copy Markdown
Member

Prerequisites

  • I have written a descriptive pull-request title
  • I have verified that there are no overlapping pull-requests open
  • I have verified that I am following the existing coding patterns and practice as demonstrated in the repository. These follow strict Stylecop rules 👮.
  • I have provided test coverage for my change (where applicable)

Description

This PR is an attempt to work around issues found with the Mono AOT compiler which causes slow performance on IOS Android

dotnet/runtime#71210

In the linked Issue, Analysis from the Mono team highlighted this indirection as a culprit.

The AOT compiler does appear to have problems figuring out which instances to generate. In this specific case, the caller is
ImageDecoderUtilities:Decode<Rgba32> which calls IImageDecoderInternals::Decode on an argument. So in theory, the aot compiler could figure out that the call could possible go to JpegDecoderCore::Decode<Rgba32> and generate that instance. Currently, this kind of analysis is not done.

This PR removes that indirection completely by introducing an internal base class, ImageDecoderCore for all XXDecoderCore instances. In addition, seeding has been introduced for SpectralConverter<TPixel> and others.

This is currently untested but I'm confident that this should improve matters.

@beeradmoore

beeradmoore commented Jul 10, 2024 •

Copy link
Copy Markdown

I don't think this PR had any impact for what I have tested so far (assuming I built the PR correctly), but I also didn't see the super slow loads the initial person reported. I do still need to test Android.

I have a test repo here. It is a .NET 8 MAUI application. I will test Windows and Mac out of curiosity. I won't test Xamarin.Forms (Xamarin.iOS/Xamarin.Android)

The readme has instructions on how I built this PR into a local nuget package, and how I tested the project on my iPhone 15 Pro Max in both debug and release mode.

The test image I am using is located in ImageSharpMAUITest/ImageSharpMAUITest/Resources/Raw/sloth.jpg

The ImageSharp code I am using is here.

I am loading the image from a stream in the raw folder. I don't think there is any overhead from loading it like this instead of passing file on disk.

using (var stream = await FileSystem.OpenAppPackageFileAsync("sloth.jpg"))
{
    using (var image = await SixLabors.ImageSharp.Image.LoadAsync(stream))
    {
        ...
    }
}

Results

Updating these results as they come in

Debug (this PR)

Device JpgLoad JpgResize PngLoad PngResize
iPhone 3032.1ms 4060.1ms 26.2ms 73.9ms
iOS Simulator 2884.9ms 3615.2ms 21.7ms 61.5ms
Android 14342.7ms 18562.1ms 123.8ms 348ms
Android Emulator 3193.1ms 3933ms 48.3ms 88.7ms
macOS 2708.2ms 3512.4ms 21.4ms 60.9ms
Windows 106.6ms 82.3ms 26.3ms 17.1ms

Debug (3.1.4)

Device JpgLoad JpgResize PngLoad PngResize
iPhone 2932.4ms 3895.8ms 25ms 67.7ms
iOS Simulator 2794.2ms 3555.1ms 21.9ms 61.4ms
Android 14289.4ms 18504.5ms 122.7ms 346.4ms
Android Emulator 3027.6ms 4075.2ms 48.9ms 97.6ms
macOS 2701.9ms 3425.3ms 20.6ms 59.3ms
Windows 98.5ms 86.4ms 22.4ms 19.7ms

Release (this pr)

Device JpgLoad JpgResize PngLoad PngResize
iPhone 62.7ms 80.3ms 4.2ms 4ms
iOS Simulator 64.3ms 81.3ms 3.7ms 4.1ms
Android 1134.5ms 1369.2ms 33.7ms 41.6ms
Android Emulator 243.3ms 300.8ms 19.6ms 25.3ms
macOS 188.5ms 233.9ms 4.9ms 7ms
Windows 149.3ms 96.4ms 16.9ms 14.7ms

Release (3.1.4)

Device JpgLoad JpgResize PngLoad PngResize
iPhone 61.2ms 78.8ms 4ms 4ms
iOS Simulator 61.1ms 79.6ms 3.4ms 4.1ms
Android 1121.5ms 1349.6ms 35.1ms 43ms
Android Emulator 227.8ms 287.9ms 16.7ms 13.5ms
macOS 181.5ms 230.1ms 5.2ms 7.3ms
Windows 153.1ms 146.4ms 17.2ms 15ms

Test devices

Device Hardware OS
iPhone iPhone 15 Pro Max 17.5.1
iOS Simulator iPhone 15 17.4
Android Pixel 2 XL Android 14
Android Emulator Pixel 3a Android 14
macOS MacBook Pro M3 Max Sonoma 14.5
Windows AMD 3300X + RTX 3060 Windows 11 23H2

@beeradmoore

Copy link
Copy Markdown

Added all the numbers.

My takeaway from this (as someone who uses images, but doesn't really know much about image encoding) is:

  • Jpg is way slower than png
  • Debug mode in almost all platforms is slower than I would have expected
  • Jpgs on an android device in debug mode is wild
  • Shocked to see jpg on android emulator be faster than android on device
  • I don't see any noticeable difference in the results of this PR and the currently published 3.1.4. I don't know if there is meant to be additional changes to using AOT mode for the tests or something.

More than happy to add and run more tests as requested. Attaching the raw results numbers below (if anyone wants to see the results per run).

ImageSharpMAUITest-Results.zip

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

@beeradmoore I've been doing some R&D in order to understand the Android performance. I can't see a configuration value in your sample to enable LLVM which is required for maximum performance. Did I miss something?

https://learn.microsoft.com/en-us/dotnet/android/building-apps/build-properties#enablellvm

@beeradmoore

Copy link
Copy Markdown

I did not.

I added

    <PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android' AND '$(Configuration)' == 'Release'">
        <EnableLLVM>true</EnableLLVM>
    </PropertyGroup>

And during executing all the tests it gets to about 15/40 (half way through jpg load and resize run) and it crashes with

07-16 12:36:03.133  1730  1778 W WindowManager: Exception thrown during dispatchAppVisibility Window{647a9a8 u0 com.beeradmoore.imagesharpmauitest/crc64df7e0c4a761c65fa.MainActivity EXITING}
07-16 12:36:03.133  1730  1778 W WindowManager: android.os.DeadObjectException
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.os.BinderProxy.transactNative(Native Method)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.os.BinderProxy.transact(BinderProxy.java:586)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:552)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3217)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1293)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:403)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:7100)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:5820)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5762)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.Transition.finishTransition(Transition.java:1257)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.TransitionController.finishTransition(TransitionController.java:925)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.WindowOrganizerController.finishTransition(WindowOrganizerController.java:489)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.window.IWindowOrganizerController$Stub.onTransact(IWindowOrganizerController.java:278)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at com.android.server.wm.WindowOrganizerController.onTransact(WindowOrganizerController.java:199)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.os.Binder.execTransactInternal(Binder.java:1500)
07-16 12:36:03.133  1730  1778 W WindowManager: 	at android.os.Binder.execTransact(Binder.java:1444)

This is new to me and I have no idea what or why it is doing this. I have re-installed AndroidOS between then and now, this could be related, it could be AOT compile. Tonight I can revert back to not having LLVM and see if to happens again or not. It could also be I did no have developer mode enabled so maybe it was going to sleep in 15sec 🤷‍♂️

I did a single run of with v3.1.4 in release mode running the JpgLoad test and got 1116.8ms. For the local nuget I got 1126.6ms.

I referred to the previous thread and grabbed info from this comment,

and just put

<EnableLLVM>true</EnableLLVM>
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>

in my main PropertyGroup to ensure it is enabled.

With that I got 516ms for the local nuget. Huge improvement!

I can test again tonight to see what ones of those above properties are required, if my release Android targeting below was working as intended.

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

@beeradmoore Did you ever get those updated Android benchmarks?

@beeradmoore

Copy link
Copy Markdown

@JimBobSquarePants , aside from that single test I did not. Creating a reminder to do it this weekend.

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

Thanks @beeradmoore very much appreciated!

@beeradmoore

Copy link
Copy Markdown

So some more checking into things. For these results I will call things run #1 - #6 with each run having a different csproj config. These different configs can also impact filesize.

I think we are also focusing on changes to Android, so these tests are only on Release mode on my physical Pixel 2 XL. If there are any specific AOT flags or anything you want me to re-run on other platforms just let me know what ones.

Settings used for each run:

Run 1

Of the 3 options listed in the other runs, this run did not have them in the csproj. I did not lookk what the net8.0-android defaults are for release mode.

Run 2

<EnableLLVM>true</EnableLLVM>

This resulted in a crush mid way through the second test. While the tests could be ran individually there is an issue if you can't run them back to back so I am considering these invalid.

07-27 14:06:30.804 7895 7961 E gesharpmauitest: * Assertion at /__w/1/s/src/mono/mono/mini/aot-runtime.c:5220, condition `plt_entry' not met
07-27 14:06:30.806 7895 7961 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 7961 (.NET TP Worker), pid 7895 (gesharpmauitest)

More info on these crashes below.

Run 3

<EnableLLVM>true</EnableLLVM>
<RunAOTCompilation>true</RunAOTCompilation>

This also resulted in a crash.

07-27 14:12:55.543 8325 8359 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 8359 (.NET TP Gate), pid 8325 (gesharpmauitest)
07-27 14:12:55.543 8325 8378 E gesharpmauitest: * Assertion at /__w/1/s/src/mono/mono/mini/aot-runtime.c:5220, condition plt_entry' not met 07-27 14:12:55.543 8325 8358 E gesharpmauitest: * Assertion at /__w/1/s/src/mono/mono/mini/aot-runtime.c:5220, condition plt_entry' not met

More info on these crashes below.

Run 4

<EnableLLVM>true</EnableLLVM>
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>

Run 5

<EnableLLVM>true</EnableLLVM>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>

Same as Run 4, but without the RunAOTCompilation defined. I did not check the defaults for these values, but size and performance appears teh same so I am going to assume RunAOTCompilation is defaulting to true.

Run 6

<EnableLLVM>false</EnableLLVM>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>

This is the same as run 5 but it swaps EnableLLVM and AndroidEnableProfiledAot around. Size and results appears this is the default when no params are defined.

Results (3.1.4)

Run JpgLoad JpgResize PngLoad PngResize aab size
1 1114.9ms 1353.9ms 34.0ms 41.2ms 17.8 MB
2 Crash Crash Crash Crash 17.7 MB
3 Crash Crash Crash Crash 17.7 MB
4 515.3ms 712.2ms 26.9ms 35.4ms 24.1 MB
5 512.0ms 698.8ms 26.6ms 33.9ms 24.1 MB
6 1116.4ms 1355.3ms 33.9ms 40.9ms 17.8 MB

Results (this pr)

Run JpgLoad JpgResize PngLoad PngResize aab size
1 1124.5ms 1361.0ms 33.2ms 41.0ms 17.8 MB
2 Crash Crash Crash Crash 17.7 MB
3 Crash Crash Crash Crash 17.7 MB
4 510.1ms 709.8ms 27.2ms 34.5ms 24.1 MB
5 512.7ms 713.2ms 26.8ms 34.8ms 24.1 MB
6 1123.1ms 1352.3ms 34.1ms 40.5ms 17.8 MB

Crashes

The crashes looks like they are discussed in this issue in the dotnet runtime repo.

Conclusion

My takeaway from this is the currently release 3.1.4 and this PR perform the same, at least for the limited tests I am doing. Other situations, or possibly other devices, may perform differently. What the new code is doing is above my skillset, but I don't see it degrading performance so I don't think its a bad change.

If people want more performance with ImageSharp for Android then they will get it at an incrased filesize by enabling these options for release mode Android builds.

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android' AND '$(Configuration)' == 'Release'">
    <EnableLLVM>true</EnableLLVM>
    <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>

Using EnableLLVM is likely not enough as you could still have crashes, but those crashes may not appear all the time. EG. I can run the second test individually and it will pass, but if I run all tests back to back it will crash halfway through the second set of tests.

I am unsure if there are more optimisations you can do, or if the next step of improvemnets requires the dotnet team to do things on their end.

I am also unsure if writing C# code using Android SDK for image manipulation gets it going any faster or if I am now approching limits on my 7 year old phone. Doing so would then require more devtime to write platform specific code for every single image manipulation piece I'd do for each platform I'd run my app on. It's also then just a lot more code in general to maintain. Whereas ImageSharp appears to do a great job across the board, except for Android where it just does an ok job OR I just use pngs everywhere, becaause they were always fast everywhere 😅

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

Thanks @beeradmoore for the monumental effort you've put in here. I think this should actually enable us to close off several longstanding issues.

Judging by this comment and this comment the following combination should be the recommended one for Android.

<EnableLLVM>true</EnableLLVM>
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>

iOS performance looks fantastic and Android, I imagine will improve with new phones and codegen improvements. I think most complaints are either outdated or the result of miscofiguration.

Adding the Android and iOS specific MAUI configuration from your sample with an explanation to this section of the docs will help eleviate issues going forward.

Despite relative equality of the performance metrics of the two source versions I think merging this PR is still a wise choice. It's much easier to maintain internally as it removes misdirection.

@beeradmoore

Copy link
Copy Markdown

I think one of the things that will catch people off guard is running in debug mode being slower. I would expect things to be slower in debug mode, but not 14sec to load an image. That would have caught me off guard and I would have questioned the library long before trying in release mode.

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

I think one of the things that will catch people off guard is running in debug mode being slower. I would expect things to be slower in debug mode, but not 14sec to load an image. That would have caught me off guard and I would have questioned the library long before trying in release mode.

Yeah... Definitely need to docuement that also and raise issues with the relevant parties.

@JimBobSquarePants

Copy link
Copy Markdown
Member Author

I've added configuration notes to our docs. Please let me know if I've missed anything.

https://docs.sixlabors.com/articles/imagesharp/gettingstarted.html#maui-performance

@JimBobSquarePants
JimBobSquarePants merged commit aad5cfa into release/3.1.x Jul 31, 2024
@JimBobSquarePants
JimBobSquarePants deleted the js/mono-aot-decoder-workaround branch July 31, 2024 12:25
xadupre pushed a commit to microsoft/onnxruntime that referenced this pull request Oct 8, 2026
Updated [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp)
from 2.1.9 to 4.1.2.

<details>
<summary>Release notes</summary>

_Sourced from [SixLabors.ImageSharp's
releases](https://github.com/SixLabors/ImageSharp/releases)._

## 4.1.2

## What's Changed
* Harden codec and metadata input validation by @​JimBobSquarePants in
SixLabors/ImageSharp#3187
* Fix TIFF decoding of legacy 8-bit color maps by @​JimBobSquarePants in
SixLabors/ImageSharp#3189


**Full Changelog**:
SixLabors/ImageSharp@v4.1.1...v4.1.2

## 4.1.1

## What's Changed
* Fix CCITT decompressor bounds checks and error handling by
@​JimBobSquarePants in SixLabors/ImageSharp#3176


**Full Changelog**:
SixLabors/ImageSharp@v4.1.0...v4.1.1

## 4.1.0

## What's Changed
* GIF: background handling & quantizer overflow fix by
@​JimBobSquarePants in SixLabors/ImageSharp#3133
* Validate PBM max pixel value by @​JimBobSquarePants in
SixLabors/ImageSharp#3134
* Add support for Apple CgBI PNG images by @​Erik-White in
SixLabors/ImageSharp#3136
* Fix GIF transparency handling and dither by @​JimBobSquarePants in
SixLabors/ImageSharp#3143
* Bump codecov/codecov-action from 6 to 7 by @​dependabot[bot] in
SixLabors/ImageSharp#3141
* Add BlendWithCoverage overloads. Optimize Rgba32 compatible shuffling.
by @​JimBobSquarePants in
SixLabors/ImageSharp#3150
* Bump actions/checkout from 6 to 7 by @​dependabot[bot] in
SixLabors/ImageSharp#3146
* Bump actions/cache from 5 to 6 by @​dependabot[bot] in
SixLabors/ImageSharp#3149
* Fix convolution sampling for bounds smaller than the kernel radius by
@​JimBobSquarePants in SixLabors/ImageSharp#3152
* Enhance pixel formats and associated-alpha operations with
optimizations by @​JimBobSquarePants in
SixLabors/ImageSharp#3154
* Bump actions/setup-dotnet from 5 to 6 by @​dependabot[bot] in
SixLabors/ImageSharp#3155
* Fix degeneracy check for resize transforms by @​JimBobSquarePants in
SixLabors/ImageSharp#3157
* Improvements to Apple CgBI PNG handling by @​Erik-White in
SixLabors/ImageSharp#3137
* Clone TIFF profiles into image metadata by @​JimBobSquarePants in
SixLabors/ImageSharp#3159
* Add AOT compiler seeds for pixel formats and ICO, CUR, QOI codecs by
@​JimBobSquarePants in SixLabors/ImageSharp#3160
* Normalize SIMD pipelines using TensorPrimitives_ by
@​JimBobSquarePants in SixLabors/ImageSharp#3161
* Add ANI decoder support by @​Poker-sang in
SixLabors/ImageSharp#2899
* Remove AntialiasThreshold from GraphicsOptions by @​JimBobSquarePants
in SixLabors/ImageSharp#3162
* Add plus and extended pixel blend modes by @​JimBobSquarePants in
SixLabors/ImageSharp#3163
* Fix 16-bit binary PBM sample byte order by @​JimBobSquarePants in
SixLabors/ImageSharp#3164
* Make MemoryAllocator limits configurable and extensible by
@​JimBobSquarePants in SixLabors/ImageSharp#3165

## New Contributors
* @​Erik-White made their first contribution in
SixLabors/ImageSharp#3136

**Full Changelog**:
SixLabors/ImageSharp@v4.0.0...v4.1.0

## 4.0.0

## What's Changed
* Update to net8 by @​stefannikolei in
SixLabors/ImageSharp#2583
* Handle dedup of local palette of 256 length - Main by
@​JimBobSquarePants in SixLabors/ImageSharp#2607
* Replace custom Crc32 by @​JimBobSquarePants in
SixLabors/ImageSharp#2611
* Sync 3.1 DrawImage fixes by @​tocsoft in
SixLabors/ImageSharp#2612
* Fix handling gif encoding for global palettes - Main by
@​JimBobSquarePants in SixLabors/ImageSharp#2615
* Bump actions/setup-dotnet from 3 to 4 by @​dependabot[bot] in
SixLabors/ImageSharp#2613
* Adjusted the casing of the Webp format name by @​jscarle in
SixLabors/ImageSharp#2623
* Fix Paeth Filter decode on platforms that do not support Ssse3 - Main
by @​JimBobSquarePants in
SixLabors/ImageSharp#2620
* Fix WebP animation speed bug by @​marklagendijk in
SixLabors/ImageSharp#2624
* Promote PixelTypeInfo to Pixel by @​stefannikolei in
SixLabors/ImageSharp#2601
* TGA: Treat 32 bit True Color images always as transparent by
@​brianpopow in SixLabors/ImageSharp#2643
* Modernize and optimize pixel format operations across platforms. by
@​JimBobSquarePants in SixLabors/ImageSharp#2645
* Cleanup SimdUtils by @​JimBobSquarePants in
SixLabors/ImageSharp#2654
* Bump actions/cache from 3 to 4 by @​dependabot[bot] in
SixLabors/ImageSharp#2648
* Bump codecov/codecov-action from 3 to 4 by @​dependabot[bot] in
SixLabors/ImageSharp#2657
* Bump NuGet/setup-nuget from 1 to 2 by @​dependabot[bot] in
SixLabors/ImageSharp#2658
* Add v3.1.x fixes #​2673 and #​2674 into main. by @​JimBobSquarePants
in SixLabors/ImageSharp#2675
* Add fixes 2668, 2676, and 2677 to main by @​JimBobSquarePants in
SixLabors/ImageSharp#2678
* Merge 2681 to v4 Main by @​JimBobSquarePants in
SixLabors/ImageSharp#2690
* Add JPEG COM marker support by @​RobertMut in
SixLabors/ImageSharp#2641
* Bump actions/upload-artifact from 3 to 4 by @​dependabot[bot] in
SixLabors/ImageSharp#2625
* Only exit JPEG scan decoding after multiple EOF hits by
@​JimBobSquarePants in SixLabors/ImageSharp#2701
* V4 Ensure VP8X alpha flag is updated correctly. by @​JimBobSquarePants
in SixLabors/ImageSharp#2703
* Fix animated png handling (issue #​2708) by @​SpaceCheetah in
SixLabors/ImageSharp#2710
* Merge latest release from v3 by @​JimBobSquarePants in
SixLabors/ImageSharp#2720
* Fix MacOS jobs by @​antonfirsov in
SixLabors/ImageSharp#2728
* Fix async-over-sync issue in Image.DecodeAsync() by @​kroymann in
SixLabors/ImageSharp#2725
* Fix overflow in MemoryAllocator.Create(options) by @​antonfirsov in
SixLabors/ImageSharp#2730
* GifDecoder: Limit lzw bits to a maximum of 12 bits by @​brianpopow in
SixLabors/ImageSharp#2744
* GifDecoder : Allow skipping bad metadata using identify by
@​JimBobSquarePants in SixLabors/ImageSharp#2749
* Add ICO and CUR file decoder. by @​frg2089 in
SixLabors/ImageSharp#2579
* v4 - Fix off-by-one error when centering a transform. by
@​JimBobSquarePants in SixLabors/ImageSharp#2761
* v4 Fix 2758 by @​JimBobSquarePants in
SixLabors/ImageSharp#2764
* Simplify Color Space Conversion APIs by @​JimBobSquarePants in
SixLabors/ImageSharp#2739
* Webp: Fix Issue 2763 by @​brianpopow in
SixLabors/ImageSharp#2767
* V4 Correctly break during Png decoding by @​JimBobSquarePants in
SixLabors/ImageSharp#2773
* V4 : Fix filtering on PNG encode. by @​JimBobSquarePants in
SixLabors/ImageSharp#2778
* Fix #​2779 buffer overrun by @​KirillAldashkin in
SixLabors/ImageSharp#2780
* Fix ImageMetadata docs typo by @​lofcz in
SixLabors/ImageSharp#2781
* Add API for metadata conversion between formats. by
@​JimBobSquarePants in SixLabors/ImageSharp#2751
* Tiff decoder: Fix issue 2679 by @​brianpopow in
SixLabors/ImageSharp#2789
* Replace PngCrcChunkHandling by @​JimBobSquarePants in
SixLabors/ImageSharp#2786
* Add tagname to debugger visualization for Exif- and Iptc-values, to
facilitate easier debugging and discovery by @​lassevk in
SixLabors/ImageSharp#2787
* V4 - Correctly handle transform spaces when building transform
matrices. by @​JimBobSquarePants in
SixLabors/ImageSharp#2795
* Allow decoding Tiff of different frame size. by @​JimBobSquarePants in
SixLabors/ImageSharp#2788
* Add progressive JPEG encoder by @​ardabada in
SixLabors/ImageSharp#2740
* Fix using dither in BmpEncoder when bit per pixel is <= 4 by @​mistoll
in SixLabors/ImageSharp#2819
* Add QuadDistortion to ProjectiveTransformBuilder by @​Socolin in
SixLabors/ImageSharp#2748
* WEBP : Use Correct Width With AlphaDecoder by @​JimBobSquarePants in
SixLabors/ImageSharp#2823
 ... (truncated)

## 3.1.12

## What's Changed
* v3 : Add Full Metadata Parsing for WEBP Animations by
@​JimBobSquarePants in SixLabors/ImageSharp#3002
* V3: Prevent negative allocation attempt for huge TIFF files by
@​JimBobSquarePants in SixLabors/ImageSharp#3004
* Backport v3 : Tiff decoder: Fix issue 2679 by @​JimBobSquarePants in
SixLabors/ImageSharp#3007


**Full Changelog**:
SixLabors/ImageSharp@v3.1.11...v3.1.12

## 3.1.11

## What's Changed
* Backport V3 - GIF: Check for end of stream when reading comments. by
@​JimBobSquarePants in SixLabors/ImageSharp#2955


**Full Changelog**:
SixLabors/ImageSharp@v3.1.10...v3.1.11

## 3.1.10

## What's Changed
* V3: Remove ExifTagValue.InteroperabilityIndex by @​JimBobSquarePants
in SixLabors/ImageSharp#2939
* V3 TIFF : Allow additional and undefined extra samples by
@​JimBobSquarePants in SixLabors/ImageSharp#2942
* V3 Use EXIF byte order for EXIF encoded strings. by
@​JimBobSquarePants in SixLabors/ImageSharp#2944
* V3 Backport : Reduce the number of memory allocations in lossless WebP
encoder by @​JimBobSquarePants in
SixLabors/ImageSharp#2947


**Full Changelog**:
SixLabors/ImageSharp@v3.1.9...v3.1.10

## 3.1.9

## What's Changed
* V3: Do not attempt to decode iDAT chunks when image is fully decoded.
by @​JimBobSquarePants in
SixLabors/ImageSharp#2927
* V3 - Do not throw exception for non-required chunks. by
@​JimBobSquarePants in SixLabors/ImageSharp#2929
* V3: Do not encode WEBP images exceeding max dimensions by
@​JimBobSquarePants in SixLabors/ImageSharp#2931


**Full Changelog**:
SixLabors/ImageSharp@v3.1.8...v3.1.9

## 3.1.8

## What's Changed
* V3 : Fix GIF, PNG, and WEBP Edge Case Handling by @​JimBobSquarePants
in SixLabors/ImageSharp#2882
* V3 Nested sub ifds parsing fix by @​JimBobSquarePants in
SixLabors/ImageSharp#2913
* V3: Undo horizontal prediction for each tile row in case of tiled
tiff's by @​JimBobSquarePants in
SixLabors/ImageSharp#2914
* V3 - Use BPP from Color Writer for Compressor by @​JimBobSquarePants
in SixLabors/ImageSharp#2915


**Full Changelog**:
SixLabors/ImageSharp@v3.1.7...v3.1.8

## 3.1.7

## What's Changed
* V3 : Decode Chunky Tile Rows Directly. by @​JimBobSquarePants in
SixLabors/ImageSharp#2874
* V3: Gracefully handle LZW overflows by @​JimBobSquarePants in
SixLabors/ImageSharp#2880
* [3.1] Set LangVersion=12 unconditionally by @​antonfirsov in
SixLabors/ImageSharp#2896


**Full Changelog**:
SixLabors/ImageSharp@v3.1.6...v3.1.7

## 3.1.6

## What's Changed
* Mono AOT decoder workaround for slow jpeg decoding. by
@​JimBobSquarePants in SixLabors/ImageSharp#2762
* V3 - Correctly handle transform spaces when building transform
matrices. by @​JimBobSquarePants in
SixLabors/ImageSharp#2791
* Backport : V3 Fix #​2779 buffer overrun by @​JimBobSquarePants in
SixLabors/ImageSharp#2824
* Backport - v3 WEBP : Use Correct Width With AlphaDecoder by
@​JimBobSquarePants in SixLabors/ImageSharp#2827
* Rewrite ChunkedMemoryStream by @​JimBobSquarePants in
SixLabors/ImageSharp#2828


**Full Changelog**:
SixLabors/ImageSharp@v3.1.5...v3.1.6

## 3.1.5

## What's Changed
* [3.1] Fix overflow in MemoryAllocator.Create(options) by @​antonfirsov
in SixLabors/ImageSharp#2731
* v3 - Backport. Handle out of bounds Gif LZW max code by
@​JimBobSquarePants in SixLabors/ImageSharp#2754
* Fix off-by-one error when centering a transform. by
@​JimBobSquarePants in SixLabors/ImageSharp#2760
* v3.1.x Fix 2758 by @​JimBobSquarePants in
SixLabors/ImageSharp#2759
* v3.1.x - Backport Webp: Fix Issue 2763/2692 by @​JimBobSquarePants in
SixLabors/ImageSharp#2768
* Correctly break during Png decoding by @​JimBobSquarePants in
SixLabors/ImageSharp#2769
* Fix filtering on PNG encode. by @​JimBobSquarePants in
SixLabors/ImageSharp#2775


**Full Changelog**:
SixLabors/ImageSharp@v3.1.4...v3.1.5

## 3.1.4

## What's Changed
* Backport - Only exit JPEG scan decoding after multiple EOF hits by
@​JimBobSquarePants in SixLabors/ImageSharp#2702
* Ensure VP8X alpha flag is updated correctly. by @​JimBobSquarePants in
SixLabors/ImageSharp#2699
* Backport APNG fix to release/3.1.x by @​SpaceCheetah in
SixLabors/ImageSharp#2713
* Limit Read Palette Indices by @​JimBobSquarePants in
SixLabors/ImageSharp#2718
* Limit all memory allocations in the MemoryAllocator layer by
@​antonfirsov in SixLabors/ImageSharp#2706
* Clear Pixel Buffers on Decode. by @​JimBobSquarePants in
SixLabors/ImageSharp#2716


**Full Changelog**:
SixLabors/ImageSharp@v3.1.3...v3.1.4

## 3.1.3

## What's Changed
* Make DrawImage processor more robust to bad input. by
@​JimBobSquarePants in SixLabors/ImageSharp#2673
* Don't skip reading data for animation chunks on identify. by
@​JimBobSquarePants in SixLabors/ImageSharp#2674
* Fix AccessViolationException and hard crash with animated webp by
@​JimBobSquarePants in SixLabors/ImageSharp#2676
* Use a smarter approach to determine the transparent index when
encoding palette Pngs. by @​JimBobSquarePants in
SixLabors/ImageSharp#2677
* Limit ancillary PNG chunk size. by @​JimBobSquarePants in
SixLabors/ImageSharp#2681


**Full Changelog**:
SixLabors/ImageSharp@v3.1.2...v3.1.3

## 3.1.2

## What's Changed
* Fix Paeth Filter decode on platforms that do not support Ssse3 by
@​JimBobSquarePants in SixLabors/ImageSharp#2618
* Backport: Fix WebP animation speed bug by @​JimBobSquarePants in
SixLabors/ImageSharp#2637


**Full Changelog**:
SixLabors/ImageSharp@v3.1.1...v3.1.2

## 3.1.1

## What's Changed
* Handle dedup of local palette of 256 length by @​JimBobSquarePants in
SixLabors/ImageSharp#2605
* Correctly calculate foreground Rectangle when negative background
location is set (3.1 fix) by @​tocsoft in
SixLabors/ImageSharp#2609
* Handle case when Foreground image overhangs bottom of background image
during DrawImage Call (3.1 target) by @​tocsoft in
SixLabors/ImageSharp#2610
* Fix handling gif encoding for global palettes. by @​JimBobSquarePants
in SixLabors/ImageSharp#2614


**Full Changelog**:
SixLabors/ImageSharp@v3.1.0...v3.1.1

## 3.1.0

## What's Changed
* Reduced intermediate allocations by @​gfoidl in
SixLabors/ImageSharp#2415
* Port colorconverter YCbCr and YCCk to arm by @​stefannikolei in
SixLabors/ImageSharp#2417
* Added and used Numerics.Vector{128|256}Count extension by @​gfoidl in
SixLabors/ImageSharp#2422
* Improvements around `fixed` by @​gfoidl in
SixLabors/ImageSharp#2418
* Create vector constants inline and not via ROS<byte> by @​gfoidl in
SixLabors/ImageSharp#2419
* More tests for Webp lossless utils by @​brianpopow in
SixLabors/ImageSharp#2424
* Fix incorrect comments by @​hey-red in
SixLabors/ImageSharp#2426
* Fixed invalid jpeg buffer width compliment for scalar color converters
by @​br3aker in SixLabors/ImageSharp#2427
* Update Readme by @​brianpopow in
SixLabors/ImageSharp#2433
* Add AdvSimd in ComponentProcessor by @​stefannikolei in
SixLabors/ImageSharp#2429
* Fix decoding tiled tiff with unequal tile width and height by
@​brianpopow in SixLabors/ImageSharp#2436
* Fix Vp8Residual costs calculation by @​brianpopow in
SixLabors/ImageSharp#2432
* Fix thresholds for Resize kernel tests by @​brianpopow in
SixLabors/ImageSharp#2440
* Tiff: Undo horizontal predictor for cmyk images by @​brianpopow in
SixLabors/ImageSharp#2459
* fix a typo in XML comment for struct `Rgb48` by @​n0099 in
SixLabors/ImageSharp#2463
* Fix #​2467 bmp encoding issue for BMP with 1 bit per pixel and more
pixels per row than divisible by 8. by @​synercoder in
SixLabors/ImageSharp#2471
* Update Directory.Build.targets by @​Pashkinz92 in
SixLabors/ImageSharp#2468
* bugfix in Rational.cs, when both Nominator and Denominator equals to 0
by @​tsardaryanCamenAI in
SixLabors/ImageSharp#2453
* Fix DrawImage offsetting issues and improve API parameter names. by
@​JimBobSquarePants in SixLabors/ImageSharp#2474
* Use more accurate bit for alpha lookup. by @​JimBobSquarePants in
SixLabors/ImageSharp#2473
* Fix for B&W pbm images with width not dividable by 8 by @​ynse01 in
SixLabors/ImageSharp#2481
* Tiff: ccitt compression, fix for issue #​2451 by @​brianpopow in
SixLabors/ImageSharp#2483
* Use `FileOptions.Asynchronous` when doing async IO by @​Neme12 in
SixLabors/ImageSharp#2488
* Allow JFXX as an App0 marker header by @​JimBobSquarePants in
SixLabors/ImageSharp#2482
* Adding QOI support by @​LuisAlfredo92 in
SixLabors/ImageSharp#2446
* Vectorize TrimTransparentPixels in GifEncoderCore by @​gfoidl in
SixLabors/ImageSharp#2500
* Prevent crafted DOS attack. by @​JimBobSquarePants in
SixLabors/ImageSharp#2501
* Reverse automatic include behavior. by @​JimBobSquarePants in
SixLabors/ImageSharp#2515
* Handle EOF in Jpeg bit reader when data is bad to prevent DOS attack.…
by @​JimBobSquarePants in
SixLabors/ImageSharp#2523
* Fix #​2518 by @​antonfirsov in
SixLabors/ImageSharp#2519
* Fix for issue 2504 - IPTC and ICC profile information being lost
during TIFF file save by @​JeffP134 in
SixLabors/ImageSharp#2535
* Preserve Gif color palettes and deduplicate frame pixels. by
@​JimBobSquarePants in SixLabors/ImageSharp#2455
* Bump actions/checkout from 3 to 4 by @​dependabot in
SixLabors/ImageSharp#2530
* Expose and conserve the color palette for indexed png images. by
@​JimBobSquarePants in SixLabors/ImageSharp#2485
* Change ExifTag TimeZoneOffset to Signed Short by @​Cheesebaron in
SixLabors/ImageSharp#2541
* Expose non-nullable configuration to remove AOT limiting null check by
@​JimBobSquarePants in SixLabors/ImageSharp#2514
* Add GPSHPositioningError exif tag by @​Cheesebaron in
SixLabors/ImageSharp#2543
* Disallow allocation attempts of unrepresentable sizes by @​antonfirsov
in SixLabors/ImageSharp#2545
* Add webp decoder option to handle the background color in ANIM chunk
by @​brianpopow in SixLabors/ImageSharp#2547
* Tiff decoding robustness improvements by @​JimBobSquarePants in
SixLabors/ImageSharp#2550
* PBM decoder robustness improvements and BufferedReadStream
observability by @​antonfirsov in
SixLabors/ImageSharp#2551
* Follow up on post-merge discussions in #​2551 by @​antonfirsov in
SixLabors/ImageSharp#2552
* APNG support by @​Poker-sang in
SixLabors/ImageSharp#2511
* WebP - Reduce the allocations in lossless encoding by
@​JimBobSquarePants in SixLabors/ImageSharp#2546
* Animated webp encoder by @​Poker-sang in
SixLabors/ImageSharp#2569
* Fix boxed quantization and update refs by @​JimBobSquarePants in
SixLabors/ImageSharp#2582
* Explicitly set BitsPerPixel and BitsPerSample to 1 for bicolor
compressed images by @​brianpopow in
SixLabors/ImageSharp#2590
* [fix]: Fixed Unknown App0 Marker add profileResolver missing by
@​JoseEliasSantos in SixLabors/ImageSharp#2566
* Png- Do not attempt to read data for chunks of length 0. by
@​JimBobSquarePants in SixLabors/ImageSharp#2561
 ... (truncated)

## 3.0.2

## What's Changed
* Handle EOF in Jpeg bit reader when data is bad to prevent DOS attack.
by @​JimBobSquarePants in
SixLabors/ImageSharp#2516


**Full Changelog**:
SixLabors/ImageSharp@v3.0.1...v3.0.2

## 3.0.1

## What's Changed
* ISSUE #​2385 - Implementing try get pattern to
TryFindFormatByFileExtension(string extension, [NotNullWhen(true)] out
IImageFormat? format) by @​Ollie-Ave in
SixLabors/ImageSharp#2386
* Remove mac specific skips by @​stefannikolei in
SixLabors/ImageSharp#2384
* Add Arm intrinsics to JpegColorConverter RGB by @​stefannikolei in
SixLabors/ImageSharp#2397
* Add arm64 intrinsics for cmyk converter by @​stefannikolei in
SixLabors/ImageSharp#2400
* Low-hanging fruit codegen optimizations by @​gfoidl in
SixLabors/ImageSharp#2401
* Webp: Dont use using statement for encodedAlphaData by @​brianpopow in
SixLabors/ImageSharp#2412
* Fixed wrong division hack by @​gfoidl in
SixLabors/ImageSharp#2413
* Port GrayscalConverter to Arm by @​stefannikolei in
SixLabors/ImageSharp#2409
* Fix RgbScalar by @​stefannikolei in
SixLabors/ImageSharp#2416

## New Contributors
* @​Ollie-Ave made their first contribution in
SixLabors/ImageSharp#2386

**Full Changelog**:
SixLabors/ImageSharp@v3.0.0...v3.0.1

## 3.0.0

## What's Changed
* Use .NET 6 only by @​JimBobSquarePants in
SixLabors/ImageSharp#2098
* Convolution: Border wrapping modes by @​ynse01 in
SixLabors/ImageSharp#2060
* Use ReadOnlySpan<byte> static data compiler optimization in more
places by @​turbedi in SixLabors/ImageSharp#2101
* Add support for decoding jpeg's with arithmetic coding by @​brianpopow
in SixLabors/ImageSharp#2073
* Replace Array.Clear(array, 0, array.Length) calls with
Array.Clear(array) by @​turbedi in
SixLabors/ImageSharp#2103
* Preserve color profile when encoding bitmaps by @​brianpopow in
SixLabors/ImageSharp#2108
* Preserve color profile when encoding webp images by @​brianpopow in
SixLabors/ImageSharp#2109
* Preserve color profile when encoding PNG images by @​brianpopow in
SixLabors/ImageSharp#2110
* Add support for decoding webp images with animations by @​brianpopow
in SixLabors/ImageSharp#1985
* Jpeg compressed tiff: jpeg decoder should handle the conversion from
YCbCr to RGB by @​brianpopow in
SixLabors/ImageSharp#2124
* Deduce color space as YCbCr if component id's are 1, 2, 3 by
@​brianpopow in SixLabors/ImageSharp#2135
* Bump actions/checkout from 2 to 3 by @​dependabot in
SixLabors/ImageSharp#2145
* Bump actions/setup-dotnet from 1 to 2 by @​dependabot in
SixLabors/ImageSharp#2143
* Bump actions/cache from 2 to 3 by @​dependabot in
SixLabors/ImageSharp#2142
* Bump actions/upload-artifact from 2 to 3 by @​dependabot in
SixLabors/ImageSharp#2146
* Bump codecov/codecov-action from 1 to 3 by @​dependabot in
SixLabors/ImageSharp#2144
* Skip invalid markers during jpeg decoding by @​br3aker in
SixLabors/ImageSharp#2147
* Tiff: Performance improvements for Fax4 decompression by @​brianpopow
in SixLabors/ImageSharp#2134
* Fix regression in TIF image loading by @​brianpopow in
SixLabors/ImageSharp#2150
* Used inline SIMD vectors if they are constants by @​gfoidl in
SixLabors/ImageSharp#2122
* Print environment info on tests start by @​JimBobSquarePants in
SixLabors/ImageSharp#2175
* Update License by @​JimBobSquarePants in
SixLabors/ImageSharp#2176
* Jpeg downscaling decoding by @​br3aker in
SixLabors/ImageSharp#2076
* Add support for decoding tiff images with CieLab color space by
@​brianpopow in SixLabors/ImageSharp#2127
* Assembly Trimming Support by @​ds5678 in
SixLabors/ImageSharp#2160
* Jpeg color space deduction fix by @​br3aker in
SixLabors/ImageSharp#2177
* Add support for decoding tiff with webp compressed data by
@​brianpopow in SixLabors/ImageSharp#2128
* Fix issue when writing lossy webp with alpha data by @​brianpopow in
SixLabors/ImageSharp#2173
* Fix run-length encode compression implementation mistake in tga
encoder by @​l1nxy in SixLabors/ImageSharp#2172
* TGA Encoder/Decoder Improvements by @​brianpopow in
SixLabors/ImageSharp#2197
* Tiff: Make sure 1 Bit compression is only used with 1 bit pixel type
by @​brianpopow in SixLabors/ImageSharp#2201
* Refactor `EnumUtils` and make it AOT-friendly. by @​teo-tsirpanis in
SixLabors/ImageSharp#2200
* Jpeg encoder complete rewrite by @​br3aker in
SixLabors/ImageSharp#2120
* Fix IPTC tags written on jpg files that contains non-English
characters can't be correctly displayed on external apps #​2212 by
@​lmerino-ep in SixLabors/ImageSharp#2213
* Identify transparency for indexed PNG correctly by @​brianpopow in
SixLabors/ImageSharp#2215
* Introduce Shared General Decoder Options plus Specialization by
@​JimBobSquarePants in SixLabors/ImageSharp#2180
* Add option to encode 2-bit Bitmap's by @​brianpopow in
SixLabors/ImageSharp#2220
* Fix AdaptiveThresholdProcessor throws IndexOutOfRangeException by
@​brianpopow in SixLabors/ImageSharp#2221
* Relaxed bmp dimensions validation by @​smorokin in
SixLabors/ImageSharp#2192
* Remove obsolete code by @​JimBobSquarePants in
SixLabors/ImageSharp#2189
* Implement Median Blur processor by @​ynse01 in
SixLabors/ImageSharp#2219
* Make TestFile Image threadsafe. by @​JimBobSquarePants in
SixLabors/ImageSharp#2225
* PNG filter improvements by @​saucecontrol in
SixLabors/ImageSharp#2226
* Use File-Scoped Namespaces and Global Implicit Usings by
@​JimBobSquarePants in SixLabors/ImageSharp#2229
* Fix for issue #​2117 by @​brianpopow in
SixLabors/ImageSharp#2230
* Use System.Half for HalfTypeHelper by @​JimBobSquarePants in
SixLabors/ImageSharp#2233
* [Chore] Remove InlineningOption from ThrowHelpers by @​blouflashdb in
SixLabors/ImageSharp#2234
* Implement AutoLevel processor - Attempt 2 by @​ynse01 in
SixLabors/ImageSharp#2235
* Add TryGetLinearlySeparableComponents and tests by @​JimBobSquarePants
in SixLabors/ImageSharp#2224
 ... (truncated)

## 2.1.13

## What's Changed
* V2 backport: 2243 - Ignore unknown chunks for WEBP by @​sonbua in
SixLabors/ImageSharp#2505

## New Contributors
* @​sonbua made their first contribution in
SixLabors/ImageSharp#2505

**Full Changelog**:
SixLabors/ImageSharp@v2.1.12...v2.1.13

## 2.1.12

## What's Changed
* Backport #​2926 to release/2.1.x by @​mus65 in
SixLabors/ImageSharp#2985

## New Contributors
* @​mus65 made their first contribution in
SixLabors/ImageSharp#2985

**Full Changelog**:
SixLabors/ImageSharp@v2.1.11...v2.1.12

## 2.1.11

## What's Changed
* Backport V2 - GIF: Check for end of stream when reading comments. by
@​JimBobSquarePants in SixLabors/ImageSharp#2971


**Full Changelog**:
SixLabors/ImageSharp@v2.1.10...v2.1.11

## 2.1.10

## What's Changed
* Backport #​2859 to release/2.1.x by @​antonfirsov in
SixLabors/ImageSharp#2890
* Backport #​2701 to 2.1.x [copy] by @​antonfirsov in
SixLabors/ImageSharp#2891


**Full Changelog**:
SixLabors/ImageSharp@v2.1.9...v2.1.10

Commits viewable in [compare
view](SixLabors/ImageSharp@v2.1.9...v4.1.2).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=SixLabors.ImageSharp&package-manager=nuget&previous-version=2.1.9&new-version=4.1.2)](https://github.com/proxy/docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/microsoft/onnxruntime/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants