public void ConvertVectorized()
        {
            Block8x8F y  = default;
            Block8x8F cb = default;
            Block8x8F cr = default;

            if (RgbToYCbCrConverterVectorized.IsSupported)
            {
                RgbToYCbCrConverterVectorized.Convert444(this.data.AsSpan(), ref y, ref cb, ref cr);
            }
        }
Пример #2
0
        public void Scale16x2_8x1(int seed)
        {
            if (!Avx2.IsSupported)
            {
                return;
            }

            Span <float> data = new Random(seed).GenerateRandomFloatArray(Vector256 <float> .Count * 4, -1000, 1000);

            // Act:
            Vector256 <float> resultVector = RgbToYCbCrConverterVectorized.Scale16x2_8x1(MemoryMarshal.Cast <float, Vector256 <float> >(data));
            ref float         result       = ref Unsafe.As <Vector256 <float>, float>(ref resultVector);
Пример #3
0
        public void TestVectorizedConverter()
        {
            if (!RgbToYCbCrConverterVectorized.IsSupported)
            {
                this.Output.WriteLine("No AVX and/or FMA present, skipping test!");
                return;
            }

            Rgb24[] data = CreateTestData();

            Block8x8F y  = default;
            Block8x8F cb = default;
            Block8x8F cr = default;

            RgbToYCbCrConverterVectorized.Convert(data.AsSpan(), ref y, ref cb, ref cr);

            Verify(data, ref y, ref cb, ref cr, new ApproximateColorSpaceComparer(0.0001F));
        }
Пример #4
0
        public void TestConverterVectorized420()
        {
            if (!RgbToYCbCrConverterVectorized.IsSupported)
            {
                this.Output.WriteLine("No AVX and/or FMA present, skipping test!");
                return;
            }

            int          dataSize = 16 * 16;
            Span <Rgb24> data     = CreateTestData(dataSize).AsSpan();

            var yBlocks = new Block8x8F[4];
            var cb      = default(Block8x8F);
            var cr      = default(Block8x8F);

            RgbToYCbCrConverterVectorized.Convert420(data, ref yBlocks[0], ref yBlocks[1], ref cb, ref cr, 0);
            RgbToYCbCrConverterVectorized.Convert420(data.Slice(16 * 8), ref yBlocks[2], ref yBlocks[3], ref cb, ref cr, 1);

            Verify420(data, yBlocks, ref cb, ref cr, new ApproximateFloatComparer(1F));
        }