mirror of https://github.com/SixLabors/ImageSharp
Browse Source
Add JxlAnsEntry and JxlAnsSymbol. See ans_common.h. These correspond to the Entry and Symbol structures within AliasTable.pull/3153/head
2 changed files with 45 additions and 0 deletions
@ -0,0 +1,31 @@ |
|||||
|
// Copyright (c) Six Labors.
|
||||
|
// Licensed under the Six Labors Split License.
|
||||
|
|
||||
|
using System.Runtime.InteropServices; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Formats.Jxl.IO; |
||||
|
|
||||
|
[StructLayout(LayoutKind.Sequential)] |
||||
|
internal struct JxlAnsEntry |
||||
|
{ |
||||
|
// Although the Entry struct looks like this:
|
||||
|
// uint8_t cutoff;
|
||||
|
// uint8_t right_value;
|
||||
|
// uint16_t freq0;
|
||||
|
// uint16_t offsets1;
|
||||
|
// uint16_t freq1_xor_freq0;
|
||||
|
// and clearly uses smaller types (e.g. byte or ushort),
|
||||
|
// prefer using int here as otherwise we have to
|
||||
|
// introduce many casts: some to assign values, others to
|
||||
|
// convert from unsigned to signed kinds.
|
||||
|
//
|
||||
|
// This struct is 20 bytes which is more than the recommended
|
||||
|
// maximum of 16 bytes, but I believe it justifies more due to
|
||||
|
// reduced heap allocations that would be introduced if this
|
||||
|
// struct would be turned into a class.
|
||||
|
public int Entry; |
||||
|
public int RightValue; |
||||
|
public int Frequency0; |
||||
|
public int Offsets1; |
||||
|
public int Frequency1XorFrequency0; |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
// Copyright (c) Six Labors.
|
||||
|
// Licensed under the Six Labors Split License.
|
||||
|
|
||||
|
using System.Runtime.InteropServices; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Formats.Jxl.IO; |
||||
|
|
||||
|
[StructLayout(LayoutKind.Sequential)] |
||||
|
internal struct JxlAnsSymbol(int value, int offset, int frequency) |
||||
|
{ |
||||
|
public int Value = value; |
||||
|
public int Offset = offset; |
||||
|
public int Frequency = frequency; |
||||
|
} |
||||
Loading…
Reference in new issue