Browse Source

Continue implement case !IsReducedStillPictureHeader in ReadUncompressedFrameHeader()

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

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

@ -894,7 +894,6 @@ internal class ObuReader
if (frameInfo.ShowExistingFrame) if (frameInfo.ShowExistingFrame)
{ {
frameInfo.FrameToShowMapIdx = reader.ReadLiteral(3); frameInfo.FrameToShowMapIdx = reader.ReadLiteral(3);
}
if (sequenceHeader.DecoderModelInfoPresentFlag && sequenceHeader.TimingInfo?.EqualPictureInterval == false) if (sequenceHeader.DecoderModelInfoPresentFlag && sequenceHeader.TimingInfo?.EqualPictureInterval == false)
{ {
@ -902,16 +901,44 @@ internal class ObuReader
frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength); frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength);
} }
// int refreshFrameFlags = 0;
if (sequenceHeader.IsFrameIdNumbersPresent) if (sequenceHeader.IsFrameIdNumbersPresent)
{ {
frameInfo.DisplayFrameId = reader.ReadLiteral(idLength); frameInfo.DisplayFrameId = reader.ReadLiteral(idLength);
} }
// TODO: This is incomplete here, not sure how we can display an already decoded frame here. // TODO: This is incomplete here, not sure how we can display an already decoded frame here or if this is really relevent for still pictures.
throw new NotImplementedException("ShowExistingFrame is not yet implemented"); throw new NotImplementedException("ShowExistingFrame is not yet implemented");
} }
frameInfo.FrameType = (ObuFrameType)reader.ReadLiteral(2);
bool frameIsIntra = frameInfo.FrameType is ObuFrameType.IntraOnlyFrame or ObuFrameType.KeyFrame;
frameInfo.ShowFrame = reader.ReadBoolean();
if (frameInfo.ShowFrame && !sequenceHeader.DecoderModelInfoPresentFlag && sequenceHeader.TimingInfo?.EqualPictureInterval == false)
{
// 5.9.31. Temporal point info syntax.
frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength);
}
if (frameInfo.ShowFrame)
{
frameInfo.ShowableFrame = frameInfo.FrameType != ObuFrameType.KeyFrame;
}
else
{
frameInfo.ShowableFrame = reader.ReadBoolean();
}
if (frameInfo.FrameType == ObuFrameType.SwitchFrame || (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame))
{
frameInfo.ErrorResilientMode = true;
}
else
{
frameInfo.ErrorResilientMode = reader.ReadBoolean();
}
}
if (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame) if (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame)
{ {
frameInfo.ReferenceValid = new bool[Av1Constants.ReferenceFrameCount]; frameInfo.ReferenceValid = new bool[Av1Constants.ReferenceFrameCount];
@ -1080,6 +1107,10 @@ internal class ObuReader
{ {
frameInfo.DisableFrameEndUpdateCdf = true; frameInfo.DisableFrameEndUpdateCdf = true;
} }
else
{
frameInfo.DisableFrameEndUpdateCdf = reader.ReadBoolean();
}
if (frameInfo.PrimaryReferenceFrame == Av1Constants.PrimaryReferenceFrameNone) if (frameInfo.PrimaryReferenceFrame == Av1Constants.PrimaryReferenceFrameNone)
{ {

Loading…
Cancel
Save