[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/taglib
From: Lukáš Lalinský <lalinsky () gmail ! com>
Date: 2010-07-11 10:26:35
Message-ID: 20100711102635.630ACAC85F () svn ! kde ! org
[Download RAW message or body]
SVN commit 1148630 by lalinsky:
Added FLAC::Properties::signature()
BUG:160172
M +3 -0 NEWS
M +8 -0 taglib/flac/flacproperties.cpp
M +6 -0 taglib/flac/flacproperties.h
M +16 -0 taglib/toolkit/tbytevector.cpp
M +5 -0 taglib/toolkit/tbytevector.h
M +8 -0 tests/test_bytevector.cpp
M +7 -0 tests/test_flac.cpp
--- trunk/kdesupport/taglib/NEWS #1148629:1148630
@@ -5,6 +5,9 @@
* Implemented APE::Tag::isEmpty() to check for all APE tags, not just the
basic ones.
* Added reading of WAV audio length. (BUG:116033)
+ * Exposed FLAC MD5 signature of the uncompressed audio stream via
+ FLAC::Properties::signature(). (BUG:160172)
+ * Added function ByteVector::toHex() for hex-encoding of byte vectors.
TagLib 1.6.3 (Apr 17, 2010)
===========================
--- trunk/kdesupport/taglib/taglib/flac/flacproperties.cpp #1148629:1148630
@@ -52,6 +52,7 @@
int sampleRate;
int sampleWidth;
int channels;
+ ByteVector signature;
};
////////////////////////////////////////////////////////////////////////////////
@@ -100,6 +101,11 @@
return d->channels;
}
+ByteVector FLAC::Properties::signature() const
+{
+ return d->signature;
+}
+
////////////////////////////////////////////////////////////////////////////////
// private members
////////////////////////////////////////////////////////////////////////////////
@@ -147,4 +153,6 @@
// Real bitrate:
d->bitrate = d->length > 0 ? ((d->streamLength * 8UL) / d->length) / 1000 : 0;
+
+ d->signature = d->data.mid(pos, 32);
}
--- trunk/kdesupport/taglib/taglib/flac/flacproperties.h #1148629:1148630
@@ -77,6 +77,12 @@
*/
int sampleWidth() const;
+ /*!
+ * Returns the MD5 signature of the uncompressed audio stream as read
+ * from the stream info header header.
+ */
+ ByteVector signature() const;
+
private:
Properties(const Properties &);
Properties &operator=(const Properties &);
--- trunk/kdesupport/taglib/taglib/toolkit/tbytevector.cpp #1148629:1148630
@@ -42,6 +42,8 @@
#define DATA(x) (&(x->data[0]))
namespace TagLib {
+ static const char hexTable[17] = "0123456789abcdef";
+
static const uint crcTable[256] = {
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
@@ -653,6 +655,20 @@
return *this;
}
+ByteVector ByteVector::toHex() const
+{
+ ByteVector encoded(size() * 2);
+
+ uint j = 0;
+ for(uint i = 0; i < size(); i++) {
+ unsigned char c = d->data[i];
+ encoded[j++] = hexTable[(c >> 4) & 0x0F];
+ encoded[j++] = hexTable[(c ) & 0x0F];
+ }
+
+ return encoded;
+}
+
////////////////////////////////////////////////////////////////////////////////
// protected members
////////////////////////////////////////////////////////////////////////////////
--- trunk/kdesupport/taglib/taglib/toolkit/tbytevector.h #1148629:1148630
@@ -385,6 +385,11 @@
*/
static ByteVector null;
+ /*!
+ * Returns a hex-encoded copy of the byte vector.
+ */
+ ByteVector toHex() const;
+
protected:
/*
* If this ByteVector is being shared via implicit sharing, do a deep copy
--- trunk/kdesupport/taglib/tests/test_bytevector.cpp #1148629:1148630
@@ -37,6 +37,7 @@
CPPUNIT_TEST(testFind2);
CPPUNIT_TEST(testRfind1);
CPPUNIT_TEST(testRfind2);
+ CPPUNIT_TEST(testToHex);
CPPUNIT_TEST_SUITE_END();
public:
@@ -173,6 +174,13 @@
CPPUNIT_ASSERT_EQUAL(10, r4.rfind("OggS", 12));
}
+ void testToHex()
+ {
+ ByteVector v("\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f", \
16); +
+ CPPUNIT_ASSERT_EQUAL(ByteVector("f0e1d2c3b4a5968778695a4b3c2d1e0f"), v.toHex());
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestByteVector);
--- trunk/kdesupport/taglib/tests/test_flac.cpp #1148629:1148630
@@ -13,11 +13,18 @@
class TestFLAC : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(TestFLAC);
+ CPPUNIT_TEST(testSignature);
CPPUNIT_TEST(testMultipleCommentBlocks);
CPPUNIT_TEST_SUITE_END();
public:
+ void testSignature()
+ {
+ FLAC::File f("data/no-tags.flac");
+ CPPUNIT_ASSERT_EQUAL(ByteVector("a1b141f766e9849ac3db1030a20a3c77"), \
f.audioProperties()->signature().toHex()); + }
+
void testMultipleCommentBlocks()
{
ScopedFileCopy copy("multiple-vc", ".flac");
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic