X-Git-Url: https://git.piment-noir.org/?p=deb_x265.git;a=blobdiff_plain;f=source%2Fcommon%2Fquant.h;h=2801f00f77b0602ccb96c17148c6b35494ba84b1;hp=ac575f7ff7d8a195494ef1d22098ebe8240df8d7;hb=b53f7c52d8280ab63876efd6eb292c21430ac607;hpb=5c9b45285dd64723ad1dac380b98a7b1f3095674 diff --git a/source/common/quant.h b/source/common/quant.h index ac575f7..2801f00 100644 --- a/source/common/quant.h +++ b/source/common/quant.h @@ -58,6 +58,20 @@ struct QpParam } }; +#define MAX_NUM_TR_COEFFS MAX_TR_SIZE * MAX_TR_SIZE /* Maximum number of transform coefficients, for a 32x32 transform */ +#define MAX_NUM_TR_CATEGORIES 16 /* 32, 16, 8, 4 transform categories each for luma and chroma */ + +// NOTE: MUST be 16-byte aligned for asm code +struct NoiseReduction +{ + /* 0 = luma 4x4, 1 = luma 8x8, 2 = luma 16x16, 3 = luma 32x32 + * 4 = chroma 4x4, 5 = chroma 8x8, 6 = chroma 16x16, 7 = chroma 32x32 + * Intra 0..7 - Inter 8..15 */ + uint16_t offsetDenoise[MAX_NUM_TR_CATEGORIES][MAX_NUM_TR_COEFFS]; + uint32_t residualSum[MAX_NUM_TR_CATEGORIES][MAX_NUM_TR_COEFFS]; + uint32_t count[MAX_NUM_TR_CATEGORIES]; +}; + class Quant { protected: @@ -69,8 +83,8 @@ protected: bool m_useRDOQ; int64_t m_psyRdoqScale; - int32_t* m_resiDctCoeff; - int32_t* m_fencDctCoeff; + int16_t* m_resiDctCoeff; + int16_t* m_fencDctCoeff; int16_t* m_fencShortBuf; enum { IEP_RATE = 32768 }; /* FIX15 cost of an equal probable bit */ @@ -90,10 +104,10 @@ public: /* CU setup */ void setQPforQuant(const CUData& ctu); - uint32_t transformNxN(CUData& cu, pixel *fenc, uint32_t fencstride, int16_t* residual, uint32_t stride, coeff_t* coeff, + uint32_t transformNxN(const CUData& cu, const pixel* fenc, uint32_t fencStride, const int16_t* residual, uint32_t resiStride, coeff_t* coeff, uint32_t log2TrSize, TextType ttype, uint32_t absPartIdx, bool useTransformSkip); - void invtransformNxN(bool transQuantBypass, int16_t* residual, uint32_t stride, coeff_t* coeff, + void invtransformNxN(bool transQuantBypass, int16_t* residual, uint32_t resiStride, const coeff_t* coeff, uint32_t log2TrSize, TextType ttype, bool bIntra, bool useTransformSkip, uint32_t numSig); /* static methods shared with entropy.cpp */ @@ -107,7 +121,7 @@ protected: uint32_t signBitHidingHDQ(int16_t* qcoeff, int32_t* deltaU, uint32_t numSig, const TUEntropyCodingParameters &codingParameters); - uint32_t rdoQuant(CUData& cu, int16_t* dstCoeff, uint32_t log2TrSize, TextType ttype, uint32_t absPartIdx, bool usePsy); + uint32_t rdoQuant(const CUData& cu, int16_t* dstCoeff, uint32_t log2TrSize, TextType ttype, uint32_t absPartIdx, bool usePsy); inline uint32_t getRateLast(uint32_t posx, uint32_t posy) const; };