Browse Source

Implement 5.5.4. read Decoder model info

pull/2633/head
Brian Popow 2 years ago
parent
commit
2accf9513c
  1. 29
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDecoderModelInfo.cs
  2. 13
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs
  3. 2
      src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuSequenceHeader.cs

29
src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuDecoderModelInfo.cs

@ -0,0 +1,29 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
namespace SixLabors.ImageSharp.Formats.Heif.Av1;
internal class ObuDecoderModelInfo
{
/// <summary>
/// Gets or sets BufferDelayLength. Specifies the length of the decoder_buffer_delay and the encoder_buffer_delay
/// syntax elements, in bits.
/// </summary>
internal uint BufferDelayLength { get; set; }
/// <summary>
/// Gets or sets NumUnitsInDecodingTick. This is the number of time units of a decoding clock operating at the frequency time_scale Hz
/// that corresponds to one increment of a clock tick counter.
/// </summary>
internal uint NumUnitsInDecodingTick { get; set; }
/// <summary>
/// Gets or sets BufferRemovalTimeLength. Specifies the length of the buffer_removal_time syntax element, in bits.
/// </summary>
internal uint BufferRemovalTimeLength { get; set; }
/// <summary>
/// Gets or sets the FramePresentationTimeLength. Specifies the length of the frame_presentation_time syntax element, in bits.
/// </summary>
internal uint FramePresentationTimeLength { get; set; }
}

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

@ -292,7 +292,7 @@ internal class ObuReader
sequenceHeader.DecoderModelInfoPresentFlag = reader.ReadBoolean();
if (sequenceHeader.DecoderModelInfoPresentFlag)
{
// TODO: read decoder_model_info( )
ReadDecoderModelInfo(ref reader, sequenceHeader);
}
}
@ -461,6 +461,17 @@ internal class ObuReader
return colorConfig;
}
/// <summary>
/// 5.5.4. Decoder model info syntax.
/// </summary>
private static void ReadDecoderModelInfo(ref Av1BitStreamReader reader, ObuSequenceHeader sequenceHeader) => sequenceHeader.DecoderModelInfo = new ObuDecoderModelInfo
{
BufferDelayLength = reader.ReadLiteral(5) + 1,
NumUnitsInDecodingTick = reader.ReadLiteral(16),
BufferRemovalTimeLength = reader.ReadLiteral(5) + 1,
FramePresentationTimeLength = reader.ReadLiteral(5) + 1
};
private static void ReadBitDepth(ref Av1BitStreamReader reader, ObuColorConfig colorConfig, ObuSequenceHeader sequenceHeader)
{
bool hasHighBitDepth = reader.ReadBoolean();

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

@ -17,6 +17,8 @@ internal class ObuSequenceHeader
public ObuOperatingPoint[] OperatingPoint { get; set; } = new ObuOperatingPoint[1];
public ObuDecoderModelInfo? DecoderModelInfo { get; set; }
public bool InitialDisplayDelayPresentFlag { get; set; }
public bool DecoderModelInfoPresentFlag { get; set; }

Loading…
Cancel
Save