kfile_mp3 patch to support id3v2 tags
Scott Wheeler
wheeler at kde.org
Mon Oct 28 10:41:23 GMT 2002
Quoting MadCoder <pierre.habouzit at 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
More information about the kde-multimedia
mailing list