Browse Source

Add comments where the methods can be found in the spec

pull/2633/head
Brian Popow 2 years ago
parent
commit
cb4f9ee890
  1. 76
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs

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

@ -5,6 +5,9 @@ using SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
namespace SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit;
/// <summary>
/// Reader for Open Bitstream Units (OBU's).
/// </summary>
internal class ObuReader
{
public ObuSequenceHeader? SequenceHeader { get; set; }
@ -114,6 +117,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.3.2. OBU header syntax.
/// </summary>
private static ObuHeader ReadObuHeader(ref Av1BitStreamReader reader)
{
ObuHeader header = new();
@ -191,6 +197,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.3.5. Byte alignment syntax.
/// </summary>
private static void AlignToByteBoundary(ref Av1BitStreamReader reader)
{
while ((reader.BitPosition & 0x7) > 0)
@ -217,6 +226,9 @@ internal class ObuReader
_ => false,
};
/// <summary>
/// 5.5.1. General sequence header OBU syntax.
/// </summary>
private static void ReadSequenceHeader(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader)
{
sequenceHeader.SequenceProfile = (ObuSequenceProfile)reader.ReadLiteral(3);
@ -285,6 +297,9 @@ internal class ObuReader
ReadTrailingBits(ref reader);
}
/// <summary>
/// 5.5.2. Color config syntax.
/// </summary>
private static ObuColorConfig ReadColorConfig(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader)
{
ObuColorConfig colorConfig = new();
@ -387,6 +402,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.8. Superres params syntax.
/// </summary>
private static void ReadSuperResolutionParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
bool useSuperResolution = false;
@ -417,6 +435,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.6. Render size syntax.
/// </summary>
private static void ReadRenderSize(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
bool renderSizeAndFrameSizeDifferent = reader.ReadBoolean();
@ -432,6 +453,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.7. Frame size with refs syntax.
/// </summary>
private static void ReadFrameSizeWithReferences(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, bool frameSizeOverrideFlag)
{
bool foundReference = false;
@ -457,6 +481,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.5. Frame size syntax.
/// </summary>
private static void ReadFrameSize(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, bool frameSizeOverrideFlag)
{
if (frameSizeOverrideFlag)
@ -474,6 +501,9 @@ internal class ObuReader
ComputeImageSize(sequenceHeader, frameInfo);
}
/// <summary>
/// 5.9.15. Tile info syntax.
/// </summary>
private static ObuTileGroupHeader ReadTileInfo(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
ObuTileGroupHeader tileInfo = new();
@ -642,6 +672,9 @@ internal class ObuReader
return tileInfo;
}
/// <summary>
/// 5.9.2. Uncompressed header syntax.
/// </summary>
private void ReadUncompressedFrameHeader(ref Av1BitStreamReader reader, ObuHeader header, int planesCount)
{
ObuSequenceHeader sequenceHeader = this.SequenceHeader!;
@ -924,6 +957,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.1. General frame header OBU syntax.
/// </summary>
private void ReadFrameHeader(ref Av1BitStreamReader reader, ObuHeader header, bool trailingBit)
{
int planeCount = this.SequenceHeader!.ColorConfig.IsMonochrome ? 1 : 3;
@ -941,6 +977,9 @@ internal class ObuReader
header.PayloadSize -= headerBytes;
}
/// <summary>
/// 5.11.1. General tile group OBU syntax.
/// </summary>
private void ReadTileGroup(ref Av1BitStreamReader reader, IAv1TileDecoder decoder, ObuHeader header, out bool isLastTileGroup)
{
ObuSequenceHeader sequenceHeader = this.SequenceHeader!;
@ -1008,6 +1047,9 @@ internal class ObuReader
decoder.FinishDecodeTiles(doCdef, doLoopRestoration);
}
/// <summary>
/// 5.9.13. Delta quantizer syntax.
/// </summary>
private static int ReadDeltaQ(ref Av1BitStreamReader reader)
{
int deltaQ = 0;
@ -1019,6 +1061,9 @@ internal class ObuReader
return deltaQ;
}
/// <summary>
/// 5.9.17. Quantizer index delta parameters syntax.
/// </summary>
private static void ReadFrameDeltaQParameters(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
frameInfo.DeltaQParameters.Resolution = 0;
@ -1034,6 +1079,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.18. Loop filter delta parameters syntax.
/// </summary>
private static void ReadFrameDeltaLoopFilterParameters(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
frameInfo.DeltaLoopFilterParameters.IsPresent = false;
@ -1054,6 +1102,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.12. Quantization params syntax.
/// </summary>
private static void ReadQuantizationParameters(ref Av1BitStreamReader reader, ObuQuantizationParameters quantParams, ObuColorConfig colorInfo, int planesCount)
{
quantParams.BaseQIndex = (int)reader.ReadLiteral(8);
@ -1105,6 +1156,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.14. Segmentation params syntax.
/// </summary>
private static void ReadSegmentationParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
frameInfo.SegmentationParameters.Enabled = reader.ReadBoolean();
@ -1113,6 +1167,9 @@ internal class ObuReader
// TODO: Parse more stuff.
}
/// <summary>
/// 5.9.11. Loop filter params syntax
/// </summary>
private static void ReadLoopFilterParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
if (frameInfo.CodedLossless || frameInfo.AllowIntraBlockCopy)
@ -1125,6 +1182,9 @@ internal class ObuReader
// TODO: Parse more stuff.
}
/// <summary>
/// 5.9.21. TX mode syntax.
/// </summary>
private static void ReadTransformMode(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
if (frameInfo.CodedLossless)
@ -1145,7 +1205,7 @@ internal class ObuReader
}
/// <summary>
/// See section 5.9.20.
/// See section 5.9.20. Loop restoration params syntax.
/// </summary>
private static void ReadLoopRestorationParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
@ -1201,7 +1261,7 @@ internal class ObuReader
}
/// <summary>
/// See section 5.9.19.
/// See section 5.9.19. CDEF params syntax.
/// </summary>
private static void ReadCdefParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
@ -1230,6 +1290,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.24. Global motion params syntax.
/// </summary>
private static void ReadGlobalMotionParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, bool isIntraFrame)
{
if (isIntraFrame)
@ -1240,6 +1303,9 @@ internal class ObuReader
// Not applicable for INTRA frames.
}
/// <summary>
/// 5.9.23. Frame reference mode syntax
/// </summary>
private static ObuReferenceMode ReadFrameReferenceMode(ref Av1BitStreamReader reader, bool isIntraFrame)
{
if (isIntraFrame)
@ -1250,6 +1316,9 @@ internal class ObuReader
return (ObuReferenceMode)reader.ReadLiteral(1);
}
/// <summary>
/// 5.11.10. Skip mode syntax.
/// </summary>
private static void ReadSkipModeParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, bool isIntraFrame, ObuReferenceMode referenceSelect)
{
if (isIntraFrame || referenceSelect == ObuReferenceMode.ReferenceModeSelect || !sequenceHeader.OrderHintInfo.EnableOrderHint)
@ -1271,6 +1340,9 @@ internal class ObuReader
}
}
/// <summary>
/// 5.9.30. Film grain params syntax.
/// </summary>
private static ObuFilmGrainParameters ReadFilmGrainFilterParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
ObuFilmGrainParameters grainParams = new();

Loading…
Cancel
Save