public void TestTwoItemsNoChange() { int[] expected = { 1, 1 }; byte[] data = { 0, 0, 0, 2, 1, 0 }; FingerprintDecompressor decompressor = new FingerprintDecompressor(); int algorithm = -1; int[] actual = decompressor.Decompress(Base64.ByteEncoding.GetString(data), out algorithm); Assert.AreEqual(0, algorithm); CollectionAssert.AreEqual(actual, expected); }
public void TestOneItemOneBitExcept2() { int[] expected = { 1 << 8 }; byte[] data = { 0, 0, 0, 1, 7, 2 }; FingerprintDecompressor decompressor = new FingerprintDecompressor(); int algorithm = -1; int[] actual = decompressor.Decompress(Base64.ByteEncoding.GetString(data), out algorithm); Assert.AreEqual(0, algorithm); CollectionAssert.AreEqual(actual, expected); }
public void TestOneItemThreeBits() { int[] expected = { 7 }; byte[] data = { 0, 0, 0, 1, 73, 0 }; FingerprintDecompressor decompressor = new FingerprintDecompressor(); int algorithm = -1; int[] actual = decompressor.Decompress(Base64.ByteEncoding.GetString(data), ref algorithm); Assert.AreEqual(0, algorithm); CollectionAssert.AreEqual(actual, expected); }
public void TestInvalid1() { byte[] data = { 0, 255, 255, 255 }; FingerprintDecompressor decompressor = new FingerprintDecompressor(); int algorithm = -1; int[] value = decompressor.Decompress(Base64.ByteEncoding.GetString(data), out algorithm); Assert.AreEqual(value.Length, 0); Assert.AreEqual(0, algorithm); }
public void TestLong() { int[] expected = { -587455133,-591649759,-574868448,-576973520,-543396544,1330439488,1326360000,1326355649,1191625921,1192674515,1194804466,1195336818,1165981042,1165956451,1157441379,1157441299,1291679571,1291673457,1170079601 }; string data = Base64.Decode("AQAAEwkjrUmSJQpUHflR9mjSJMdZpcO_Imdw9dCO9Clu4_wQPvhCB01w6xAtXNcAp5RASgDBhDSCGGIAcwA"); FingerprintDecompressor decompressor = new FingerprintDecompressor(); int algorithm = -1; int[] value = decompressor.Decompress(data, out algorithm); Assert.AreEqual(1, algorithm); CollectionAssert.AreEqual(value, expected); }
/// <summary> /// Uncompress and optionally base64-decode an encoded fingerprint. /// </summary> /// <param name="encoded_fp">Pointer to an encoded fingerprint</param> /// <param name="base64">Whether the encoded_fp parameter contains binary data or base64-encoded /// ASCII data. If 1, it will base64-decode the data before uncompressing the fingerprint.</param> /// <param name="algorithm">Chromaprint algorithm version which was used to generate the raw /// fingerprint</param> /// <returns>The decoded raw fingerprint (array of 32-bit integers)</returns> public static int[] DecodeFingerprint(byte[] encoded_fp, bool base64, out int algorithm) { string encoded = Base64.ByteEncoding.GetString(encoded_fp); string compressed = base64 ? Base64.Decode(encoded) : encoded; algorithm = 0; FingerprintDecompressor decompressor = new FingerprintDecompressor(); int[] uncompressed = decompressor.Decompress(compressed, ref algorithm); int size = uncompressed.Length; int[] fp = new int[size]; // TODO: copying necessary? Array.Copy(uncompressed, fp, size); return fp; }