Browse Source

Simplify code by using constants

pull/2633/head
Ynse Hoornenborg 2 years ago
parent
commit
441949fe68
  1. 27
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs
  2. 20
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuSequenceHeader.cs
  3. 9
      src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileDecoder.cs

27
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs

@ -370,9 +370,6 @@ internal class ObuReader
// Video related flags removed
sequenceHeader.Use128x128Superblock = reader.ReadBoolean();
sequenceHeader.SuperblockSize = sequenceHeader.Use128x128Superblock ? Av1BlockSize.Block128x128 : Av1BlockSize.Block64x64;
sequenceHeader.SuperblockModeInfoSize = sequenceHeader.Use128x128Superblock ? 32 : 16;
sequenceHeader.SuperblockSizeLog2 = sequenceHeader.Use128x128Superblock ? 7 : 6;
sequenceHeader.EnableFilterIntra = reader.ReadBoolean();
sequenceHeader.EnableIntraEdgeFilter = reader.ReadBoolean();
@ -699,25 +696,15 @@ internal class ObuReader
ObuTileGroupHeader tileInfo = new();
int superBlockColumnCount;
int superBlockRowCount;
int superBlockShift;
if (sequenceHeader.Use128x128Superblock)
{
superBlockColumnCount = (frameInfo.ModeInfoColumnCount + 31) >> 5;
superBlockRowCount = (frameInfo.ModeInfoRowCount + 31) >> 5;
superBlockShift = 5;
}
else
{
superBlockColumnCount = (frameInfo.ModeInfoColumnCount + 15) >> 4;
superBlockRowCount = (frameInfo.ModeInfoRowCount + 15) >> 4;
superBlockShift = 4;
}
int superBlockShift = sequenceHeader.SuperblockSizeLog2 - Av1Constants.ModeInfoSizeLog2;
superBlockColumnCount = (frameInfo.ModeInfoColumnCount + sequenceHeader.SuperblockModeInfoSize - 1) >> superBlockShift;
superBlockRowCount = (frameInfo.ModeInfoRowCount + sequenceHeader.SuperblockModeInfoSize - 1) >> superBlockShift;
int superBlockSize = superBlockShift + 2;
int maxTileAreaOfSuperBlock = Av1Constants.MaxTileArea >> (2 * superBlockSize);
int superBlockSizeLog2 = superBlockShift + 2;
int maxTileAreaOfSuperBlock = Av1Constants.MaxTileArea >> (2 * superBlockSizeLog2);
tileInfo.MaxTileWidthSuperBlock = Av1Constants.MaxTileWidth >> superBlockSize;
tileInfo.MaxTileHeightSuperBlock = (Av1Constants.MaxTileArea / Av1Constants.MaxTileWidth) >> superBlockSize;
tileInfo.MaxTileWidthSuperBlock = Av1Constants.MaxTileWidth >> superBlockSizeLog2;
tileInfo.MaxTileHeightSuperBlock = (Av1Constants.MaxTileArea / Av1Constants.MaxTileWidth) >> superBlockSizeLog2;
tileInfo.MinLog2TileColumnCount = TileLog2(tileInfo.MaxTileWidthSuperBlock, superBlockColumnCount);
tileInfo.MaxLog2TileColumnCount = TileLog2(1, Math.Min(superBlockColumnCount, Av1Constants.MaxTileColumnCount));
tileInfo.MaxLog2TileRowCount = TileLog2(1, Math.Min(superBlockRowCount, Av1Constants.MaxTileRowCount));

20
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuSequenceHeader.cs

@ -5,6 +5,8 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit;
internal class ObuSequenceHeader
{
private bool use128x128Superblock;
public bool EnableFilterIntra { get; set; }
public bool EnableCdef { get; set; }
@ -37,13 +39,23 @@ internal class ObuSequenceHeader
public int MaxFrameHeight { get; set; }
public bool Use128x128Superblock { get; set; }
public bool Use128x128Superblock
{
get => this.use128x128Superblock;
set
{
this.use128x128Superblock = value;
this.SuperblockSize = value ? Av1BlockSize.Block128x128 : Av1BlockSize.Block64x64;
this.SuperblockSizeLog2 = value ? 7 : 6;
this.SuperblockModeInfoSize = 1 << (this.SuperblockSizeLog2 - Av1Constants.ModeInfoSizeLog2);
}
}
public Av1BlockSize SuperblockSize { get; set; }
public Av1BlockSize SuperblockSize { get; private set; }
public int SuperblockModeInfoSize { get; set; }
public int SuperblockModeInfoSize { get; private set; }
public int SuperblockSizeLog2 { get; set; }
public int SuperblockSizeLog2 { get; private set; }
public int FilterIntraLevel { get; set; }

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

@ -114,7 +114,6 @@ internal class Av1TileDecoder : IAv1TileDecoder
Point superblockPosition = new(superBlockColumn, superBlockRow);
Av1SuperblockInfo superblockInfo = this.FrameBuffer.GetSuperblock(superblockPosition);
// this.ClearBlockDecodedFlags(modeInfoLocation, superBlock4x4Size);
Point modeInfoPosition = new(column, row);
this.FrameBuffer.ClearCdef(superblockPosition);
this.firstTransformOffset[0] = 0;
@ -128,14 +127,6 @@ internal class Av1TileDecoder : IAv1TileDecoder
private void ClearLoopFilterDelta()
=> this.FrameBuffer.ClearDeltaLoopFilter();
/// <summary>
/// 5.11.3. Clear block decoded flags function.
/// </summary>
private static void ClearBlockDecodedFlags(Point modeInfoLocation, int superBlock4x4Size)
{
// Nothing to do here.
}
private void ReadLoopRestoration(Point modeInfoLocation, Av1BlockSize superBlockSize)
{
int planesCount = this.SequenceHeader.ColorConfig.PlaneCount;

Loading…
Cancel
Save