Example #1
0
        private void button9_Click(object sender, EventArgs e)
        {
            var tmp = TestImageGenerator.GetTestPair(size0, size1, 5, 15);

            image     = tmp.Item1.images[0];
            image_res = tmp.Item2;
            fft_image = Complex.CreateComplexArray(image);
            FourierTransform.FFT2(fft_image, FourierTransform.Direction.Forward);
            CreateHilbertFilter();
            Complex.ApplyFilter(fft_image, filter_image);
            FourierTransform.FFT2(fft_image, FourierTransform.Direction.Backward);
            image = Tools.CalculatePhaseImageByHilbert(fft_image);
            unwrapper.UpdateParamsIfNeed(image);
            unwrapper.UnwrapParallel(image, out var scr);
            ImageSource.subtract_min(image);
            ImageSource.subtract_min(image_res);
            var d = ImageSource.diff(image, image_res);

            label1.Text = Math.Round(ImageSource.max(d), 5).ToString();;
            label2.Text = Math.Round(ImageSource.min(d), 5).ToString();;
            label3.Text = Math.Round(ImageSource.std(image, image_res), 5).ToString();;
            label1.Update();
            label2.Update();
            label3.Update();
            plot(d);
        }
Example #2
0
        public void CDRepairDecodeNegativeOffsetErrorsTest()
        {
            var  generator2 = new TestImageGenerator("0 999 9801", seed, 32 * 588 - offset, errors);
            var  decode     = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;

            Assert.IsTrue(decode.FindOffset(encode.AR.GetSyndrome(), encode.CRC, out actualOffset, out hasErrors), "couldn't find offset");
            Assert.IsTrue(hasErrors, "doesn't have errors");
            Assert.AreEqual(-offset, actualOffset, "wrong offset");
            var fix = decode.VerifyParity(encode.AR.GetSyndrome(), encode.CRC, actualOffset);

            Assert.IsTrue(fix.HasErrors, "doesn't have errors");
            Assert.IsTrue(fix.CanRecover, "cannot recover");
            generator2.Write(fix);
            Assert.AreEqual <uint>(encode.CRC, fix.CRC);

            if (AccurateRipVerify.maxNpar > 8)
            {
                fix = decode.VerifyParity(encode.AR.GetSyndrome(8), encode.CRC, actualOffset);
                Assert.IsTrue(fix.HasErrors, "doesn't have errors");
                Assert.IsTrue(fix.CanRecover, "cannot recover");
                generator2.Write(fix);
                Assert.AreEqual <uint>(encode.CRC, fix.CRC);
            }
        }
        public void CRCTestSplit()
        {
            var ar0    = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 723722, 0);
            var splits = new int[] { 1, 13 * 588 - 1, 13 * 588, 13 * 588 + 1, 30 * 588, 68 * 588 - 1, 68 * 588, 68 * 588 + 1 };

            foreach (int split in splits)
            {
                var ar1 = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 723722, 0, 0, split);
                var ar2 = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 723722, 0, split, (int)ar0.FinalSampleCount);
                ar1.Combine(ar2, split, (int)ar0.FinalSampleCount);
                var offsets = new int[] { 0, -1, 1, -2, 2, -3, 3, -4, 4, -11, 11, -256, 256, -588, 588, 1 - 588 * 5, 588 * 5 - 1 };
                foreach (int offs in offsets)
                {
                    for (int track = 0; track < 3; track++)
                    {
                        string message = "split = " + CDImageLayout.TimeToString((uint)split / 588) + "." + (split % 588).ToString() + ", offset = " + offs.ToString() + ", track = " + (track + 1).ToString();
                        Assert.AreEqual <uint>(ar0.CRC(track, offs), ar1.CRC(track, offs), "CRC was not set correctly, " + message);
                        Assert.AreEqual <uint>(ar0.CTDBCRC(track, offs, 5 * 588, 5 * 588), ar1.CTDBCRC(track, offs, 5 * 588, 5 * 588), "CTDBCRC was not set correctly, " + message);
                        //CRC450 is zero here :( too small tracks
                        //Assert.AreEqual<uint>(ar0.CRC450(track, offs), ar1.CRC450(track, offs), "CRC450 was not set correctly, " + message);
                        if ((track != 2 || offs <= 0))                        // && (track != 0 || offs >= 0))
                        {
                            Assert.AreEqual <uint>(ar0.CRC32(track + 1, offs), ar1.CRC32(track + 1, offs), "CRC32 was not set correctly, " + message);
                            Assert.AreEqual <uint>(ar0.CRCWONULL(track + 1, offs), ar1.CRCWONULL(track + 1, offs), "CRCWONULL was not set correctly, " + message);
                        }
                        if (offs == 0)
                        {
                            Assert.AreEqual <uint>(ar0.CRCV2(track), ar1.CRCV2(track), "CRCV2 was not set correctly, " + message);
                        }
                    }
                }
            }
        }
        public void CRCTestOffset()
        {
            var ar0     = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 723722, 0);
            var offsets = new int[] { 1, 2, 3, 4, 11, 256, 588, 588 * 5 - 1 };

            foreach (int offs in offsets)
            {
                var ar1 = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 723722, offs);
                for (int track = 0; track < 3; track++)
                {
                    Assert.AreEqual <uint>(ar0.CRC(track, offs), ar1.CRC(track), "CRC with offset " + offs + " was not set correctly.");
                    Assert.AreEqual <uint>(ar0.CRC(track), ar1.CRC(track, -offs), "CRC with offset " + (-offs) + " was not set correctly.");
                    Assert.AreEqual <uint>(ar0.CRC450(track, offs), ar1.CRC450(track, 0), "CRC450 with offset " + offs + " was not set correctly.");
                    Assert.AreEqual <uint>(ar0.CRC450(track, 0), ar1.CRC450(track, -offs), "CRC450 with offset " + (-offs) + " was not set correctly.");
                    Assert.AreEqual <uint>(ar0.CTDBCRC(track + 1, offs, 588 * 5, 588 * 5), ar1.CTDBCRC(track + 1, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + offs + " was not set correctly.");
                    Assert.AreEqual <uint>(ar1.CTDBCRC(track + 1, -offs, 588 * 5, 588 * 5), ar0.CTDBCRC(track + 1, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + (-offs) + " was not set correctly.");
                    if (track != 2)
                    {
                        Assert.AreEqual <uint>(ar0.CRC32(track + 1, offs), ar1.CRC32(track + 1), "CRC32 with offset " + (offs) + " was not set correctly.");
                        Assert.AreEqual <uint>(ar0.CRCWONULL(track + 1, offs), ar1.CRCWONULL(track + 1), "CRCWONULL with offset " + (offs) + " was not set correctly.");
                    }
                    //if (track != 0)
                    {
                        Assert.AreEqual <uint>(ar0.CRC32(track + 1), ar1.CRC32(track + 1, -offs), "CRC32 with offset " + (-offs) + " was not set correctly.");
                        Assert.AreEqual <uint>(ar0.CRCWONULL(track + 1), ar1.CRCWONULL(track + 1, -offs), "CRCWONULL with offset " + (-offs) + " was not set correctly.");
                    }
                }
                Assert.AreEqual <uint>(ar0.CTDBCRC(0, offs, 588 * 5, 588 * 5), ar1.CTDBCRC(0, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + offs + " was not set correctly.");
                Assert.AreEqual <uint>(ar1.CTDBCRC(0, -offs, 588 * 5, 588 * 5), ar0.CTDBCRC(0, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + (-offs) + " was not set correctly.");
            }
        }
Example #5
0
        public void CDRepairEncodeSpeedTest()
        {
            var generator = new TestImageGenerator("0 75000", seed, 0, 0);
            var encode    = generator.CreateCDRepairEncode(stride);

            Assert.AreEqual <string>(Convert.ToBase64String(Convert.FromBase64String(encodeSyndrome1), 0, AccurateRipVerify.maxNpar * 2 * 4),
                                     Convert.ToBase64String(ParityToSyndrome.Syndrome2Bytes(encode.AR.GetSyndrome(AccurateRipVerify.maxNpar, 4))), "syndrome mismatch");
        }
Example #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            var tmp = TestImageGenerator.GetTestPair2(size0, size1, 5, 15);

            image0    = tmp.Item1;
            image_res = tmp.Item2;
            plot(image_res);
            hpi = new HilbertPhaseImage2(image0, 0, 1);
        }
Example #7
0
 public static void MyClassInitialize(TestContext testContext)
 {
     generator               = new TestImageGenerator("0 9801", seed, 32 * 588, 0);
     encode                  = generator.CreateCDRepairEncode(stride);
     encodeSyndrome          = "DP5e7sS+kHjtAEb/o599As2tA3puoW+wuWA5hT1cZxCBRs0bU7Ow3jyLb97/pW1Yjt6H3pph7zKa+hFsT6Wct1r7IciaQ8QUhvzxCof3sJEnJZERL/LnLGrfbjkmdw6wZ0PJjSD5cmwGKFvLpslT/OYwc5M3fbmmFmVDJWRvQdE=";
     encodeSyndromePosOffset = "x5gK5qlKM0HjrEEWOVHQX5VRqD0FtDWGqO/JP2ArcdR0yxE04pdR6B06J3iXbKv9CghrqvNiq+AlMAVWr/pm7bp5s3s+v5Bo3oYpQymmtd0FDKaZ4GQhi9yDu0Vm22j0Cllf5fLPFixhRMCBN/3S3t8IeHtVfmo5Vw0icN7OTHo=";
     encodeSyndromeNegOffset = "wDLTEG5XPVhGlH8fuucGl8St2G/jGLyN3dByVGzOWeZ0CzI1M9jJq4DLj8A3XsMh8u80yvCq36SHXU+iO5cpVcfyiu08pqO1PjPUynqQa/aOcjbFhwjaEZePD42rQCBVdhViBeBEYzMhCTKroorw/Tt0AFC+NlRCMOsUmzSlsRU=";
     encodeSyndrome1         = "YJNmzBE8sVjyo1l59bs/6I+Kqb4PRwEWY34ZHS/yKY5P+AzgGYtQrDplinhvvDKkjMpKOJm6iYplMDQ6OnR0ZwrzJv39czortUxnzOsjIxmzYtdszjDV6jFf/lA8+3lTS2veoTxIJ1a46z9+5hIbAthejftqYB8h9/PAk5PfWDk=";
     encodeParity[8]         = "jvR9QJ1cSWpqbyP0I0tBrBkQRjCDTDDQkttZGj14ROvsXyg+AnnxVKxL7gwLZbrQmTw5ZPps1Q3744g94qaOOQ==";
     encodeParity[16]        = "gwln1GxlYWH/Jn74PreMLv4aFF2glkScSWVFlxMBx94v5D3/3wPx+2guRLquED0s9tOFikPLiSnAv0Xq8aIQ6Q==";
 }
Example #8
0
        public void CDRepairDecodeNegativeOffsetTest()
        {
            var  generator2 = new TestImageGenerator("0 9801", seed, 32 * 588 - offset, 0);
            var  decode     = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;

            Assert.IsTrue(decode.FindOffset(encode.AR.GetSyndrome(), encode.CRC, out actualOffset, out hasErrors));
            Assert.IsFalse(hasErrors, "has errors");
            Assert.AreEqual(-offset, actualOffset, "wrong offset");
        }
Example #9
0
        public unsafe void CDRepairSplitSpeedTest()
        {
            var seed  = 723722;
            var split = 20 * 588;
            var ar1   = new TestImageGenerator("13 68 99 136", seed, 0, 0, 0, 0, split).CreateCDRepairEncode(stride);
            var ar2   = new TestImageGenerator("13 68 99 136", seed, 0, 0, 0, split, (int)ar1.FinalSampleCount).CreateCDRepairEncode(stride);

            for (int i = 0; i < 20; i++)
            {
                ar1.AR.Combine(ar2.AR, split, (int)ar1.FinalSampleCount);
            }
        }
Example #10
0
        public void CDRepairSplitTest()
        {
            var seed   = 723722;
            var ar0    = new TestImageGenerator("13 68 99 136", seed, 0, 0).CreateCDRepairEncode(stride);
            var splits = new int[] { 1, 13 * 588 - 1, 13 * 588, 13 * 588 + 1, 30 * 588 - 1, 30 * 588, 30 * 588 + 1, 68 * 588 - 1, 68 * 588, 68 * 588 + 1 };

            foreach (int split in splits)
            {
                var ar1 = new TestImageGenerator("13 68 99 136", seed, 0, 0, 0, 0, split).CreateCDRepairEncode(stride);
                var ar2 = new TestImageGenerator("13 68 99 136", seed, 0, 0, 0, split, (int)ar0.FinalSampleCount).CreateCDRepairEncode(stride);
                ar1.AR.Combine(ar2.AR, split, (int)ar0.FinalSampleCount);
                string message = "split = " + CDImageLayout.TimeToString((uint)split / 588) + "." + (split % 588).ToString();
                Assert.AreEqual(ar0.CRC, ar1.CRC, "CRC was not set correctly, " + message);
                CollectionAssert.AreEqual(ar0.AR.GetSyndrome(), ar1.AR.GetSyndrome(), "Parity was not set correctly, " + message);
            }
        }
Example #11
0
        public void CDRepairDecodeModifiedWithPregapTest()
        {
            var  generator2 = new TestImageGenerator("32 9833", seed, offset, errors);
            var  decode     = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;

            Assert.IsTrue(decode.FindOffset(encode.AR.GetSyndrome(), encode.CRC, out actualOffset, out hasErrors));
            Assert.IsTrue(hasErrors, "doesn't have errors");
            Assert.AreEqual(offset, actualOffset, "wrong offset");
            CDRepairFix fix = decode.VerifyParity(encode.AR.GetSyndrome(), encode.CRC, actualOffset);

            Assert.IsTrue(fix.HasErrors, "doesn't have errors");
            Assert.IsTrue(fix.CanRecover, "cannot recover");
            generator2.Write(fix);
            Assert.AreEqual <uint>(encode.CRC, fix.CRC);
        }
Example #12
0
        public void CDRepairVerifyParityLongTest()
        {
            var  generator1 = new TestImageGenerator("0 655000", seed);
            var  encode1    = generator1.CreateCDRepairEncode(stride);
            var  generator2 = new TestImageGenerator("0 655000", seed, 0, stride / 2 * 3, 7);
            var  decode     = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;
            var  syndrome = encode1.AR.GetSyndrome();

            Assert.IsTrue(decode.FindOffset(syndrome, encode1.CRC, out actualOffset, out hasErrors));
            Assert.IsTrue(hasErrors, "doesn't have errors");
            Assert.AreEqual(0, actualOffset, "wrong offset");
            CDRepairFix fix = decode.VerifyParity(syndrome, encode1.CRC, actualOffset);

            Assert.IsTrue(fix.HasErrors, "doesn't have errors");
            Assert.IsTrue(fix.CanRecover, "cannot recover");
        }
Example #13
0
        public void CDRepairDecodePositiveOffsetErrorsTest()
        {
            var  generator2 = new TestImageGenerator("0 9801", seed, 32 * 588 + offset, errors);
            var  decode     = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;
            var  syn = encode.AR.GetSyndrome();

            Assert.IsTrue(decode.FindOffset(syn, encode.CRC, out actualOffset, out hasErrors));
            Assert.IsTrue(hasErrors, "doesn't have errors");
            Assert.AreEqual(offset, actualOffset, "wrong offset");
            CDRepairFix fix = decode.VerifyParity(syn, encode.CRC, actualOffset);

            Assert.IsTrue(fix.HasErrors, "doesn't have errors");
            Assert.IsTrue(fix.CanRecover, "cannot recover");
            generator2.Write(fix);
            Assert.AreEqual <uint>(encode.CRC, fix.CRC);
        }
Example #14
0
        public void CDRepairVerifyParitySpeedTest()
        {
            var generator1 = new TestImageGenerator("0 98011", seed, 32 * 588);
            var encode1    = generator1.CreateCDRepairEncode(stride);
            var generator2 = new TestImageGenerator("0 98011", seed, 32 * 588, stride / 2 * 3, 7);
            //var generator2 = new TestImageGenerator("0 98011", seed, 32 * 588, stride, 7);
            var  decode = generator2.CreateCDRepairEncode(stride);
            int  actualOffset;
            bool hasErrors;
            var  syndrome = encode1.AR.GetSyndrome();

            Assert.IsTrue(decode.FindOffset(syndrome, encode1.CRC, out actualOffset, out hasErrors));
            Assert.IsTrue(hasErrors, "doesn't have errors");
            Assert.AreEqual(0, actualOffset, "wrong offset");
            for (int t = 0; t < 100; t++)
            {
                decode.VerifyParity(syndrome, encode1.CRC, actualOffset);
            }
            CDRepairFix fix = decode.VerifyParity(syndrome, encode1.CRC, actualOffset);

            Assert.IsTrue(fix.HasErrors, "doesn't have errors");
            Assert.IsTrue(fix.CanRecover, "cannot recover");
            //generator2.Write(fix);
            //Assert.AreEqual<uint>(encode1.CRC, fix.CRC);


            //var encodeTable = Galois16.instance.makeEncodeTable(16);
            //using (StreamWriter sr = new StreamWriter(@"D:\Work\cuetoolsnet\CUETools\x64\Release\ddd"))
            //{
            //    for (int i = 0; i < encodeTable.GetLength(0) * encodeTable.GetLength(1) * encodeTable.GetLength(2); i++)
            //    {
            //        if ((i % 16) == 0)
            //            sr.WriteLine();
            //        sr.Write(string.Format("0x{0:X4}, ", pte[i]));
            //    }
            //    sr.Close();
            //    throw new Exception("aa");
            //}
        }
 public void MyTestInitialize()
 {
     ar  = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 2314, 0);
     ar2 = TestImageGenerator.CreateAccurateRipVerify("0 136 886", 2314, 0);
 }
        public void OffsetSafeCRCRecordTest()
        {
            //OffsetSafeCRCRecord[] records = new OffsetSafeCRCRecord[5000];
            var record0 = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 2314, 0).OffsetSafeCRC;

            Assert.AreEqual(
                "xNabCDhnBPt45+ciq03CeqXDvZipuO5umMAVs6MWnHquaAQPCNK5p6aFqUwYn9pg\r\n" +
                "JRwA7N7y56iFkAAGocLf1W5WHb7+FZqfNpwFdbdDs+yRGAeUIvOoA+wiwPupDCAA\r\n" +
                "oA/rwLNMdbHStlNj4x85VCsLIp5OpLY96gEM9dBtralauYpI1bMne+Iz0PZQYMOf\r\n" +
                "ZR+siqD+PSKcB4ZVXUOFsLdnaE9PK2Nt+23eaCWz7Xb7DIk3y3N5/a/fpJKeI+wA\r\n" +
                "Z9VQKoi8ZrovomELWl5qkggU729uIY1o/2qXBMWJ6DwS67sNe10bBt1MdqqkNdV7\r\n" +
                "rmuw1evdP80ABMX8wDjxH3gIdozrGABX+st9/En+fiubdEtkhKdo96eI4Cqa41nW\r\n" +
                "4TvvD1UO5UrXS+gedLpa337w449cUVK3Yk7zDb5oAoJgK7jBHeetCdj/b30THmSA\r\n" +
                "pv30LKAcXgUpc602FPDH7m7GvsRrtiQ1r9ZHMyQ9NCBt2oWCv2Hac7jDW7N4vQgv\r\n" +
                "DJwm4nnn7H4WMZ/WziDfUVYYLVPlt/R/DXYnAlsVAj+kBHNlLojQG5A/bRqjDObN\r\n" +
                "NsNjdI3IgVOQZHP1bkaKGQKQHAdeOGkU+HgaPVe0zKO+r2b5AwKCc66imdS6GGGk\r\n" +
                "v5xwtNiLb6aJhmuASiOZL8oFHT+W7MPFTVb7hQEg7Ck=\r\n",
                //"8+lTDqEZidfayuC0LoxnL9Oluf4ywo1muFBu115XBgf254fKIdfVWZOcsQraS4eI\r\n" +
                //"NoLn7W3t0a16i745nEvikfw27ZsMR7gWPrXgXdsI2OdtjWTRL2Vra2dLe3WOl/Ru\r\n" +
                //"wFa1jqbB3+xHiB8XNi+5VKRh3fj1o5RSXS6tOZUvBUFFqoyuZK/DkeIyZ4gkotYO\r\n" +
                //"MZSsx2JBr2tdBzHZMssUmfvWUrfJZAQD8wMv1epy7q0Mk3W/QetVz6cZZ+6rRctf\r\n" +
                //"PGqvWBgNfS/+e7LBo/49KYd16kEofaX8LuuNB/7YJ85a3W71soQovwWLkjm32Xqo\r\n" +
                //"KpaUagu9QED1WEx7frfu95vYsQLV+vq6zULP6QOznUpU6n6LuMPQa5WNA4+chigC\r\n" +
                //"71GFeKTSO3bnS3xg8FMMqRtcTJleWF/7Bs3DkUZnxbkp4g8iZYZ3eMDc7A04AiYx\r\n" +
                //"3tYvDi9WiEZMRWpvuHfoBzWU7HbfOk5+32yg8TyNyVlPq1cfFn/jwQrfNyztTyav\r\n" +
                //"96ZJS2aBroYAw2We5RC2oekmi+N75L6+eQB/4iZOxB9aGP1sALd/UZaJqZP8FcmW\r\n" +
                //"FJOXlBi/KW68TJvujz+2w/P7EaZ0L7llQAtoHwoJniuNN5WYXBlescGc+vyYr5df\r\n" +
                //"jrul+QMmQ4xMi10mglq7CMLVfZZFFgBdvGBrn1tL9bg=\r\n",
                TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 2314, 13).OffsetSafeCRC.Base64);

            var offsets = new int[] { 1, 2, 3, 4, 8, 11, 15, 16, 31, 32, 255, 256, 597, 588, 588 * 5 - 1, 588 * 5, 4095, 4096, 4097, 5000 };

            foreach (int offset in offsets)
            {
                var record = TestImageGenerator.CreateAccurateRipVerify("13 68 99 136", 2314, offset).OffsetSafeCRC;

                int  real_off = -offset;
                int  off;
                bool found = record0.FindOffset(record, out off);
                if (real_off > 4096 || real_off < -4096)
                {
                    Assert.IsFalse(found, string.Format("FindOffset found offset where it shouldn't have, real offset {0}", real_off));
                }
                else
                {
                    Assert.IsTrue(found, string.Format("FindOffset failed to detect offset, real offset {0}", real_off));
                    Assert.AreEqual(real_off, off, string.Format("FindOffset returned {0}, should be {1}", off, real_off));
                }
                real_off = offset;
                found    = record.FindOffset(record0, out off);
                if (real_off > 4096 || real_off < -4096)
                {
                    Assert.IsFalse(found, string.Format("FindOffset found offset where it shouldn't have, real offset {0}", real_off));
                }
                else
                {
                    Assert.IsTrue(found, string.Format("FindOffset failed to detect offset, real offset {0}", real_off));
                    Assert.AreEqual(real_off, off, string.Format("FindOffset returned {0}, should be {1}", off, real_off));
                }
            }
        }