[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-multimedia
Subject:    Re: kfile_mp3 patch to support id3v2 tags
From:       Scott Wheeler <wheeler () kde ! org>
Date:       2002-10-28 10:41:23
[Download RAW message or body]

Quoting MadCoder <pierre.habouzit@m4x.org>:       
       
> what do you think about it ?       
       
Well there are a few issues here:       
       
First, let me give a bit of background -- I was the id3lib maintainer for about a \
year.  There are a        number of reasons why I have never switched KFMI for mp3 to \
id3lib:         
*) id3lib is not binary compatible between releases, even minor versions.  There is \
no attempt at        this.       
       
*) id3lib is barely maintained.  There was a new maintainer who stepped up after I \
(mostly)        stopped working on it, but there are still a lot of issues there.     \
  
*) id3lib's code is *really, really* horrible and this makes it very difficult to \
maintain.         
*) I've been working on an id3lib replacement for some time.       
       
Sorry that I didn't see this the other day -- my home internet connection is gone for \
a couple of        weeks (switching providers).  But, I actually spent most of the \
weekend hacking on my        replacement, which I hope to wrap with KFMI and I think \
should be ready for 3.2.         
Advantages of my lib:       
       
*) Faster -- I just did some testing yesterday and even before I've started any \
tuning my lib        reads tags about 40% faster.  This really shocked me since there \
are a number of places in my        code that are far from optimal. (My theory has \
been design first, tune later; attempt to        encapsulate the areas that need \
tuning.)         
*) KDE lib style code - While I'm not linking to Qt or the KDE libs (the only \
dependancy is the        STL) since I'm rather used to the style of KDE/Qt code, my \
id3lib replacement follows this        style.       
       
*) binary compatibility - I don't promise this before it stablalizes a bit, but the \
library is at least        designed to be binary compatible between releases once the \
API is a bit more finished.  I use        d-pointers for every class and am familiar \
with the BC guidelines for C++ libraries.         
*) Unicode support - id3v2 supports 4 text encodings - Latin1, UTF8, UTF16 and \
UTF16BE.  As        such my string class supports those 4 encodings.  id3lib was \
basically written to just support        Latin1, and Unicode support has been sortof \
halfway hacked in.         
Right now I'm still a little way off from being ready to use "TagLib" (named such \
because I       eventually hope to provide a homogenous high-level C++ API to at \
least ID3v1, ID3v2 and       OggVorbis comments), but reading COMM and T[xxx] \
(comments and text fields) is working      and I did some work on the tag rendering \
code this weekend.  I really feel like this should be      stable enough for \
inclusion in 3.2.  However, if that fails, it *might* be ok to add the patch that     \
 you sent depending on the other developers thoughts on the issues above.     
     
I guess basically, taking a look at the id3lib code hurts.  It's horrible.  It's \
horrible enough that      after being the maintainer for a year I decided that it \
isn't salvageable.  Basically it looks like it      was written and designed by bad C \
programmers who were trying to learn C++...  You have to      be very careful to \
avoid memory leaks when using id3lib (this is from the code):      
text = new char[nText + 1];    
return text;    
 
Oh, and there's also a lot of code -- about 30000 lines.  Right now I can do many of \
the useful  things that id3lib does in about 3200! 
 
Anyway, sorry for the rant.  I've *really* wanted id3v2 support in KDE for a long \
time, but I   personally don't think id3lib is the way...  
  
-Scott  
_______________________________________________
kde-multimedia mailing list
kde-multimedia@mail.kde.org
http://mail.kde.org/mailman/listinfo/kde-multimedia


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic