diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs
index 1dededae40..5330782f22 100644
--- a/src/ImageSharp/Image.Decode.cs
+++ b/src/ImageSharp/Image.Decode.cs
@@ -106,15 +106,16 @@ namespace SixLabors.ImageSharp
///
/// The image stream to read the header from.
/// The configuration.
- /// The IImageFormat.
- /// The image format or null if none found.
- private static async Task DiscoverDecoderAsync(Stream stream, Configuration config, out IImageFormat format)
+ /// The decoder and the image format or null if none found.
+ private static async Task<(IImageDecoder decoder, IImageFormat format)> DiscoverDecoderAsync(Stream stream, Configuration config)
{
- format = await InternalDetectFormatAsync(stream, config).ConfigureAwait(false);
+ IImageFormat format = await InternalDetectFormatAsync(stream, config).ConfigureAwait(false);
- return format != null
+ IImageDecoder decoder = format != null
? config.ImageFormatsManager.FindDecoder(format)
: null;
+
+ return (decoder, format);
}
///
@@ -149,7 +150,7 @@ namespace SixLabors.ImageSharp
private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config)
where TPixel : unmanaged, IPixel
{
- IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format);
+ (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false);
if (decoder is null)
{
return (null, null);
@@ -173,7 +174,7 @@ namespace SixLabors.ImageSharp
private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config)
{
- IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format);
+ (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false);
if (decoder is null)
{
return (null, null);
@@ -193,7 +194,9 @@ namespace SixLabors.ImageSharp
///
private static (IImageInfo ImageInfo, IImageFormat Format) InternalIdentity(Stream stream, Configuration config)
{
- if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector))
+ IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format);
+
+ if (!(decoder is IImageInfoDetector detector))
{
return (null, null);
}
@@ -213,7 +216,9 @@ namespace SixLabors.ImageSharp
/// is not found.
private static async Task<(IImageInfo ImageInfo, IImageFormat Format)> InternalIdentityAsync(Stream stream, Configuration config)
{
- if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector))
+ (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false);
+
+ if (!(decoder is IImageInfoDetector detector))
{
return (null, null);
}