diff --git a/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs b/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs
index 889fe51f0..46479d77e 100644
--- a/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs
+++ b/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;
+///
+/// Reader for Open Bitstream Units (OBU's).
+///
internal class ObuReader
{
public ObuSequenceHeader? SequenceHeader { get; set; }
@@ -114,6 +117,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.3.2. OBU header syntax.
+ ///
private static ObuHeader ReadObuHeader(ref Av1BitStreamReader reader)
{
ObuHeader header = new();
@@ -191,6 +197,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.3.5. Byte alignment syntax.
+ ///
private static void AlignToByteBoundary(ref Av1BitStreamReader reader)
{
while ((reader.BitPosition & 0x7) > 0)
@@ -217,6 +226,9 @@ internal class ObuReader
_ => false,
};
+ ///
+ /// 5.5.1. General sequence header OBU syntax.
+ ///
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);
}
+ ///
+ /// 5.5.2. Color config syntax.
+ ///
private static ObuColorConfig ReadColorConfig(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader)
{
ObuColorConfig colorConfig = new();
@@ -387,6 +402,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.8. Superres params syntax.
+ ///
private static void ReadSuperResolutionParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
bool useSuperResolution = false;
@@ -417,6 +435,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.6. Render size syntax.
+ ///
private static void ReadRenderSize(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
bool renderSizeAndFrameSizeDifferent = reader.ReadBoolean();
@@ -432,6 +453,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.7. Frame size with refs syntax.
+ ///
private static void ReadFrameSizeWithReferences(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, bool frameSizeOverrideFlag)
{
bool foundReference = false;
@@ -457,6 +481,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.5. Frame size syntax.
+ ///
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);
}
+ ///
+ /// 5.9.15. Tile info syntax.
+ ///
private static ObuTileGroupHeader ReadTileInfo(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
ObuTileGroupHeader tileInfo = new();
@@ -642,6 +672,9 @@ internal class ObuReader
return tileInfo;
}
+ ///
+ /// 5.9.2. Uncompressed header syntax.
+ ///
private void ReadUncompressedFrameHeader(ref Av1BitStreamReader reader, ObuHeader header, int planesCount)
{
ObuSequenceHeader sequenceHeader = this.SequenceHeader!;
@@ -924,6 +957,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.1. General frame header OBU syntax.
+ ///
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;
}
+ ///
+ /// 5.11.1. General tile group OBU syntax.
+ ///
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);
}
+ ///
+ /// 5.9.13. Delta quantizer syntax.
+ ///
private static int ReadDeltaQ(ref Av1BitStreamReader reader)
{
int deltaQ = 0;
@@ -1019,6 +1061,9 @@ internal class ObuReader
return deltaQ;
}
+ ///
+ /// 5.9.17. Quantizer index delta parameters syntax.
+ ///
private static void ReadFrameDeltaQParameters(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
frameInfo.DeltaQParameters.Resolution = 0;
@@ -1034,6 +1079,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.18. Loop filter delta parameters syntax.
+ ///
private static void ReadFrameDeltaLoopFilterParameters(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
frameInfo.DeltaLoopFilterParameters.IsPresent = false;
@@ -1054,6 +1102,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.12. Quantization params syntax.
+ ///
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
}
}
+ ///
+ /// 5.9.14. Segmentation params syntax.
+ ///
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.
}
+ ///
+ /// 5.9.11. Loop filter params syntax
+ ///
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.
}
+ ///
+ /// 5.9.21. TX mode syntax.
+ ///
private static void ReadTransformMode(ref Av1BitStreamReader reader, ObuFrameHeader frameInfo)
{
if (frameInfo.CodedLossless)
@@ -1145,7 +1205,7 @@ internal class ObuReader
}
///
- /// See section 5.9.20.
+ /// See section 5.9.20. Loop restoration params syntax.
///
private static void ReadLoopRestorationParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
@@ -1201,7 +1261,7 @@ internal class ObuReader
}
///
- /// See section 5.9.19.
+ /// See section 5.9.19. CDEF params syntax.
///
private static void ReadCdefParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo, int planesCount)
{
@@ -1230,6 +1290,9 @@ internal class ObuReader
}
}
+ ///
+ /// 5.9.24. Global motion params syntax.
+ ///
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.
}
+ ///
+ /// 5.9.23. Frame reference mode syntax
+ ///
private static ObuReferenceMode ReadFrameReferenceMode(ref Av1BitStreamReader reader, bool isIntraFrame)
{
if (isIntraFrame)
@@ -1250,6 +1316,9 @@ internal class ObuReader
return (ObuReferenceMode)reader.ReadLiteral(1);
}
+ ///
+ /// 5.11.10. Skip mode syntax.
+ ///
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
}
}
+ ///
+ /// 5.9.30. Film grain params syntax.
+ ///
private static ObuFilmGrainParameters ReadFilmGrainFilterParameters(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader, ObuFrameHeader frameInfo)
{
ObuFilmGrainParameters grainParams = new();