コード例 #1
0
        /// <summary>
        /// Apply floating point IDCT transformation into dest, using a temporary block 'temp' provided by the caller (optimization).
        /// Ported from https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L239
        /// </summary>
        /// <param name="src">Source</param>
        /// <param name="dest">Destination</param>
        /// <param name="temp">Temporary block provided by the caller</param>
        public static void TransformIDCT(ref Block8x8F src, ref Block8x8F dest, ref Block8x8F temp)
        {
            src.TransposeInto(ref temp);

            IDCT8x8(ref temp, ref dest);
            dest.TransposeInto(ref temp);
            IDCT8x8(ref temp, ref dest);

            // TODO: What if we leave the blocks in a scaled-by-x8 state until final color packing?
            dest.MultiplyInPlace(C_0_125);
        }
コード例 #2
0
        /// <summary>
        /// Apply floating point FDCT from src into dest
        /// </summary>
        /// <param name="src">Source</param>
        /// <param name="dest">Destination</param>
        /// <param name="temp">Temporary block provided by the caller for optimization</param>
        /// <param name="offsetSourceByNeg128">If true, a constant -128.0 offset is applied for all values before FDCT </param>
        public static void TransformFDCT(
            ref Block8x8F src,
            ref Block8x8F dest,
            ref Block8x8F temp,
            bool offsetSourceByNeg128 = true)
        {
            src.TransposeInto(ref temp);
            if (offsetSourceByNeg128)
            {
                temp.AddInPlace(-128F);
            }

            FDCT8x8(ref temp, ref dest);

            dest.TransposeInto(ref temp);

            FDCT8x8(ref temp, ref dest);

            dest.MultiplyInPlace(C_0_125);
        }