Browse Source

Combine Delta parameters implementation

pull/2633/head
Ynse Hoornenborg 2 years ago
parent
commit
e45bf57f68
  1. 2
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDeltaParameters.cs
  2. 11
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDeltaQParameters.cs
  3. 4
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuFrameHeader.cs
  4. 8
      src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileDecoder.cs

2
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDeltaLoopFilterParameters.cs → src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDeltaParameters.cs

@ -3,7 +3,7 @@
namespace SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit;
internal class ObuDeltaLoopFilterParameters
internal class ObuDeltaParameters
{
public bool IsPresent { get; internal set; }

11
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDeltaQParameters.cs

@ -1,11 +0,0 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
namespace SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit;
internal class ObuDeltaQParameters
{
public bool IsPresent { get; set; }
public int Resolution { get; set; }
}

4
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuFrameHeader.cs

@ -49,9 +49,9 @@ internal class ObuFrameHeader
public Av1TransformMode TransformMode { get; set; }
public ObuDeltaLoopFilterParameters DeltaLoopFilterParameters { get; set; } = new ObuDeltaLoopFilterParameters();
public ObuDeltaParameters DeltaLoopFilterParameters { get; set; } = new ObuDeltaParameters();
public ObuDeltaQParameters DeltaQParameters { get; set; } = new ObuDeltaQParameters();
public ObuDeltaParameters DeltaQParameters { get; set; } = new ObuDeltaParameters();
internal ObuFrameSize FrameSize { get; set; } = new ObuFrameSize();

8
src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileDecoder.cs

@ -30,8 +30,6 @@ internal class Av1TileDecoder : IAv1TileDecoder
private readonly Av1ParseLeftNeighbor4x4Context leftNeighborContext;
private int currentQuantizerIndex;
private readonly int[][] segmentIds = [];
private int deltaLoopFilterResolution = -1;
private readonly bool readDeltas;
private readonly int[][] transformUnitCount;
private readonly int[] firstTransformOffset = new int[2];
private readonly int[] coefficientIndex = [];
@ -40,7 +38,6 @@ internal class Av1TileDecoder : IAv1TileDecoder
{
this.FrameInfo = frameInfo;
this.SequenceHeader = sequenceHeader;
this.readDeltas = frameInfo.DeltaQParameters.IsPresent;
// init_main_frame_ctxt
this.FrameBuffer = new(this.SequenceHeader);
@ -1420,7 +1417,7 @@ internal class Av1TileDecoder : IAv1TileDecoder
this.ReadCdef(ref reader, partitionInfo);
if (this.readDeltas)
if (this.FrameInfo.DeltaQParameters.IsPresent)
{
this.ReadDeltaQuantizerIndex(ref reader, partitionInfo);
this.ReadDeltaLoopFilter(ref reader, partitionInfo);
@ -1756,7 +1753,8 @@ internal class Av1TileDecoder : IAv1TileDecoder
{
bool deltaLoopFilterSign = reader.ReadLiteral(1) > 0;
int reducedDeltaLoopFilterLevel = deltaLoopFilterSign ? -deltaLoopFilterAbsolute : deltaLoopFilterAbsolute;
currentDeltaLoopFilter[i] = Av1Math.Clip3(-Av1Constants.MaxLoopFilter, Av1Constants.MaxLoopFilter, currentDeltaLoopFilter[i] + (reducedDeltaLoopFilterLevel << this.deltaLoopFilterResolution));
int deltaLoopFilterResolution = this.FrameInfo.DeltaLoopFilterParameters.Resolution;
currentDeltaLoopFilter[i] = Av1Math.Clip3(-Av1Constants.MaxLoopFilter, Av1Constants.MaxLoopFilter, currentDeltaLoopFilter[i] + (reducedDeltaLoopFilterLevel << deltaLoopFilterResolution));
}
}
}

Loading…
Cancel
Save