[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