Browse Source

Parallel.For() in ProcessBlockColorsIntoJpegImageChannels

af/merge-core
Anton Firszov 10 years ago
parent
commit
77f337ffeb
  1. 9
      src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs
  2. 2
      tests/ImageSharp.Tests/Formats/Jpg/JpegProfilingBenchmarks.cs

9
src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs

@ -468,12 +468,15 @@ namespace ImageSharp.Formats
/// <typeparam name="TColor">The pixel type</typeparam> /// <typeparam name="TColor">The pixel type</typeparam>
private void ProcessBlockColorsIntoJpegImageChannels<TColor>() private void ProcessBlockColorsIntoJpegImageChannels<TColor>()
where TColor : struct, IPackedPixel, IEquatable<TColor> where TColor : struct, IPackedPixel, IEquatable<TColor>
{
Parallel.For(
0,
this.ComponentCount,
componentIndex =>
{ {
JpegScanDecoder scanDecoder = default(JpegScanDecoder); JpegScanDecoder scanDecoder = default(JpegScanDecoder);
JpegScanDecoder.Init(&scanDecoder); JpegScanDecoder.Init(&scanDecoder);
for (int componentIndex = 0; componentIndex < this.ComponentCount; componentIndex++)
{
scanDecoder.ComponentIndex = componentIndex; scanDecoder.ComponentIndex = componentIndex;
DecodedBlockMemento[] blockArray = this.DecodedBlocks[componentIndex]; DecodedBlockMemento[] blockArray = this.DecodedBlocks[componentIndex];
for (int i = 0; i < blockArray.Length; i++) for (int i = 0; i < blockArray.Length; i++)
@ -481,7 +484,7 @@ namespace ImageSharp.Formats
scanDecoder.LoadMemento(ref blockArray[i]); scanDecoder.LoadMemento(ref blockArray[i]);
scanDecoder.ProcessBlockColors(this); scanDecoder.ProcessBlockColors(this);
} }
} });
} }
/// <summary> /// <summary>

2
tests/ImageSharp.Tests/Formats/Jpg/JpegProfilingBenchmarks.cs

@ -32,7 +32,7 @@ namespace ImageSharp.Tests
TestImages.Jpeg.Baseline.Jpeg444, TestImages.Jpeg.Baseline.Jpeg444,
}; };
// [Theory] // Benchmark, enable manually [Theory] // Benchmark, enable manually
[MemberData(nameof(DecodeJpegData))] [MemberData(nameof(DecodeJpegData))]
public void DecodeJpeg(string fileName) public void DecodeJpeg(string fileName)
{ {

Loading…
Cancel
Save