Browse Source

Continue implement case !IsReducedStillPictureHeader in ReadUncompressedFrameHeader()

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

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

@ -894,22 +894,49 @@ 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)
{
// 5.9.31. Temporal point info syntax.
frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength);
}
if (sequenceHeader.IsFrameIdNumbersPresent)
{
frameInfo.DisplayFrameId = reader.ReadLiteral(idLength);
}
// 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");
} }
if (sequenceHeader.DecoderModelInfoPresentFlag && sequenceHeader.TimingInfo?.EqualPictureInterval == false) 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. // 5.9.31. Temporal point info syntax.
frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength); frameInfo.FramePresentationTime = reader.ReadLiteral((int)sequenceHeader!.DecoderModelInfo!.FramePresentationTimeLength);
} }
// int refreshFrameFlags = 0; if (frameInfo.ShowFrame)
if (sequenceHeader.IsFrameIdNumbersPresent)
{ {
frameInfo.DisplayFrameId = reader.ReadLiteral(idLength); frameInfo.ShowableFrame = frameInfo.FrameType != ObuFrameType.KeyFrame;
}
else
{
frameInfo.ShowableFrame = reader.ReadBoolean();
} }
// TODO: This is incomplete here, not sure how we can display an already decoded frame here. if (frameInfo.FrameType == ObuFrameType.SwitchFrame || (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame))
throw new NotImplementedException("ShowExistingFrame is not yet implemented"); {
frameInfo.ErrorResilientMode = true;
}
else
{
frameInfo.ErrorResilientMode = reader.ReadBoolean();
}
} }
if (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame) if (frameInfo.FrameType == ObuFrameType.KeyFrame && frameInfo.ShowFrame)
@ -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