aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec.Vp9/Types
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Graphics.Nvdec.Vp9/Types
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Graphics.Nvdec.Vp9/Types')
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/BModeInfo.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs21
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Buf2D.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/FrameType.cs8
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilter.cs27
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterInfoN.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs24
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterThresh.cs15
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockD.cs179
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockDPlane.cs21
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs66
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MotionVectorContext.cs14
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs189
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Mv32.cs8
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MvClassType.cs17
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MvJointType.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/MvRef.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/PartitionType.cs12
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/PlaneType.cs9
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Position.cs14
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/PredictionMode.cs21
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/RefBuffer.cs8
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/ReferenceMode.cs10
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs451
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/SegLvlFeatures.cs11
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs71
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs82
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/TileInfo.cs85
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs12
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs11
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/TxType.cs11
-rw-r--r--Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs331
32 files changed, 0 insertions, 1778 deletions
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/BModeInfo.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/BModeInfo.cs
deleted file mode 100644
index 9e1cd8b4..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/BModeInfo.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct BModeInfo
- {
- public PredictionMode Mode;
- public Array2<Mv> Mv; // First, second inter predictor motion vectors
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs
deleted file mode 100644
index 22a48e20..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum BlockSize
- {
- Block4x4 = 0,
- Block4x8 = 1,
- Block8x4 = 2,
- Block8x8 = 3,
- Block8x16 = 4,
- Block16x8 = 5,
- Block16x16 = 6,
- Block16x32 = 7,
- Block32x16 = 8,
- Block32x32 = 9,
- Block32x64 = 10,
- Block64x32 = 11,
- Block64x64 = 12,
- BlockSizes = 13,
- BlockInvalid = BlockSizes
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Buf2D.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Buf2D.cs
deleted file mode 100644
index 180d5e34..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Buf2D.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Buf2D
- {
- public ArrayPtr<byte> Buf;
- public int Stride;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/FrameType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/FrameType.cs
deleted file mode 100644
index a783999e..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/FrameType.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum FrameType
- {
- KeyFrame = 0,
- InterFrame = 1
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilter.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilter.cs
deleted file mode 100644
index 8dc33bda..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilter.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct LoopFilter
- {
- public int FilterLevel;
- public int LastFiltLevel;
-
- public int SharpnessLevel;
- public int LastSharpnessLevel;
-
- public bool ModeRefDeltaEnabled;
- public bool ModeRefDeltaUpdate;
-
- // 0 = Intra, Last, GF, ARF
- public Array4<sbyte> RefDeltas;
- public Array4<sbyte> LastRefDeltas;
-
- // 0 = ZERO_MV, MV
- public Array2<sbyte> ModeDeltas;
- public Array2<sbyte> LastModeDeltas;
-
- public ArrayPtr<LoopFilterMask> Lfm;
- public int LfmStride;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterInfoN.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterInfoN.cs
deleted file mode 100644
index 0ac38a7b..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterInfoN.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct LoopFilterInfoN
- {
- public Array64<LoopFilterThresh> Lfthr;
- public Array8<Array4<Array2<byte>>> Lvl;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs
deleted file mode 100644
index 4aff843a..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- // This structure holds bit masks for all 8x8 blocks in a 64x64 region.
- // Each 1 bit represents a position in which we want to apply the loop filter.
- // Left_ entries refer to whether we apply a filter on the border to the
- // left of the block. Above_ entries refer to whether or not to apply a
- // filter on the above border. Int_ entries refer to whether or not to
- // apply borders on the 4x4 edges within the 8x8 block that each bit
- // represents.
- // Since each transform is accompanied by a potentially different type of
- // loop filter there is a different entry in the array for each transform size.
- internal struct LoopFilterMask
- {
- public Array4<ulong> LeftY;
- public Array4<ulong> AboveY;
- public ulong Int4x4Y;
- public Array4<ushort> LeftUv;
- public Array4<ushort> AboveUv;
- public ushort Int4x4Uv;
- public Array64<byte> LflY;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterThresh.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterThresh.cs
deleted file mode 100644
index edd79af4..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterThresh.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- // Need to align this structure so when it is declared and
- // passed it can be loaded into vector registers.
- internal struct LoopFilterThresh
- {
-#pragma warning disable CS0649
- public Array16<byte> Mblim;
- public Array16<byte> Lim;
- public Array16<byte> HevThr;
-#pragma warning restore CS0649
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockD.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockD.cs
deleted file mode 100644
index f1111528..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockD.cs
+++ /dev/null
@@ -1,179 +0,0 @@
-using Ryujinx.Common.Memory;
-using Ryujinx.Graphics.Video;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct MacroBlockD
- {
- public Array3<MacroBlockDPlane> Plane;
- public byte BmodeBlocksWl;
- public byte BmodeBlocksHl;
-
- public Ptr<Vp9BackwardUpdates> Counts;
- public TileInfo Tile;
-
- public int MiStride;
-
- // Grid of 8x8 cells is placed over the block.
- // If some of them belong to the same mbtree-block
- // they will just have same mi[i][j] value
- public ArrayPtr<Ptr<ModeInfo>> Mi;
- public Ptr<ModeInfo> LeftMi;
- public Ptr<ModeInfo> AboveMi;
-
- public uint MaxBlocksWide;
- public uint MaxBlocksHigh;
-
- public ArrayPtr<Array3<byte>> PartitionProbs;
-
- /* Distance of MB away from frame edges */
- public int MbToLeftEdge;
- public int MbToRightEdge;
- public int MbToTopEdge;
- public int MbToBottomEdge;
-
- public Ptr<Vp9EntropyProbs> Fc;
-
- /* pointers to reference frames */
- public Array2<Ptr<RefBuffer>> BlockRefs;
-
- /* pointer to current frame */
- public Surface CurBuf;
-
- public Array3<ArrayPtr<sbyte>> AboveContext;
- public Array3<Array16<sbyte>> LeftContext;
-
- public ArrayPtr<sbyte> AboveSegContext;
- public Array8<sbyte> LeftSegContext;
-
- /* Bit depth: 8, 10, 12 */
- public int Bd;
-
- public bool Lossless;
- public bool Corrupted;
-
- public Ptr<InternalErrorInfo> ErrorInfo;
-
- public int GetPredContextSegId()
- {
- sbyte aboveSip = !AboveMi.IsNull ? AboveMi.Value.SegIdPredicted : (sbyte)0;
- sbyte leftSip = !LeftMi.IsNull ? LeftMi.Value.SegIdPredicted : (sbyte)0;
-
- return aboveSip + leftSip;
- }
-
- public int GetSkipContext()
- {
- int aboveSkip = !AboveMi.IsNull ? AboveMi.Value.Skip : 0;
- int leftSkip = !LeftMi.IsNull ? LeftMi.Value.Skip : 0;
- return aboveSkip + leftSkip;
- }
-
- public int GetPredContextSwitchableInterp()
- {
- // Note:
- // The mode info data structure has a one element border above and to the
- // left of the entries corresponding to real macroblocks.
- // The prediction flags in these dummy entries are initialized to 0.
- int leftType = !LeftMi.IsNull ? LeftMi.Value.InterpFilter : Constants.SwitchableFilters;
- int aboveType = !AboveMi.IsNull ? AboveMi.Value.InterpFilter : Constants.SwitchableFilters;
-
- if (leftType == aboveType)
- {
- return leftType;
- }
- else if (leftType == Constants.SwitchableFilters)
- {
- return aboveType;
- }
- else if (aboveType == Constants.SwitchableFilters)
- {
- return leftType;
- }
- else
- {
- return Constants.SwitchableFilters;
- }
- }
-
- // The mode info data structure has a one element border above and to the
- // left of the entries corresponding to real macroblocks.
- // The prediction flags in these dummy entries are initialized to 0.
- // 0 - inter/inter, inter/--, --/inter, --/--
- // 1 - intra/inter, inter/intra
- // 2 - intra/--, --/intra
- // 3 - intra/intra
- public int GetIntraInterContext()
- {
- if (!AboveMi.IsNull && !LeftMi.IsNull)
- { // Both edges available
- bool aboveIntra = !AboveMi.Value.IsInterBlock();
- bool leftIntra = !LeftMi.Value.IsInterBlock();
- return leftIntra && aboveIntra ? 3 : (leftIntra || aboveIntra ? 1 : 0);
- }
- else if (!AboveMi.IsNull || !LeftMi.IsNull)
- { // One edge available
- return 2 * (!(!AboveMi.IsNull ? AboveMi.Value : LeftMi.Value).IsInterBlock() ? 1 : 0);
- }
- return 0;
- }
-
- // Returns a context number for the given MB prediction signal
- // The mode info data structure has a one element border above and to the
- // left of the entries corresponding to real blocks.
- // The prediction flags in these dummy entries are initialized to 0.
- public int GetTxSizeContext()
- {
- int maxTxSize = (int)Luts.MaxTxSizeLookup[(int)Mi[0].Value.SbType];
- int aboveCtx = (!AboveMi.IsNull && AboveMi.Value.Skip == 0) ? (int)AboveMi.Value.TxSize : maxTxSize;
- int leftCtx = (!LeftMi.IsNull && LeftMi.Value.Skip == 0) ? (int)LeftMi.Value.TxSize : maxTxSize;
- if (LeftMi.IsNull)
- {
- leftCtx = aboveCtx;
- }
-
- if (AboveMi.IsNull)
- {
- aboveCtx = leftCtx;
- }
-
- return (aboveCtx + leftCtx) > maxTxSize ? 1 : 0;
- }
-
- public void SetupBlockPlanes(int ssX, int ssY)
- {
- int i;
-
- for (i = 0; i < Constants.MaxMbPlane; i++)
- {
- Plane[i].SubsamplingX = i != 0 ? ssX : 0;
- Plane[i].SubsamplingY = i != 0 ? ssY : 0;
- }
- }
-
- public void SetSkipContext(int miRow, int miCol)
- {
- int aboveIdx = miCol * 2;
- int leftIdx = (miRow * 2) & 15;
- int i;
- for (i = 0; i < Constants.MaxMbPlane; ++i)
- {
- ref MacroBlockDPlane pd = ref Plane[i];
- pd.AboveContext = AboveContext[i].Slice(aboveIdx >> pd.SubsamplingX);
- pd.LeftContext = new ArrayPtr<sbyte>(ref LeftContext[i][leftIdx >> pd.SubsamplingY], 16 - (leftIdx >> pd.SubsamplingY));
- }
- }
-
- internal void SetMiRowCol(ref TileInfo tile, int miRow, int bh, int miCol, int bw, int miRows, int miCols)
- {
- MbToTopEdge = -((miRow * Constants.MiSize) * 8);
- MbToBottomEdge = ((miRows - bh - miRow) * Constants.MiSize) * 8;
- MbToLeftEdge = -((miCol * Constants.MiSize) * 8);
- MbToRightEdge = ((miCols - bw - miCol) * Constants.MiSize) * 8;
-
- // Are edges available for intra prediction?
- AboveMi = (miRow != 0) ? Mi[-MiStride] : Ptr<ModeInfo>.Null;
- LeftMi = (miCol > tile.MiColStart) ? Mi[-1] : Ptr<ModeInfo>.Null;
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockDPlane.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockDPlane.cs
deleted file mode 100644
index ae4ec6f4..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MacroBlockDPlane.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct MacroBlockDPlane
- {
- public ArrayPtr<int> DqCoeff;
- public int SubsamplingX;
- public int SubsamplingY;
- public Buf2D Dst;
- public Array2<Buf2D> Pre;
- public ArrayPtr<sbyte> AboveContext;
- public ArrayPtr<sbyte> LeftContext;
- public Array8<Array2<short>> SegDequant;
-
- // Number of 4x4s in current block
- public ushort N4W, N4H;
- // Log2 of N4W, N4H
- public byte N4Wl, N4Hl;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs
deleted file mode 100644
index 8ef281d8..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using Ryujinx.Common.Memory;
-using System.Diagnostics;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct ModeInfo
- {
- // Common for both Inter and Intra blocks
- public BlockSize SbType;
- public PredictionMode Mode;
- public TxSize TxSize;
- public sbyte Skip;
- public sbyte SegmentId;
- public sbyte SegIdPredicted; // Valid only when TemporalUpdate is enabled
-
- // Only for Intra blocks
- public PredictionMode UvMode;
-
- // Only for Inter blocks
- public byte InterpFilter;
-
- // if ref_frame[idx] is equal to AltRefFrame then
- // MacroBlockD.BlockRef[idx] is an altref
- public Array2<sbyte> RefFrame;
-
- public Array2<Mv> Mv;
-
- public Array4<BModeInfo> Bmi;
-
- public PredictionMode GetYMode(int block)
- {
- return SbType < BlockSize.Block8x8 ? Bmi[block].Mode : Mode;
- }
-
- public TxSize GetUvTxSize(ref MacroBlockDPlane pd)
- {
- Debug.Assert(SbType < BlockSize.Block8x8 ||
- Luts.SsSizeLookup[(int)SbType][pd.SubsamplingX][pd.SubsamplingY] != BlockSize.BlockInvalid);
- return Luts.UvTxsizeLookup[(int)SbType][(int)TxSize][pd.SubsamplingX][pd.SubsamplingY];
- }
-
- public bool IsInterBlock()
- {
- return RefFrame[0] > Constants.IntraFrame;
- }
-
- public bool HasSecondRef()
- {
- return RefFrame[1] > Constants.IntraFrame;
- }
-
- private static readonly int[][] IdxNColumnToSubblock = new int[][]
- {
- new int[] { 1, 2 }, new int[] { 1, 3 }, new int[] { 3, 2 }, new int[] { 3, 3 }
- };
-
- // This function returns either the appropriate sub block or block's mv
- // on whether the block_size < 8x8 and we have check_sub_blocks set.
- public Mv GetSubBlockMv(int whichMv, int searchCol, int blockIdx)
- {
- return blockIdx >= 0 && SbType < BlockSize.Block8x8
- ? Bmi[IdxNColumnToSubblock[blockIdx][searchCol == 0 ? 1 : 0]].Mv[whichMv]
- : Mv[whichMv];
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MotionVectorContext.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MotionVectorContext.cs
deleted file mode 100644
index 319c8dba..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MotionVectorContext.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum MotionVectorContext
- {
- BothZero = 0,
- ZeroPlusPredicted = 1,
- BothPredicted = 2,
- NewPlusNonIntra = 3,
- BothNew = 4,
- IntraPlusNonIntra = 5,
- BothIntra = 6,
- InvalidCase = 9
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs
deleted file mode 100644
index 815bbb32..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs
+++ /dev/null
@@ -1,189 +0,0 @@
-using Ryujinx.Common.Memory;
-using Ryujinx.Graphics.Video;
-using System;
-using System.Diagnostics;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Mv
- {
- public short Row;
- public short Col;
-
- private static ReadOnlySpan<byte> LogInBase2 => new byte[]
- {
- 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10
- };
-
- public bool UseMvHp()
- {
- const int kMvRefThresh = 64; // Threshold for use of high-precision 1/8 mv
- return Math.Abs(Row) < kMvRefThresh && Math.Abs(Col) < kMvRefThresh;
- }
-
- public static bool MvJointVertical(MvJointType type)
- {
- return type == MvJointType.MvJointHzvnz || type == MvJointType.MvJointHnzvnz;
- }
-
- public static bool MvJointHorizontal(MvJointType type)
- {
- return type == MvJointType.MvJointHnzvz || type == MvJointType.MvJointHnzvnz;
- }
-
- private static int MvClassBase(MvClassType c)
- {
- return c != 0 ? Constants.Class0Size << ((int)c + 2) : 0;
- }
-
- private static MvClassType GetMvClass(int z, Ptr<int> offset)
- {
- MvClassType c = (z >= Constants.Class0Size * 4096) ? MvClassType.MvClass10 : (MvClassType)LogInBase2[z >> 3];
- if (!offset.IsNull)
- {
- offset.Value = z - MvClassBase(c);
- }
-
- return c;
- }
-
- private static void IncMvComponent(int v, ref Vp9BackwardUpdates counts, int comp, int incr, int usehp)
- {
- int s, z, c, o = 0, d, e, f;
- Debug.Assert(v != 0); /* Should not be zero */
- s = v < 0 ? 1 : 0;
- counts.Sign[comp][s] += (uint)incr;
- z = (s != 0 ? -v : v) - 1; /* Magnitude - 1 */
-
- c = (int)GetMvClass(z, new Ptr<int>(ref o));
- counts.Classes[comp][c] += (uint)incr;
-
- d = (o >> 3); /* Int mv data */
- f = (o >> 1) & 3; /* Fractional pel mv data */
- e = (o & 1); /* High precision mv data */
-
- if (c == (int)MvClassType.MvClass0)
- {
- counts.Class0[comp][d] += (uint)incr;
- counts.Class0Fp[comp][d][f] += (uint)incr;
- counts.Class0Hp[comp][e] += (uint)(usehp * incr);
- }
- else
- {
- int i;
- int b = c + Constants.Class0Bits - 1; // Number of bits
- for (i = 0; i < b; ++i)
- {
- counts.Bits[comp][i][((d >> i) & 1)] += (uint)incr;
- }
-
- counts.Fp[comp][f] += (uint)incr;
- counts.Hp[comp][e] += (uint)(usehp * incr);
- }
- }
-
- private MvJointType GetMvJoint()
- {
- if (Row == 0)
- {
- return Col == 0 ? MvJointType.MvJointZero : MvJointType.MvJointHnzvz;
- }
- else
- {
- return Col == 0 ? MvJointType.MvJointHzvnz : MvJointType.MvJointHnzvnz;
- }
- }
-
- internal void IncMv(Ptr<Vp9BackwardUpdates> counts)
- {
- if (!counts.IsNull)
- {
- MvJointType j = GetMvJoint();
- ++counts.Value.Joints[(int)j];
-
- if (MvJointVertical(j))
- {
- IncMvComponent(Row, ref counts.Value, 0, 1, 1);
- }
-
- if (MvJointHorizontal(j))
- {
- IncMvComponent(Col, ref counts.Value, 1, 1, 1);
- }
- }
- }
-
- public void ClampMv(int minCol, int maxCol, int minRow, int maxRow)
- {
- Col = (short)Math.Clamp(Col, minCol, maxCol);
- Row = (short)Math.Clamp(Row, minRow, maxRow);
- }
-
- private const int MvBorder = (16 << 3); // Allow 16 pels in 1/8th pel units
-
- public void ClampMvRef(ref MacroBlockD xd)
- {
- ClampMv(
- xd.MbToLeftEdge - MvBorder,
- xd.MbToRightEdge + MvBorder,
- xd.MbToTopEdge - MvBorder,
- xd.MbToBottomEdge + MvBorder);
- }
-
- public void LowerMvPrecision(bool allowHP)
- {
- bool useHP = allowHP && UseMvHp();
- if (!useHP)
- {
- if ((Row & 1) != 0)
- {
- Row += (short)(Row > 0 ? -1 : 1);
- }
-
- if ((Col & 1) != 0)
- {
- Col += (short)(Col > 0 ? -1 : 1);
- }
- }
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv32.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv32.cs
deleted file mode 100644
index fb25d18e..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv32.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Mv32
- {
- public int Row;
- public int Col;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvClassType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MvClassType.cs
deleted file mode 100644
index 68a0b59a..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvClassType.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum MvClassType
- {
- MvClass0 = 0, /* (0, 2] integer pel */
- MvClass1 = 1, /* (2, 4] integer pel */
- MvClass2 = 2, /* (4, 8] integer pel */
- MvClass3 = 3, /* (8, 16] integer pel */
- MvClass4 = 4, /* (16, 32] integer pel */
- MvClass5 = 5, /* (32, 64] integer pel */
- MvClass6 = 6, /* (64, 128] integer pel */
- MvClass7 = 7, /* (128, 256] integer pel */
- MvClass8 = 8, /* (256, 512] integer pel */
- MvClass9 = 9, /* (512, 1024] integer pel */
- MvClass10 = 10, /* (1024,2048] integer pel */
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvJointType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MvJointType.cs
deleted file mode 100644
index a20cb6d0..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvJointType.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum MvJointType
- {
- MvJointZero = 0, /* Zero vector */
- MvJointHnzvz = 1, /* Vert zero, hor nonzero */
- MvJointHzvnz = 2, /* Hor zero, vert nonzero */
- MvJointHnzvnz = 3, /* Both components nonzero */
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvRef.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/MvRef.cs
deleted file mode 100644
index 71949a09..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/MvRef.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Ryujinx.Common.Memory;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct MvRef
- {
- public Array2<Mv> Mv;
- public Array2<sbyte> RefFrame;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/PartitionType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/PartitionType.cs
deleted file mode 100644
index 096f9818..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/PartitionType.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum PartitionType
- {
- PartitionNone,
- PartitionHorz,
- PartitionVert,
- PartitionSplit,
- PartitionTypes,
- PartitionInvalid = PartitionTypes
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/PlaneType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/PlaneType.cs
deleted file mode 100644
index 790aa2a0..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/PlaneType.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum PlaneType
- {
- Y = 0,
- Uv = 1,
- PlaneTypes
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Position.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Position.cs
deleted file mode 100644
index 0d3b56f6..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Position.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Position
- {
- public int Row;
- public int Col;
-
- public Position(int row, int col)
- {
- Row = row;
- Col = col;
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/PredictionMode.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/PredictionMode.cs
deleted file mode 100644
index bbb9be9a..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/PredictionMode.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum PredictionMode
- {
- DcPred = 0, // Average of above and left pixels
- VPred = 1, // Vertical
- HPred = 2, // Horizontal
- D45Pred = 3, // Directional 45 deg = round(arctan(1 / 1) * 180 / pi)
- D135Pred = 4, // Directional 135 deg = 180 - 45
- D117Pred = 5, // Directional 117 deg = 180 - 63
- D153Pred = 6, // Directional 153 deg = 180 - 27
- D207Pred = 7, // Directional 207 deg = 180 + 27
- D63Pred = 8, // Directional 63 deg = round(arctan(2 / 1) * 180 / pi)
- TmPred = 9, // True-motion
- NearestMv = 10,
- NearMv = 11,
- ZeroMv = 12,
- NewMv = 13,
- MbModeCount = 14
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/RefBuffer.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/RefBuffer.cs
deleted file mode 100644
index 9942dd05..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/RefBuffer.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct RefBuffer
- {
- public Surface Buf;
- public ScaleFactors Sf;
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/ReferenceMode.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/ReferenceMode.cs
deleted file mode 100644
index 7cbf9f4e..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/ReferenceMode.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum ReferenceMode
- {
- SingleReference = 0,
- CompoundReference = 1,
- ReferenceModeSelect = 2,
- ReferenceModes = 3
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs
deleted file mode 100644
index 970f9680..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs
+++ /dev/null
@@ -1,451 +0,0 @@
-using Ryujinx.Common.Memory;
-using System.Runtime.CompilerServices;
-using static Ryujinx.Graphics.Nvdec.Vp9.Dsp.Convolve;
-using static Ryujinx.Graphics.Nvdec.Vp9.Dsp.Filter;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct ScaleFactors
- {
- private const int RefScaleShift = 14;
- private const int RefNoScale = (1 << RefScaleShift);
- private const int RefInvalidScale = -1;
-
- private unsafe delegate void ConvolveFn(
- byte* src,
- int srcStride,
- byte* dst,
- int dstStride,
- Array8<short>[] filter,
- int x0Q4,
- int xStepQ4,
- int y0Q4,
- int yStepQ4,
- int w,
- int h);
-
- private unsafe delegate void HighbdConvolveFn(
- ushort* src,
- int srcStride,
- ushort* dst,
- int dstStride,
- Array8<short>[] filter,
- int x0Q4,
- int xStepQ4,
- int y0Q4,
- int yStepQ4,
- int w,
- int h,
- int bd);
-
- private static readonly unsafe ConvolveFn[][][] PredictX16Y16 = new ConvolveFn[][][]
- {
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- ConvolveCopy,
- ConvolveAvg
- },
- new ConvolveFn[]
- {
- Convolve8Vert,
- Convolve8AvgVert
- }
- },
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- Convolve8Horiz,
- Convolve8AvgHoriz
- },
- new ConvolveFn[]
- {
- Convolve8,
- Convolve8Avg
- }
- }
- };
-
- private static readonly unsafe ConvolveFn[][][] PredictX16 = new ConvolveFn[][][]
- {
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- ScaledVert,
- ScaledAvgVert
- },
- new ConvolveFn[]
- {
- ScaledVert,
- ScaledAvgVert
- }
- },
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- },
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- }
- }
- };
-
- private static readonly unsafe ConvolveFn[][][] PredictY16 = new ConvolveFn[][][]
- {
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- ScaledHoriz,
- ScaledAvgHoriz
- },
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- }
- },
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- ScaledHoriz,
- ScaledAvgHoriz
- },
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- }
- }
- };
-
- private static readonly unsafe ConvolveFn[][][] Predict = new ConvolveFn[][][]
- {
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- },
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- }
- },
- new ConvolveFn[][]
- {
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- },
- new ConvolveFn[]
- {
- Scaled2D,
- ScaledAvg2D
- }
- }
- };
-
- private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictX16Y16 = new HighbdConvolveFn[][][]
- {
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolveCopy,
- HighbdConvolveAvg
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Vert,
- HighbdConvolve8AvgVert
- }
- },
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Horiz,
- HighbdConvolve8AvgHoriz
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- }
- };
-
- private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictX16 = new HighbdConvolveFn[][][]
- {
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Vert,
- HighbdConvolve8AvgVert
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Vert,
- HighbdConvolve8AvgVert
- }
- },
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- }
- };
-
- private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictY16 = new HighbdConvolveFn[][][]
- {
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Horiz,
- HighbdConvolve8AvgHoriz
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- },
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8Horiz,
- HighbdConvolve8AvgHoriz
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- }
- };
-
- private static readonly unsafe HighbdConvolveFn[][][] HighbdPredict = new HighbdConvolveFn[][][]
- {
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- },
- new HighbdConvolveFn[][]
- {
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- },
- new HighbdConvolveFn[]
- {
- HighbdConvolve8,
- HighbdConvolve8Avg
- }
- }
- };
-
- public int XScaleFP; // Horizontal fixed point scale factor
- public int YScaleFP; // Vertical fixed point scale factor
- public int XStepQ4;
- public int YStepQ4;
-
- public int ScaleValueX(int val)
- {
- return IsScaled() ? ScaledX(val) : val;
- }
-
- public int ScaleValueY(int val)
- {
- return IsScaled() ? ScaledY(val) : val;
- }
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe void InterPredict(
- int horiz,
- int vert,
- int avg,
- byte* src,
- int srcStride,
- byte* dst,
- int dstStride,
- int subpelX,
- int subpelY,
- int w,
- int h,
- Array8<short>[] kernel,
- int xs,
- int ys)
- {
- if (XStepQ4 == 16)
- {
- if (YStepQ4 == 16)
- {
- // No scaling in either direction.
- PredictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h);
- }
- else
- {
- // No scaling in x direction. Must always scale in the y direction.
- PredictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h);
- }
- }
- else
- {
- if (YStepQ4 == 16)
- {
- // No scaling in the y direction. Must always scale in the x direction.
- PredictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h);
- }
- else
- {
- // Must always scale in both directions.
- Predict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h);
- }
- }
- }
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe void HighbdInterPredict(
- int horiz,
- int vert,
- int avg,
- ushort* src,
- int srcStride,
- ushort* dst,
- int dstStride,
- int subpelX,
- int subpelY,
- int w,
- int h,
- Array8<short>[] kernel,
- int xs,
- int ys,
- int bd)
- {
- if (XStepQ4 == 16)
- {
- if (YStepQ4 == 16)
- {
- // No scaling in either direction.
- HighbdPredictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd);
- }
- else
- {
- // No scaling in x direction. Must always scale in the y direction.
- HighbdPredictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd);
- }
- }
- else
- {
- if (YStepQ4 == 16)
- {
- // No scaling in the y direction. Must always scale in the x direction.
- HighbdPredictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd);
- }
- else
- {
- // Must always scale in both directions.
- HighbdPredict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd);
- }
- }
- }
-
- private int ScaledX(int val)
- {
- return (int)((long)val * XScaleFP >> RefScaleShift);
- }
-
- private int ScaledY(int val)
- {
- return (int)((long)val * YScaleFP >> RefScaleShift);
- }
-
- private static int GetFixedPointScaleFactor(int otherSize, int thisSize)
- {
- // Calculate scaling factor once for each reference frame
- // and use fixed point scaling factors in decoding and encoding routines.
- // Hardware implementations can calculate scale factor in device driver
- // and use multiplication and shifting on hardware instead of division.
- return (otherSize << RefScaleShift) / thisSize;
- }
-
- public Mv32 ScaleMv(ref Mv mv, int x, int y)
- {
- int xOffQ4 = ScaledX(x << SubpelBits) & SubpelMask;
- int yOffQ4 = ScaledY(y << SubpelBits) & SubpelMask;
- Mv32 res = new Mv32()
- {
- Row = ScaledY(mv.Row) + yOffQ4,
- Col = ScaledX(mv.Col) + xOffQ4
- };
- return res;
- }
-
- public bool IsValidScale()
- {
- return XScaleFP != RefInvalidScale && YScaleFP != RefInvalidScale;
- }
-
- public bool IsScaled()
- {
- return IsValidScale() && (XScaleFP != RefNoScale || YScaleFP != RefNoScale);
- }
-
- public static bool ValidRefFrameSize(int refWidth, int refHeight, int thisWidth, int thisHeight)
- {
- return 2 * thisWidth >= refWidth &&
- 2 * thisHeight >= refHeight &&
- thisWidth <= 16 * refWidth &&
- thisHeight <= 16 * refHeight;
- }
-
- public void SetupScaleFactorsForFrame(int otherW, int otherH, int thisW, int thisH)
- {
- if (!ValidRefFrameSize(otherW, otherH, thisW, thisH))
- {
- XScaleFP = RefInvalidScale;
- YScaleFP = RefInvalidScale;
- return;
- }
-
- XScaleFP = GetFixedPointScaleFactor(otherW, thisW);
- YScaleFP = GetFixedPointScaleFactor(otherH, thisH);
- XStepQ4 = ScaledX(16);
- YStepQ4 = ScaledY(16);
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/SegLvlFeatures.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/SegLvlFeatures.cs
deleted file mode 100644
index c3ea3fd8..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/SegLvlFeatures.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum SegLvlFeatures
- {
- SegLvlAltQ = 0, // Use alternate Quantizer ....
- SegLvlAltLf = 1, // Use alternate loop filter value...
- SegLvlRefFrame = 2, // Optional Segment reference frame
- SegLvlSkip = 3, // Optional Segment (0,0) + skip mode
- SegLvlMax = 4 // Number of features supported
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs
deleted file mode 100644
index 53d1f2cc..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using Ryujinx.Common.Memory;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Segmentation
- {
- private static readonly int[] SegFeatureDataSigned = new int[] { 1, 1, 0, 0 };
- private static readonly int[] SegFeatureDataMax = new int[] { QuantCommon.MaxQ, Vp9.LoopFilter.MaxLoopFilter, 3, 0 };
-
- public bool Enabled;
- public bool UpdateMap;
- public byte UpdateData;
- public byte AbsDelta;
- public bool TemporalUpdate;
-
- public Array8<Array4<short>> FeatureData;
- public Array8<uint> FeatureMask;
- public int AqAvOffset;
-
- public static byte GetPredProbSegId(ref Array3<byte> segPredProbs, ref MacroBlockD xd)
- {
- return segPredProbs[xd.GetPredContextSegId()];
- }
-
- public void ClearAllSegFeatures()
- {
- MemoryMarshal.CreateSpan(ref FeatureData[0][0], 8 * 4).Fill(0);
- MemoryMarshal.CreateSpan(ref FeatureMask[0], 8).Fill(0);
- AqAvOffset = 0;
- }
-
- internal void EnableSegFeature(int segmentId, SegLvlFeatures featureId)
- {
- FeatureMask[segmentId] |= 1u << (int)featureId;
- }
-
- internal static int FeatureDataMax(SegLvlFeatures featureId)
- {
- return SegFeatureDataMax[(int)featureId];
- }
-
- internal static int IsSegFeatureSigned(SegLvlFeatures featureId)
- {
- return SegFeatureDataSigned[(int)featureId];
- }
-
- internal void SetSegData(int segmentId, SegLvlFeatures featureId, int segData)
- {
- Debug.Assert(segData <= SegFeatureDataMax[(int)featureId]);
- if (segData < 0)
- {
- Debug.Assert(SegFeatureDataSigned[(int)featureId] != 0);
- Debug.Assert(-segData <= SegFeatureDataMax[(int)featureId]);
- }
-
- FeatureData[segmentId][(int)featureId] = (short)segData;
- }
-
- internal int IsSegFeatureActive(int segmentId, SegLvlFeatures featureId)
- {
- return Enabled && (FeatureMask[segmentId] & (1 << (int)featureId)) != 0 ? 1 : 0;
- }
-
- internal short GetSegData(int segmentId, SegLvlFeatures featureId)
- {
- return FeatureData[segmentId][(int)featureId];
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs
deleted file mode 100644
index d5b51bc2..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using Ryujinx.Common.Memory;
-using Ryujinx.Graphics.Video;
-using System;
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Surface : ISurface
- {
- public ArrayPtr<byte> YBuffer;
- public ArrayPtr<byte> UBuffer;
- public ArrayPtr<byte> VBuffer;
-
- public unsafe Plane YPlane => new Plane((IntPtr)YBuffer.ToPointer(), YBuffer.Length);
- public unsafe Plane UPlane => new Plane((IntPtr)UBuffer.ToPointer(), UBuffer.Length);
- public unsafe Plane VPlane => new Plane((IntPtr)VBuffer.ToPointer(), VBuffer.Length);
-
- public FrameField Field => FrameField.Progressive;
-
- public int Width { get; }
- public int Height { get; }
- public int AlignedWidth { get; }
- public int AlignedHeight { get; }
- public int Stride { get; }
- public int UvWidth { get; }
- public int UvHeight { get; }
- public int UvAlignedWidth { get; }
- public int UvAlignedHeight { get; }
- public int UvStride { get; }
- public bool HighBd => false;
-
- private readonly IntPtr _pointer;
-
- public Surface(int width, int height)
- {
- const int border = 32;
- const int ssX = 1;
- const int ssY = 1;
- const bool highbd = false;
-
- int alignedWidth = (width + 7) & ~7;
- int alignedHeight = (height + 7) & ~7;
- int yStride = ((alignedWidth + 2 * border) + 31) & ~31;
- int yplaneSize = (alignedHeight + 2 * border) * yStride;
- int uvWidth = alignedWidth >> ssX;
- int uvHeight = alignedHeight >> ssY;
- int uvStride = yStride >> ssX;
- int uvBorderW = border >> ssX;
- int uvBorderH = border >> ssY;
- int uvplaneSize = (uvHeight + 2 * uvBorderH) * uvStride;
-
- int frameSize = (highbd ? 2 : 1) * (yplaneSize + 2 * uvplaneSize);
-
- IntPtr pointer = Marshal.AllocHGlobal(frameSize);
- _pointer = pointer;
- Width = width;
- Height = height;
- AlignedWidth = alignedWidth;
- AlignedHeight = alignedHeight;
- Stride = yStride;
- UvWidth = (width + ssX) >> ssX;
- UvHeight = (height + ssY) >> ssY;
- UvAlignedWidth = uvWidth;
- UvAlignedHeight = uvHeight;
- UvStride = uvStride;
-
- ArrayPtr<byte> NewPlane(int start, int size, int border)
- {
- return new ArrayPtr<byte>(pointer + start + border, size - border);
- }
-
- YBuffer = NewPlane(0, yplaneSize, (border * yStride) + border);
- UBuffer = NewPlane(yplaneSize, uvplaneSize, (uvBorderH * uvStride) + uvBorderW);
- VBuffer = NewPlane(yplaneSize + uvplaneSize, uvplaneSize, (uvBorderH * uvStride) + uvBorderW);
- }
-
- public void Dispose()
- {
- Marshal.FreeHGlobal(_pointer);
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/TileInfo.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/TileInfo.cs
deleted file mode 100644
index 67289c47..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/TileInfo.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using Ryujinx.Graphics.Nvdec.Vp9.Common;
-using System;
-using System.Diagnostics;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct TileInfo
- {
- private const int MinTileWidthB64 = 4;
- private const int MaxTileWidthB64 = 64;
-
- public int MiRowStart, MiRowEnd;
- public int MiColStart, MiColEnd;
-
- public static int MiColsAlignedToSb(int nMis)
- {
- return BitUtils.AlignPowerOfTwo(nMis, Constants.MiBlockSizeLog2);
- }
-
- private static int GetTileOffset(int idx, int mis, int log2)
- {
- int sbCols = MiColsAlignedToSb(mis) >> Constants.MiBlockSizeLog2;
- int offset = ((idx * sbCols) >> log2) << Constants.MiBlockSizeLog2;
- return Math.Min(offset, mis);
- }
-
- public void SetRow(ref Vp9Common cm, int row)
- {
- MiRowStart = GetTileOffset(row, cm.MiRows, cm.Log2TileRows);
- MiRowEnd = GetTileOffset(row + 1, cm.MiRows, cm.Log2TileRows);
- }
-
- public void SetCol(ref Vp9Common cm, int col)
- {
- MiColStart = GetTileOffset(col, cm.MiCols, cm.Log2TileCols);
- MiColEnd = GetTileOffset(col + 1, cm.MiCols, cm.Log2TileCols);
- }
-
- public void Init(ref Vp9Common cm, int row, int col)
- {
- SetRow(ref cm, row);
- SetCol(ref cm, col);
- }
-
- // Checks that the given miRow, miCol and search point
- // are inside the borders of the tile.
- public bool IsInside(int miCol, int miRow, int miRows, ref Position miPos)
- {
- return !(miRow + miPos.Row < 0 ||
- miCol + miPos.Col < MiColStart ||
- miRow + miPos.Row >= miRows ||
- miCol + miPos.Col >= MiColEnd);
- }
-
- private static int GetMinLog2TileCols(int sb64Cols)
- {
- int minLog2 = 0;
- while ((MaxTileWidthB64 << minLog2) < sb64Cols)
- {
- ++minLog2;
- }
-
- return minLog2;
- }
-
- private static int GetMaxLog2TileCols(int sb64Cols)
- {
- int maxLog2 = 1;
- while ((sb64Cols >> maxLog2) >= MinTileWidthB64)
- {
- ++maxLog2;
- }
-
- return maxLog2 - 1;
- }
-
- public static void GetTileNBits(int miCols, ref int minLog2TileCols, ref int maxLog2TileCols)
- {
- int sb64Cols = MiColsAlignedToSb(miCols) >> Constants.MiBlockSizeLog2;
- minLog2TileCols = GetMinLog2TileCols(sb64Cols);
- maxLog2TileCols = GetMaxLog2TileCols(sb64Cols);
- Debug.Assert(minLog2TileCols <= maxLog2TileCols);
- }
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs
deleted file mode 100644
index db914525..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- public enum TxMode
- {
- Only4X4 = 0, // Only 4x4 transform used
- Allow8X8 = 1, // Allow block transform size up to 8x8
- Allow16X16 = 2, // Allow block transform size up to 16x16
- Allow32X32 = 3, // Allow block transform size up to 32x32
- TxModeSelect = 4, // Transform specified for each block
- TxModes = 5
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs
deleted file mode 100644
index 994deb2c..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- public enum TxSize
- {
- Tx4x4 = 0, // 4x4 transform
- Tx8x8 = 1, // 8x8 transform
- Tx16x16 = 2, // 16x16 transform
- Tx32x32 = 3, // 32x32 transform
- TxSizes = 4
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxType.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/TxType.cs
deleted file mode 100644
index dbf7251c..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/TxType.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal enum TxType
- {
- DctDct = 0, // DCT in both horizontal and vertical
- AdstDct = 1, // ADST in vertical, DCT in horizontal
- DctAdst = 2, // DCT in vertical, ADST in horizontal
- AdstAdst = 3, // ADST in both directions
- TxTypes = 4
- }
-}
diff --git a/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs b/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs
deleted file mode 100644
index faadd349..00000000
--- a/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs
+++ /dev/null
@@ -1,331 +0,0 @@
-using Ryujinx.Common.Memory;
-using Ryujinx.Graphics.Nvdec.Vp9.Common;
-using Ryujinx.Graphics.Video;
-
-namespace Ryujinx.Graphics.Nvdec.Vp9.Types
-{
- internal struct Vp9Common
- {
- public MacroBlockD Mb;
-
- public ArrayPtr<TileWorkerData> TileWorkerData;
-
- public InternalErrorInfo Error;
-
- public int Width;
- public int Height;
-
- public int SubsamplingX;
- public int SubsamplingY;
-
- public ArrayPtr<MvRef> PrevFrameMvs;
- public ArrayPtr<MvRef> CurFrameMvs;
-
- public Array3<RefBuffer> FrameRefs;
-
- public FrameType FrameType;
-
- // Flag signaling that the frame is encoded using only Intra modes.
- public bool IntraOnly;
-
- public bool AllowHighPrecisionMv;
-
- // MBs, MbRows/Cols is in 16-pixel units; MiRows/Cols is in
- // ModeInfo (8-pixel) units.
- public int MBs;
- public int MbRows, MiRows;
- public int MbCols, MiCols;
- public int MiStride;
-
- /* Profile settings */
- public TxMode TxMode;
-
- public int BaseQindex;
- public int YDcDeltaQ;
- public int UvDcDeltaQ;
- public int UvAcDeltaQ;
- public Array8<Array2<short>> YDequant;
- public Array8<Array2<short>> UvDequant;
-
- /* We allocate a ModeInfo struct for each macroblock, together with
- an extra row on top and column on the left to simplify prediction. */
- public ArrayPtr<ModeInfo> Mip; /* Base of allocated array */
- public ArrayPtr<ModeInfo> Mi; /* Corresponds to upper left visible macroblock */
-
- public ArrayPtr<Ptr<ModeInfo>> MiGridBase;
- public ArrayPtr<Ptr<ModeInfo>> MiGridVisible;
-
- // Whether to use previous frame's motion vectors for prediction.
- public bool UsePrevFrameMvs;
-
- // Persistent mb segment id map used in prediction.
- public int SegMapIdx;
- public int PrevSegMapIdx;
-
- public Array2<ArrayPtr<byte>> SegMapArray;
- public ArrayPtr<byte> LastFrameSegMap;
- public ArrayPtr<byte> CurrentFrameSegMap;
-
- public byte InterpFilter;
-
- public LoopFilterInfoN LfInfo;
-
- public Array4<sbyte> RefFrameSignBias; /* Two state 0, 1 */
-
- public LoopFilter Lf;
- public Segmentation Seg;
-
- // Context probabilities for reference frame prediction
- public sbyte CompFixedRef;
- public Array2<sbyte> CompVarRef;
- public ReferenceMode ReferenceMode;
-
- public Ptr<Vp9EntropyProbs> Fc;
- public Ptr<Vp9BackwardUpdates> Counts;
-
- public int Log2TileCols, Log2TileRows;
-
- public ArrayPtr<sbyte> AboveSegContext;
- public ArrayPtr<sbyte> AboveContext;
-
- public bool FrameIsIntraOnly()
- {
- return FrameType == FrameType.KeyFrame || IntraOnly;
- }
-
- public bool CompoundReferenceAllowed()
- {
- int i;
- for (i = 1; i < Constants.RefsPerFrame; ++i)
- {
- if (RefFrameSignBias[i + 1] != RefFrameSignBias[1])
- {
- return true;
- }
- }
-
- return false;
- }
-
- private static int CalcMiSize(int len)
- {
- // Len is in mi units.
- return len + Constants.MiBlockSize;
- }
-
- public void SetMbMi(int width, int height)
- {
- int alignedWidth = BitUtils.AlignPowerOfTwo(width, Constants.MiSizeLog2);
- int alignedHeight = BitUtils.AlignPowerOfTwo(height, Constants.MiSizeLog2);
-
- MiCols = alignedWidth >> Constants.MiSizeLog2;
- MiRows = alignedHeight >> Constants.MiSizeLog2;
- MiStride = CalcMiSize(MiCols);
-
- MbCols = (MiCols + 1) >> 1;
- MbRows = (MiRows + 1) >> 1;
- MBs = MbRows * MbCols;
- }
-
- public void AllocTileWorkerData(MemoryAllocator allocator, int tileCols, int tileRows, int maxThreads)
- {
- TileWorkerData = allocator.Allocate<TileWorkerData>(tileCols * tileRows + (maxThreads > 1 ? maxThreads : 0));
- }
-
- public void FreeTileWorkerData(MemoryAllocator allocator)
- {
- allocator.Free(TileWorkerData);
- }
-
- private void AllocSegMap(MemoryAllocator allocator, int segMapSize)
- {
- int i;
-
- for (i = 0; i < Constants.NumPingPongBuffers; ++i)
- {
- SegMapArray[i] = allocator.Allocate<byte>(segMapSize);
- }
-
- // Init the index.
- SegMapIdx = 0;
- PrevSegMapIdx = 1;
-
- CurrentFrameSegMap = SegMapArray[SegMapIdx];
- LastFrameSegMap = SegMapArray[PrevSegMapIdx];
- }
-
- private void FreeSegMap(MemoryAllocator allocator)
- {
- int i;
-
- for (i = 0; i < Constants.NumPingPongBuffers; ++i)
- {
- allocator.Free(SegMapArray[i]);
- SegMapArray[i] = ArrayPtr<byte>.Null;
- }
-
- CurrentFrameSegMap = ArrayPtr<byte>.Null;
- LastFrameSegMap = ArrayPtr<byte>.Null;
- }
-
- private void DecAllocMi(MemoryAllocator allocator, int miSize)
- {
- Mip = allocator.Allocate<ModeInfo>(miSize);
- MiGridBase = allocator.Allocate<Ptr<ModeInfo>>(miSize);
- }
-
- private void DecFreeMi(MemoryAllocator allocator)
- {
- allocator.Free(Mip);
- Mip = ArrayPtr<ModeInfo>.Null;
- allocator.Free(MiGridBase);
- MiGridBase = ArrayPtr<Ptr<ModeInfo>>.Null;
- }
-
- public void FreeContextBuffers(MemoryAllocator allocator)
- {
- DecFreeMi(allocator);
- FreeSegMap(allocator);
- allocator.Free(AboveContext);
- AboveContext = ArrayPtr<sbyte>.Null;
- allocator.Free(AboveSegContext);
- AboveSegContext = ArrayPtr<sbyte>.Null;
- allocator.Free(Lf.Lfm);
- Lf.Lfm = ArrayPtr<LoopFilterMask>.Null;
- allocator.Free(CurFrameMvs);
- CurFrameMvs = ArrayPtr<MvRef>.Null;
- if (UsePrevFrameMvs)
- {
- allocator.Free(PrevFrameMvs);
- PrevFrameMvs = ArrayPtr<MvRef>.Null;
- }
- }
-
- private void AllocLoopFilter(MemoryAllocator allocator)
- {
- // Each lfm holds bit masks for all the 8x8 blocks in a 64x64 region. The
- // stride and rows are rounded up / truncated to a multiple of 8.
- Lf.LfmStride = (MiCols + (Constants.MiBlockSize - 1)) >> 3;
- Lf.Lfm = allocator.Allocate<LoopFilterMask>(((MiRows + (Constants.MiBlockSize - 1)) >> 3) * Lf.LfmStride);
- }
-
- public void AllocContextBuffers(MemoryAllocator allocator, int width, int height)
- {
- SetMbMi(width, height);
- int newMiSize = MiStride * CalcMiSize(MiRows);
- if (newMiSize != 0)
- {
- DecAllocMi(allocator, newMiSize);
- }
-
- if (MiRows * MiCols != 0)
- {
- // Create the segmentation map structure and set to 0.
- AllocSegMap(allocator, MiRows * MiCols);
- }
-
- if (MiCols != 0)
- {
- AboveContext = allocator.Allocate<sbyte>(2 * TileInfo.MiColsAlignedToSb(MiCols) * Constants.MaxMbPlane);
- AboveSegContext = allocator.Allocate<sbyte>(TileInfo.MiColsAlignedToSb(MiCols));
- }
-
- AllocLoopFilter(allocator);
-
- CurFrameMvs = allocator.Allocate<MvRef>(MiRows * MiCols);
- // Using the same size as the current frame is fine here,
- // as this is never true when we have a resolution change.
- if (UsePrevFrameMvs)
- {
- PrevFrameMvs = allocator.Allocate<MvRef>(MiRows * MiCols);
- }
- }
-
- private unsafe void DecSetupMi()
- {
- Mi = Mip.Slice(MiStride + 1);
- MiGridVisible = MiGridBase.Slice(MiStride + 1);
- MemoryUtil.Fill(MiGridBase.ToPointer(), Ptr<ModeInfo>.Null, MiStride * (MiRows + 1));
- }
-
- public unsafe void InitContextBuffers()
- {
- DecSetupMi();
- if (!LastFrameSegMap.IsNull)
- {
- MemoryUtil.Fill(LastFrameSegMap.ToPointer(), (byte)0, MiRows * MiCols);
- }
- }
-
- private void SetPartitionProbs(ref MacroBlockD xd)
- {
- xd.PartitionProbs = FrameIsIntraOnly()
- ? new ArrayPtr<Array3<byte>>(ref Fc.Value.KfPartitionProb[0], 16)
- : new ArrayPtr<Array3<byte>>(ref Fc.Value.PartitionProb[0], 16);
- }
-
- internal void InitMacroBlockD(ref MacroBlockD xd, ArrayPtr<int> dqcoeff)
- {
- int i;
-
- for (i = 0; i < Constants.MaxMbPlane; ++i)
- {
- xd.Plane[i].DqCoeff = dqcoeff;
- xd.AboveContext[i] = AboveContext.Slice(i * 2 * TileInfo.MiColsAlignedToSb(MiCols));
-
- if (i == 0)
- {
- MemoryUtil.Copy(ref xd.Plane[i].SegDequant, ref YDequant);
- }
- else
- {
- MemoryUtil.Copy(ref xd.Plane[i].SegDequant, ref UvDequant);
- }
- xd.Fc = new Ptr<Vp9EntropyProbs>(ref Fc.Value);
- }
-
- xd.AboveSegContext = AboveSegContext;
- xd.MiStride = MiStride;
- xd.ErrorInfo = new Ptr<InternalErrorInfo>(ref Error);
-
- SetPartitionProbs(ref xd);
- }
-
- public void SetupSegmentationDequant()
- {
- const BitDepth bitDepth = BitDepth.Bits8; // TODO: Configurable
- // Build y/uv dequant values based on segmentation.
- if (Seg.Enabled)
- {
- int i;
- for (i = 0; i < Constants.MaxSegments; ++i)
- {
- int qIndex = QuantCommon.GetQIndex(ref Seg, i, BaseQindex);
- YDequant[i][0] = QuantCommon.DcQuant(qIndex, YDcDeltaQ, bitDepth);
- YDequant[i][1] = QuantCommon.AcQuant(qIndex, 0, bitDepth);
- UvDequant[i][0] = QuantCommon.DcQuant(qIndex, UvDcDeltaQ, bitDepth);
- UvDequant[i][1] = QuantCommon.AcQuant(qIndex, UvAcDeltaQ, bitDepth);
- }
- }
- else
- {
- int qIndex = BaseQindex;
- // When segmentation is disabled, only the first value is used. The
- // remaining are don't cares.
- YDequant[0][0] = QuantCommon.DcQuant(qIndex, YDcDeltaQ, bitDepth);
- YDequant[0][1] = QuantCommon.AcQuant(qIndex, 0, bitDepth);
- UvDequant[0][0] = QuantCommon.DcQuant(qIndex, UvDcDeltaQ, bitDepth);
- UvDequant[0][1] = QuantCommon.AcQuant(qIndex, UvAcDeltaQ, bitDepth);
- }
- }
-
- public void SetupScaleFactors()
- {
- for (int i = 0; i < Constants.RefsPerFrame; ++i)
- {
- ref RefBuffer refBuf = ref FrameRefs[i];
- refBuf.Sf.SetupScaleFactorsForFrame(refBuf.Buf.Width, refBuf.Buf.Height, Width, Height);
- }
- }
- }
-}