From 5b35101a554f4f14b3c8e8c62d949f65d251c4fd Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 8 Dec 2016 03:42:05 +0100 Subject: [PATCH] manually merged DecodeJpegMultiple + additional test images --- ImageSharp.sln | 12 +- .../Image/DecodeJpegMultiple.cs | 111 ++++++++++++++++++ .../ImageSharp.Tests/Formats/Jpg/DctTests.cs | 54 --------- tests/ImageSharp.Tests/TestImages.cs | 14 ++- .../TestImages/Formats/Jpg/Festzug.jpg | 3 + .../TestImages/Formats/Jpg/Hiyamugi.jpg | 3 + .../Formats/Jpg/baseline/jpeg400jfif.jpg | 3 + .../Formats/Jpg/baseline/jpeg420exif.jpg | 3 + .../Formats/Jpg/baseline/jpeg444.jpg | 3 + .../TestImages/Formats/Jpg/testimgint.jpg | 3 + .../TestImages/Formats/Jpg/testorig.jpg | 3 + 11 files changed, 150 insertions(+), 62 deletions(-) create mode 100644 tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs delete mode 100644 tests/ImageSharp.Tests/Formats/Jpg/DctTests.cs create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/Festzug.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/Hiyamugi.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg400jfif.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg420exif.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg444.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/testimgint.jpg create mode 100644 tests/ImageSharp.Tests/TestImages/Formats/Jpg/testorig.jpg diff --git a/ImageSharp.sln b/ImageSharp.sln index b253884220..362127afe3 100644 --- a/ImageSharp.sln +++ b/ImageSharp.sln @@ -23,7 +23,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{815C06 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{56801022-D71A-4FBE-BC5B-CBA08E2284EC}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "JpegBenchmark", "tests\JpegBenchmark\JpegBenchmark.xproj", "{7C69F09A-3286-45A1-BED2-B9C628150FA9}" +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "ImageSharp.Benchmarks", "tests\ImageSharp.Benchmarks\ImageSharp.Benchmarks.xproj", "{299D8E18-102C-42DE-ADBF-79098EE706A8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -39,10 +39,10 @@ Global {F836E8E6-B4D9-4208-8346-140C74678B91}.Debug|Any CPU.Build.0 = Debug|Any CPU {F836E8E6-B4D9-4208-8346-140C74678B91}.Release|Any CPU.ActiveCfg = Release|Any CPU {F836E8E6-B4D9-4208-8346-140C74678B91}.Release|Any CPU.Build.0 = Release|Any CPU - {7C69F09A-3286-45A1-BED2-B9C628150FA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C69F09A-3286-45A1-BED2-B9C628150FA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C69F09A-3286-45A1-BED2-B9C628150FA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C69F09A-3286-45A1-BED2-B9C628150FA9}.Release|Any CPU.Build.0 = Release|Any CPU + {299D8E18-102C-42DE-ADBF-79098EE706A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {299D8E18-102C-42DE-ADBF-79098EE706A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {299D8E18-102C-42DE-ADBF-79098EE706A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {299D8E18-102C-42DE-ADBF-79098EE706A8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -50,6 +50,6 @@ Global GlobalSection(NestedProjects) = preSolution {2AA31A1F-142C-43F4-8687-09ABCA4B3A26} = {815C0625-CD3D-440F-9F80-2D83856AB7AE} {F836E8E6-B4D9-4208-8346-140C74678B91} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} - {7C69F09A-3286-45A1-BED2-B9C628150FA9} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} + {299D8E18-102C-42DE-ADBF-79098EE706A8} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} EndGlobalSection EndGlobal diff --git a/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs new file mode 100644 index 0000000000..497b20734e --- /dev/null +++ b/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs @@ -0,0 +1,111 @@ +namespace ImageSharp.Benchmarks.Image +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.IO; + using System.Linq; + + using BenchmarkDotNet.Attributes; + + using Image = ImageSharp.Image; + using ImageSharpSize = ImageSharp.Size; + + public class DecodeJpegMultiple + { + private Dictionary fileNamesToBytes; + + public enum JpegTestingMode + { + All, + SmallImagesOnly, + LargeImagesOnly, + CalliphoraOnly, + } + + [Params(JpegTestingMode.All, JpegTestingMode.SmallImagesOnly, JpegTestingMode.LargeImagesOnly, JpegTestingMode.CalliphoraOnly)] + public JpegTestingMode Mode { get; set; } + + private IEnumerable> RequestedImages + { + get + { + int thresholdInBytes = 100000; + + switch (this.Mode) + { + case JpegTestingMode.All: + return this.fileNamesToBytes; + case JpegTestingMode.SmallImagesOnly: + return this.fileNamesToBytes.Where(kv => kv.Value.Length < thresholdInBytes); + case JpegTestingMode.LargeImagesOnly: + return this.fileNamesToBytes.Where(kv => kv.Value.Length >= thresholdInBytes); + case JpegTestingMode.CalliphoraOnly: + return new[] { + this.fileNamesToBytes.First(kv => kv.Key.ToLower().Contains("calliphora")) + }; + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + +#if BENCHMARK46 + private const string Folder = "../../../ImageSharp.Tests/TestImages/Formats/Jpg/"; +#else + private const string Folder = "../ImageSharp.Tests/TestImages/Formats/Jpg/"; +#endif + + [Setup] + public void ReadImages() + { + if (this.fileNamesToBytes != null) return; + + // Decoder does not work for these images (yet?): + string[] filterWords = { "testimgari", "corrupted", "gray", "longvertical" }; + + var allFiles = Directory.EnumerateFiles(Folder, "*.jpg", SearchOption.AllDirectories) + .Where(fn => !filterWords.Any(w => fn.ToLower().Contains(w))) + .ToArray(); + + this.fileNamesToBytes = allFiles.ToDictionary(fn => fn, File.ReadAllBytes); + } + + + [Benchmark(Description = "DecodeJpegMultiple - ImageSharp")] + public ImageSharpSize JpegImageSharp() + { + ImageSharpSize lastSize = new ImageSharpSize(); + foreach (var kv in this.RequestedImages) + { + using (MemoryStream memoryStream = new MemoryStream(kv.Value)) + { + Image image = new ImageSharp.Image(memoryStream); + lastSize = new ImageSharpSize(image.Width, image.Height); + } + } + + return lastSize; + } + + [Benchmark(Baseline = true, Description = "DecodeJpegMultiple - System.Drawing")] + public Size JpegSystemDrawing() + { + Size lastSize = new System.Drawing.Size(); + foreach (var kv in this.RequestedImages) + { + using (MemoryStream memoryStream = new MemoryStream(kv.Value)) + { + using (System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream)) + { + lastSize = image.Size; + } + } + } + + return lastSize; + } + + } +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/Formats/Jpg/DctTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/DctTests.cs deleted file mode 100644 index 77f9fd98c6..0000000000 --- a/tests/ImageSharp.Tests/Formats/Jpg/DctTests.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Numerics; -using ImageSharp.Formats; -using Xunit; -using Xunit.Abstractions; - -namespace ImageSharp.Tests.Formats.Jpg -{ - public class DctTests : UtilityTestClassBase - { - public DctTests(ITestOutputHelper output) - : base(output) - { - } - - [Fact] - public void Mennyi() - { - Output.WriteLine(Vector.IsHardwareAccelerated.ToString()); - Output.WriteLine(Vector.Count.ToString()); - } - - [Fact] - public void CheckTestData() - { - var data = Create8x8FloatData(); - - Print8x8Data(data); - } - - [Fact] - public void Transpose8x8() - { - var data = Create8x8FloatData(); - - MutableSpan result = new MutableSpan(64); - - ReferenceImplementations.Transpose8x8(data, result); - - Print8x8Data(result.Data); - } - - [Fact] - public void Transpose8x8_Inplace() - { - var data = Create8x8FloatData(); - - ReferenceImplementations.Transpose8x8(data); - - Print8x8Data(data); - } - - - } -} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 05d18d80a5..9c0a9d66c9 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -39,16 +39,26 @@ namespace ImageSharp.Tests private static readonly string folder = "TestImages/Formats/Jpg/"; public static string Cmyk => folder + "cmyk.jpg"; public static string Exif => folder + "exif.jpg"; - public static string Floorplan => folder + "Floorplan.jpeg"; + public static string Floorplan => folder + "Floorplan.jpg"; public static string Calliphora => folder + "Calliphora.jpg"; public static string Turtle => folder + "turtle.jpg"; public static string Fb => folder + "fb.jpg"; public static string Progress => folder + "progress.jpg"; public static string GammaDalaiLamaGray => folder + "gamma_dalai_lama_gray.jpg"; + public static string Festzug => folder + "Festzug.jpg"; + public static string Hiyamugi => folder + "Hiyamugi.jpg"; + + public static string Jpeg400 => folder + "baseline/jpeg400jfif.jpg"; + public static string Jpeg420 => folder + "baseline/jpeg420exif.jpg"; + public static string Jpeg422 => folder + "baseline/jpeg422jfif.jpg"; + public static string Jpeg444 => folder + "baseline/jpeg444.jpg"; + public static readonly string[] All = { - Cmyk, Exif, Floorplan, Calliphora, Turtle, Fb, Progress, GammaDalaiLamaGray + Cmyk, Exif, Floorplan, Calliphora, Turtle, Fb, Progress, GammaDalaiLamaGray, + Festzug, Hiyamugi, + Jpeg400, Jpeg420, Jpeg444, }; } diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Festzug.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Festzug.jpg new file mode 100644 index 0000000000..aff6b7e50c --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Festzug.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06239c321880733aad329338a647b565bf7321d74523ea3fc3b6ced45d7b2058 +size 49977 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Hiyamugi.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Hiyamugi.jpg new file mode 100644 index 0000000000..7de7a00b49 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/Hiyamugi.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff20d5d0ad75e648b1ea388f65fb41d02bd2a049cd22ef86a4648b357bde94ce +size 540458 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg400jfif.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg400jfif.jpg new file mode 100644 index 0000000000..606a466d46 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg400jfif.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4fc842ed15a8c451d25f2595d68b533777b19f10748d961ab2b0afcc51bcc07 +size 45066 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg420exif.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg420exif.jpg new file mode 100644 index 0000000000..522a4c2fe6 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg420exif.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223f9ca11722e7eccae9eadb158fa2c7bf806ed0aa6ee4390a96df7770035ba4 +size 768608 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg444.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg444.jpg new file mode 100644 index 0000000000..1887fa4a51 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/jpeg444.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89c632bbc42bc917f81e7c47595c95cb914a619604ac07b8cebf6fd4d1d744ca +size 5667 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testimgint.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testimgint.jpg new file mode 100644 index 0000000000..aa875789e7 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testimgint.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:491679b8057739b3c8e5bacd1e918efb1691d271cbbd69820ff8d480dcb90963 +size 5756 diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testorig.jpg b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testorig.jpg new file mode 100644 index 0000000000..ea8e1331b8 --- /dev/null +++ b/tests/ImageSharp.Tests/TestImages/Formats/Jpg/testorig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acc6ec555d41d15b368320edaa3b20958ee6fa97cb6e4a18d1213d5ae8bec73b +size 5770