aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/VDec/H264Decoder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics/VDec/H264Decoder.cs')
-rw-r--r--Ryujinx.Graphics/VDec/H264Decoder.cs298
1 files changed, 149 insertions, 149 deletions
diff --git a/Ryujinx.Graphics/VDec/H264Decoder.cs b/Ryujinx.Graphics/VDec/H264Decoder.cs
index d5d46713..01085a73 100644
--- a/Ryujinx.Graphics/VDec/H264Decoder.cs
+++ b/Ryujinx.Graphics/VDec/H264Decoder.cs
@@ -4,195 +4,195 @@ namespace Ryujinx.Graphics.VDec
{
class H264Decoder
{
- private int Log2MaxPicOrderCntLsbMinus4;
- private bool DeltaPicOrderAlwaysZeroFlag;
- private bool FrameMbsOnlyFlag;
- private int PicWidthInMbs;
- private int PicHeightInMapUnits;
- private bool EntropyCodingModeFlag;
- private bool BottomFieldPicOrderInFramePresentFlag;
- private int NumRefIdxL0DefaultActiveMinus1;
- private int NumRefIdxL1DefaultActiveMinus1;
- private bool DeblockingFilterControlPresentFlag;
- private bool RedundantPicCntPresentFlag;
- private bool Transform8x8ModeFlag;
- private bool MbAdaptiveFrameFieldFlag;
- private bool Direct8x8InferenceFlag;
- private bool WeightedPredFlag;
- private bool ConstrainedIntraPredFlag;
- private bool FieldPicFlag;
- private bool BottomFieldFlag;
- private int Log2MaxFrameNumMinus4;
- private int ChromaFormatIdc;
- private int PicOrderCntType;
- private int PicInitQpMinus26;
- private int ChromaQpIndexOffset;
- private int ChromaQpIndexOffset2;
- private int WeightedBipredIdc;
- private int FrameNumber;
- private byte[] ScalingMatrix4;
- private byte[] ScalingMatrix8;
-
- public void Decode(H264ParameterSets Params, H264Matrices Matrices, byte[] FrameData)
+ private int _log2MaxPicOrderCntLsbMinus4;
+ private bool _deltaPicOrderAlwaysZeroFlag;
+ private bool _frameMbsOnlyFlag;
+ private int _picWidthInMbs;
+ private int _picHeightInMapUnits;
+ private bool _entropyCodingModeFlag;
+ private bool _bottomFieldPicOrderInFramePresentFlag;
+ private int _numRefIdxL0DefaultActiveMinus1;
+ private int _numRefIdxL1DefaultActiveMinus1;
+ private bool _deblockingFilterControlPresentFlag;
+ private bool _redundantPicCntPresentFlag;
+ private bool _transform8x8ModeFlag;
+ private bool _mbAdaptiveFrameFieldFlag;
+ private bool _direct8x8InferenceFlag;
+ private bool _weightedPredFlag;
+ private bool _constrainedIntraPredFlag;
+ private bool _fieldPicFlag;
+ private bool _bottomFieldFlag;
+ private int _log2MaxFrameNumMinus4;
+ private int _chromaFormatIdc;
+ private int _picOrderCntType;
+ private int _picInitQpMinus26;
+ private int _chromaQpIndexOffset;
+ private int _chromaQpIndexOffset2;
+ private int _weightedBipredIdc;
+ private int _frameNumber;
+ private byte[] _scalingMatrix4;
+ private byte[] _scalingMatrix8;
+
+ public void Decode(H264ParameterSets Params, H264Matrices matrices, byte[] frameData)
{
- Log2MaxPicOrderCntLsbMinus4 = Params.Log2MaxPicOrderCntLsbMinus4;
- DeltaPicOrderAlwaysZeroFlag = Params.DeltaPicOrderAlwaysZeroFlag;
- FrameMbsOnlyFlag = Params.FrameMbsOnlyFlag;
- PicWidthInMbs = Params.PicWidthInMbs;
- PicHeightInMapUnits = Params.PicHeightInMapUnits;
- EntropyCodingModeFlag = Params.EntropyCodingModeFlag;
- BottomFieldPicOrderInFramePresentFlag = Params.BottomFieldPicOrderInFramePresentFlag;
- NumRefIdxL0DefaultActiveMinus1 = Params.NumRefIdxL0DefaultActiveMinus1;
- NumRefIdxL1DefaultActiveMinus1 = Params.NumRefIdxL1DefaultActiveMinus1;
- DeblockingFilterControlPresentFlag = Params.DeblockingFilterControlPresentFlag;
- RedundantPicCntPresentFlag = Params.RedundantPicCntPresentFlag;
- Transform8x8ModeFlag = Params.Transform8x8ModeFlag;
-
- MbAdaptiveFrameFieldFlag = ((Params.Flags >> 0) & 1) != 0;
- Direct8x8InferenceFlag = ((Params.Flags >> 1) & 1) != 0;
- WeightedPredFlag = ((Params.Flags >> 2) & 1) != 0;
- ConstrainedIntraPredFlag = ((Params.Flags >> 3) & 1) != 0;
- FieldPicFlag = ((Params.Flags >> 5) & 1) != 0;
- BottomFieldFlag = ((Params.Flags >> 6) & 1) != 0;
-
- Log2MaxFrameNumMinus4 = (int)(Params.Flags >> 8) & 0xf;
- ChromaFormatIdc = (int)(Params.Flags >> 12) & 0x3;
- PicOrderCntType = (int)(Params.Flags >> 14) & 0x3;
- PicInitQpMinus26 = (int)(Params.Flags >> 16) & 0x3f;
- ChromaQpIndexOffset = (int)(Params.Flags >> 22) & 0x1f;
- ChromaQpIndexOffset2 = (int)(Params.Flags >> 27) & 0x1f;
- WeightedBipredIdc = (int)(Params.Flags >> 32) & 0x3;
- FrameNumber = (int)(Params.Flags >> 46) & 0x1ffff;
-
- PicInitQpMinus26 = (PicInitQpMinus26 << 26) >> 26;
- ChromaQpIndexOffset = (ChromaQpIndexOffset << 27) >> 27;
- ChromaQpIndexOffset2 = (ChromaQpIndexOffset2 << 27) >> 27;
-
- ScalingMatrix4 = Matrices.ScalingMatrix4;
- ScalingMatrix8 = Matrices.ScalingMatrix8;
+ _log2MaxPicOrderCntLsbMinus4 = Params.Log2MaxPicOrderCntLsbMinus4;
+ _deltaPicOrderAlwaysZeroFlag = Params.DeltaPicOrderAlwaysZeroFlag;
+ _frameMbsOnlyFlag = Params.FrameMbsOnlyFlag;
+ _picWidthInMbs = Params.PicWidthInMbs;
+ _picHeightInMapUnits = Params.PicHeightInMapUnits;
+ _entropyCodingModeFlag = Params.EntropyCodingModeFlag;
+ _bottomFieldPicOrderInFramePresentFlag = Params.BottomFieldPicOrderInFramePresentFlag;
+ _numRefIdxL0DefaultActiveMinus1 = Params.NumRefIdxL0DefaultActiveMinus1;
+ _numRefIdxL1DefaultActiveMinus1 = Params.NumRefIdxL1DefaultActiveMinus1;
+ _deblockingFilterControlPresentFlag = Params.DeblockingFilterControlPresentFlag;
+ _redundantPicCntPresentFlag = Params.RedundantPicCntPresentFlag;
+ _transform8x8ModeFlag = Params.Transform8x8ModeFlag;
+
+ _mbAdaptiveFrameFieldFlag = ((Params.Flags >> 0) & 1) != 0;
+ _direct8x8InferenceFlag = ((Params.Flags >> 1) & 1) != 0;
+ _weightedPredFlag = ((Params.Flags >> 2) & 1) != 0;
+ _constrainedIntraPredFlag = ((Params.Flags >> 3) & 1) != 0;
+ _fieldPicFlag = ((Params.Flags >> 5) & 1) != 0;
+ _bottomFieldFlag = ((Params.Flags >> 6) & 1) != 0;
+
+ _log2MaxFrameNumMinus4 = (int)(Params.Flags >> 8) & 0xf;
+ _chromaFormatIdc = (int)(Params.Flags >> 12) & 0x3;
+ _picOrderCntType = (int)(Params.Flags >> 14) & 0x3;
+ _picInitQpMinus26 = (int)(Params.Flags >> 16) & 0x3f;
+ _chromaQpIndexOffset = (int)(Params.Flags >> 22) & 0x1f;
+ _chromaQpIndexOffset2 = (int)(Params.Flags >> 27) & 0x1f;
+ _weightedBipredIdc = (int)(Params.Flags >> 32) & 0x3;
+ _frameNumber = (int)(Params.Flags >> 46) & 0x1ffff;
+
+ _picInitQpMinus26 = (_picInitQpMinus26 << 26) >> 26;
+ _chromaQpIndexOffset = (_chromaQpIndexOffset << 27) >> 27;
+ _chromaQpIndexOffset2 = (_chromaQpIndexOffset2 << 27) >> 27;
+
+ _scalingMatrix4 = matrices.ScalingMatrix4;
+ _scalingMatrix8 = matrices.ScalingMatrix8;
if (FFmpegWrapper.IsInitialized)
{
- FFmpegWrapper.DecodeFrame(FrameData);
+ FFmpegWrapper.DecodeFrame(frameData);
}
else
{
FFmpegWrapper.H264Initialize();
- FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(EncodeHeader(), FrameData));
+ FFmpegWrapper.DecodeFrame(DecoderHelper.Combine(EncodeHeader(), frameData));
}
}
private byte[] EncodeHeader()
{
- using (MemoryStream Data = new MemoryStream())
+ using (MemoryStream data = new MemoryStream())
{
- H264BitStreamWriter Writer = new H264BitStreamWriter(Data);
+ H264BitStreamWriter writer = new H264BitStreamWriter(data);
//Sequence Parameter Set.
- Writer.WriteU(1, 24);
- Writer.WriteU(0, 1);
- Writer.WriteU(3, 2);
- Writer.WriteU(7, 5);
- Writer.WriteU(100, 8);
- Writer.WriteU(0, 8);
- Writer.WriteU(31, 8);
- Writer.WriteUe(0);
- Writer.WriteUe(ChromaFormatIdc);
-
- if (ChromaFormatIdc == 3)
+ writer.WriteU(1, 24);
+ writer.WriteU(0, 1);
+ writer.WriteU(3, 2);
+ writer.WriteU(7, 5);
+ writer.WriteU(100, 8);
+ writer.WriteU(0, 8);
+ writer.WriteU(31, 8);
+ writer.WriteUe(0);
+ writer.WriteUe(_chromaFormatIdc);
+
+ if (_chromaFormatIdc == 3)
{
- Writer.WriteBit(false);
+ writer.WriteBit(false);
}
- Writer.WriteUe(0);
- Writer.WriteUe(0);
- Writer.WriteBit(false);
- Writer.WriteBit(false); //Scaling matrix present flag
+ writer.WriteUe(0);
+ writer.WriteUe(0);
+ writer.WriteBit(false);
+ writer.WriteBit(false); //Scaling matrix present flag
- Writer.WriteUe(Log2MaxFrameNumMinus4);
- Writer.WriteUe(PicOrderCntType);
+ writer.WriteUe(_log2MaxFrameNumMinus4);
+ writer.WriteUe(_picOrderCntType);
- if (PicOrderCntType == 0)
+ if (_picOrderCntType == 0)
{
- Writer.WriteUe(Log2MaxPicOrderCntLsbMinus4);
+ writer.WriteUe(_log2MaxPicOrderCntLsbMinus4);
}
- else if (PicOrderCntType == 1)
+ else if (_picOrderCntType == 1)
{
- Writer.WriteBit(DeltaPicOrderAlwaysZeroFlag);
+ writer.WriteBit(_deltaPicOrderAlwaysZeroFlag);
- Writer.WriteSe(0);
- Writer.WriteSe(0);
- Writer.WriteUe(0);
+ writer.WriteSe(0);
+ writer.WriteSe(0);
+ writer.WriteUe(0);
}
- int PicHeightInMbs = PicHeightInMapUnits / (FrameMbsOnlyFlag ? 1 : 2);
+ int picHeightInMbs = _picHeightInMapUnits / (_frameMbsOnlyFlag ? 1 : 2);
- Writer.WriteUe(16);
- Writer.WriteBit(false);
- Writer.WriteUe(PicWidthInMbs - 1);
- Writer.WriteUe(PicHeightInMbs - 1);
- Writer.WriteBit(FrameMbsOnlyFlag);
+ writer.WriteUe(16);
+ writer.WriteBit(false);
+ writer.WriteUe(_picWidthInMbs - 1);
+ writer.WriteUe(picHeightInMbs - 1);
+ writer.WriteBit(_frameMbsOnlyFlag);
- if (!FrameMbsOnlyFlag)
+ if (!_frameMbsOnlyFlag)
{
- Writer.WriteBit(MbAdaptiveFrameFieldFlag);
+ writer.WriteBit(_mbAdaptiveFrameFieldFlag);
}
- Writer.WriteBit(Direct8x8InferenceFlag);
- Writer.WriteBit(false); //Frame cropping flag
- Writer.WriteBit(false); //VUI parameter present flag
+ writer.WriteBit(_direct8x8InferenceFlag);
+ writer.WriteBit(false); //Frame cropping flag
+ writer.WriteBit(false); //VUI parameter present flag
- Writer.End();
+ writer.End();
//Picture Parameter Set.
- Writer.WriteU(1, 24);
- Writer.WriteU(0, 1);
- Writer.WriteU(3, 2);
- Writer.WriteU(8, 5);
-
- Writer.WriteUe(0);
- Writer.WriteUe(0);
-
- Writer.WriteBit(EntropyCodingModeFlag);
- Writer.WriteBit(false);
- Writer.WriteUe(0);
- Writer.WriteUe(NumRefIdxL0DefaultActiveMinus1);
- Writer.WriteUe(NumRefIdxL1DefaultActiveMinus1);
- Writer.WriteBit(WeightedPredFlag);
- Writer.WriteU(WeightedBipredIdc, 2);
- Writer.WriteSe(PicInitQpMinus26);
- Writer.WriteSe(0);
- Writer.WriteSe(ChromaQpIndexOffset);
- Writer.WriteBit(DeblockingFilterControlPresentFlag);
- Writer.WriteBit(ConstrainedIntraPredFlag);
- Writer.WriteBit(RedundantPicCntPresentFlag);
- Writer.WriteBit(Transform8x8ModeFlag);
-
- Writer.WriteBit(true);
-
- for (int Index = 0; Index < 6; Index++)
+ writer.WriteU(1, 24);
+ writer.WriteU(0, 1);
+ writer.WriteU(3, 2);
+ writer.WriteU(8, 5);
+
+ writer.WriteUe(0);
+ writer.WriteUe(0);
+
+ writer.WriteBit(_entropyCodingModeFlag);
+ writer.WriteBit(false);
+ writer.WriteUe(0);
+ writer.WriteUe(_numRefIdxL0DefaultActiveMinus1);
+ writer.WriteUe(_numRefIdxL1DefaultActiveMinus1);
+ writer.WriteBit(_weightedPredFlag);
+ writer.WriteU(_weightedBipredIdc, 2);
+ writer.WriteSe(_picInitQpMinus26);
+ writer.WriteSe(0);
+ writer.WriteSe(_chromaQpIndexOffset);
+ writer.WriteBit(_deblockingFilterControlPresentFlag);
+ writer.WriteBit(_constrainedIntraPredFlag);
+ writer.WriteBit(_redundantPicCntPresentFlag);
+ writer.WriteBit(_transform8x8ModeFlag);
+
+ writer.WriteBit(true);
+
+ for (int index = 0; index < 6; index++)
{
- Writer.WriteBit(true);
+ writer.WriteBit(true);
- WriteScalingList(Writer, ScalingMatrix4, Index * 16, 16);
+ WriteScalingList(writer, _scalingMatrix4, index * 16, 16);
}
- if (Transform8x8ModeFlag)
+ if (_transform8x8ModeFlag)
{
- for (int Index = 0; Index < 2; Index++)
+ for (int index = 0; index < 2; index++)
{
- Writer.WriteBit(true);
+ writer.WriteBit(true);
- WriteScalingList(Writer, ScalingMatrix8, Index * 64, 64);
+ WriteScalingList(writer, _scalingMatrix8, index * 64, 64);
}
}
- Writer.WriteSe(ChromaQpIndexOffset2);
+ writer.WriteSe(_chromaQpIndexOffset2);
- Writer.End();
+ writer.End();
- return Data.ToArray();
+ return data.ToArray();
}
}
@@ -217,21 +217,21 @@ namespace Ryujinx.Graphics.VDec
3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4
};
- private static void WriteScalingList(H264BitStreamWriter Writer, byte[] List, int Start, int Count)
+ private static void WriteScalingList(H264BitStreamWriter writer, byte[] list, int start, int count)
{
- byte[] Scan = Count == 16 ? ZigZagScan : ZigZagDirect;
+ byte[] scan = count == 16 ? ZigZagScan : ZigZagDirect;
- int LastScale = 8;
+ int lastScale = 8;
- for (int Index = 0; Index < Count; Index++)
+ for (int index = 0; index < count; index++)
{
- byte Value = List[Start + Scan[Index]];
+ byte value = list[start + scan[index]];
- int DeltaScale = Value - LastScale;
+ int deltaScale = value - lastScale;
- Writer.WriteSe(DeltaScale);
+ writer.WriteSe(deltaScale);
- LastScale = Value;
+ lastScale = value;
}
}
}