Property changes on: amarok/src/metadata/asf
___________________________________________________________________
Name: svn:ignore
+ .libs
.deps
Makefile
Makefile.in
Index: amarok/src/metadata/asf/asffile.h
===================================================================
--- amarok/src/metadata/asf/asffile.h (revision 0)
+++ amarok/src/metadata/asf/asffile.h (revision 743005)
@@ -0,0 +1,114 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#ifndef TAGLIB_ASFFILE_H
+#define TAGLIB_ASFFILE_H
+
+#include <tag.h>
+#include <tfile.h>
+#include "asfproperties.h"
+#include "asftag.h"
+
+namespace TagLib {
+
+ //! An implementation of ASF (WMA) metadata
+ namespace ASF {
+
+ /*!
+ * This implements and provides an interface for ASF files to the
+ * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing
+ * the abstract TagLib::File API as well as providing some additional
+ * information specific to ASF files.
+ */
+ class File : public TagLib::File
+ {
+ public:
+
+ /*!
+ * Contructs an ASF file from \a file. If \a readProperties is true the
+ * file's audio properties will also be read using \a propertiesStyle. If
+ * false, \a propertiesStyle is ignored.
+ *
+ * \note In the current implementation, both \a readProperties and
+ * \a propertiesStyle are ignored.
+ */
+ File(const char *file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average);
+
+ /*!
+ * Destroys this instance of the File.
+ */
+ virtual ~File();
+
+ /*!
+ * Returns a pointer to the ASF tag of the file.
+ *
+ * ASF::Tag implements the tag interface, so this serves as the
+ * reimplementation of TagLib::File::tag().
+ *
+ * \note The Tag <b>is still</b> owned by the ASF::File and should not be
+ * deleted by the user. It will be deleted when the file (object) is
+ * destroyed.
+ */
+ virtual Tag *tag() const;
+
+ /*!
+ * Returns the ASF audio properties for this file.
+ */
+ virtual Properties *audioProperties() const;
+
+ /*!
+ * Save the file.
+ *
+ * This returns true if the save was successful.
+ */
+ virtual bool save();
+
+ private:
+
+ int readBYTE();
+ int readWORD();
+ unsigned int readDWORD();
+ long long readQWORD();
+ static ByteVector renderString(const String &str, bool includeLength = false);
+ String readString(int len);
+ void read(bool readProperties, Properties::ReadStyle propertiesStyle);
+
+ friend class Attribute;
+
+ class BaseObject;
+ class UnknownObject;
+ class FilePropertiesObject;
+ class StreamPropertiesObject;
+ class ContentDescriptionObject;
+ class ExtendedContentDescriptionObject;
+ class HeaderExtensionObject;
+ class MetadataObject;
+ class MetadataLibraryObject;
+
+ class FilePrivate;
+ FilePrivate *d;
+ };
+
+ }
+
+}
+
+#endif
Property changes on: amarok/src/metadata/asf/asffile.h
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp
===================================================================
--- amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp (revision 0)
+++ amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp (revision 743005)
@@ -0,0 +1,47 @@
+/***************************************************************************
+ copyright : (C) 2005 by Martin Aumueller
+ email : aumuell@reserv.at
+ ***************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
+ * MA 02110-1301 USA *
+ ***************************************************************************/
+
+// (c) 2005 Martin Aumueller <aumuell@reserv.at>
+// See COPYING file for licensing information
+
+#include "taglib_asffiletyperesolver.h"
+#include "asffile.h"
+
+#include <string.h>
+
+TagLib::File *ASFFileTypeResolver::createFile(const char *fileName,
+ bool readProperties,
+ TagLib::AudioProperties::ReadStyle propertiesStyle) const
+{
+ const char *ext = strrchr(fileName, '.');
+ if(ext && (!strcasecmp(ext, ".wma") || !strcasecmp(ext, ".asf")))
+ {
+ TagLib::ASF::File *f = new TagLib::ASF::File(fileName, readProperties, propertiesStyle);
+ if(f->isValid())
+ return f;
+ else
+ {
+ delete f;
+ }
+ }
+
+ return 0;
+}
Index: amarok/src/metadata/asf/asfattribute.h
===================================================================
--- amarok/src/metadata/asf/asfattribute.h (revision 0)
+++ amarok/src/metadata/asf/asfattribute.h (revision 743005)
@@ -0,0 +1,176 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#ifndef TAGLIB_ASFATTRIBUTE_H
+#define TAGLIB_ASFATTRIBUTE_H
+
+#include <tstring.h>
+#include <tbytevector.h>
+
+namespace TagLib
+{
+
+ namespace ASF
+ {
+
+ class File;
+
+ class Attribute
+ {
+ public:
+
+ /*!
+ * Enum of types an Attribute can have.
+ */
+ enum AttributeTypes {
+ UnicodeType = 0,
+ BytesType = 1,
+ BoolType = 2,
+ DWordType = 3,
+ QWordType = 4,
+ WordType = 5,
+ GuidType = 6
+ };
+
+ /*!
+ * Constructs an empty attribute.
+ */
+ Attribute();
+
+ /*!
+ * Constructs an attribute with \a key and a UnicodeType \a value.
+ */
+ Attribute(const String &value);
+
+ /*!
+ * Constructs an attribute with \a key and a BytesType \a value.
+ */
+ Attribute(const ByteVector &value);
+
+ /*!
+ * Constructs an attribute with \a key and a DWordType \a value.
+ */
+ Attribute(unsigned int value);
+
+ /*!
+ * Constructs an attribute with \a key and a QWordType \a value.
+ */
+ Attribute(unsigned long long value);
+
+ /*!
+ * Constructs an attribute with \a key and a WordType \a value.
+ */
+ Attribute(unsigned short value);
+
+ /*!
+ * Constructs an attribute with \a key and a BoolType \a value.
+ */
+ Attribute(bool value);
+
+ /*!
+ * Construct an attribute as a copy of \a other.
+ */
+ Attribute(const Attribute &item);
+
+ /*!
+ * Copies the contents of \a other into this item.
+ */
+ ASF::Attribute &operator=(const Attribute &other);
+
+ /*!
+ * Destroys the attribute.
+ */
+ virtual ~Attribute();
+
+ /*!
+ * Returns type of the value.
+ */
+ AttributeTypes type() const;
+
+ /*!
+ * Returns the BoolType \a value.
+ */
+ unsigned short toBool() const;
+
+ /*!
+ * Returns the WordType \a value.
+ */
+ unsigned short toUShort() const;
+
+ /*!
+ * Returns the DWordType \a value.
+ */
+ unsigned int toUInt() const;
+
+ /*!
+ * Returns the QWordType \a value.
+ */
+ unsigned long long toULongLong() const;
+
+ /*!
+ * Returns the UnicodeType \a value.
+ */
+ String toString() const;
+
+ /*!
+ * Returns the BytesType \a value.
+ */
+ ByteVector toByteVector() const;
+
+ /*!
+ * Returns the language number, or 0 is no stream number was set.
+ */
+ int language() const;
+
+ /*!
+ * Sets the language number.
+ */
+ void setLanguage(int value);
+
+ /*!
+ * Returns the stream number, or 0 is no stream number was set.
+ */
+ int stream() const;
+
+ /*!
+ * Sets the stream number.
+ */
+ void setStream(int value);
+
+#ifndef DO_NOT_DOCUMENT
+ /* THIS IS PRIVATE, DON'T TOUCH IT! */
+ String parse(ASF::File &file, int kind = 0);
+#endif
+
+ private:
+ friend class File;
+
+ ByteVector render(const String &name, int kind = 0) const;
+
+ class AttributePrivate;
+ AttributePrivate *d;
+ };
+
+ }
+
+}
+
+#endif
Property changes on: amarok/src/metadata/asf/asfattribute.h
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/asf/taglib_asffiletyperesolver.h
===================================================================
--- amarok/src/metadata/asf/taglib_asffiletyperesolver.h (revision 0)
+++ amarok/src/metadata/asf/taglib_asffiletyperesolver.h (revision 743005)
@@ -0,0 +1,39 @@
+/***************************************************************************
+ copyright : (C) 2005 by Martin Aumueller
+ email : aumuell@reserv.at
+ ***************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
+ * MA 02110-1301 USA *
+ ***************************************************************************/
+
+// (c) 2005 Martin Aumueller <aumuell@reserv.at>
+// See COPYING file for licensing information
+
+#ifndef TAGLIB_ASFFILETYPERESOLVER_H
+#define TAGLIB_ASFFILETYPERESOLVER_H
+
+#include <taglib/tfile.h>
+#include <taglib/fileref.h>
+
+
+class ASFFileTypeResolver : public TagLib::FileRef::FileTypeResolver
+{
+ TagLib::File *createFile(const char *fileName,
+ bool readAudioProperties,
+ TagLib::AudioProperties::ReadStyle audioPropertiesStyle) const;
+};
+
+#endif
Index: amarok/src/metadata/asf/asftag.cpp
===================================================================
--- amarok/src/metadata/asf/asftag.cpp (revision 0)
+++ amarok/src/metadata/asf/asftag.cpp (revision 743005)
@@ -0,0 +1,202 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#include "asftag.h"
+
+using namespace TagLib;
+
+class ASF::Tag::TagPrivate
+{
+public:
+ String title;
+ String artist;
+ String copyright;
+ String comment;
+ String rating;
+ AttributeListMap attributeListMap;
+};
+
+ASF::Tag::Tag()
+: TagLib::Tag()
+{
+ d = new TagPrivate;
+}
+
+ASF::Tag::~Tag()
+{
+ if(d)
+ delete d;
+}
+
+String
+ASF::Tag::title() const
+{
+ return d->title;
+}
+
+String
+ASF::Tag::artist() const
+{
+ return d->artist;
+}
+
+String
+ASF::Tag::album() const
+{
+ if(d->attributeListMap.contains("WM/AlbumTitle"))
+ return d->attributeListMap["WM/AlbumTitle"][0].toString();
+ return String::null;
+}
+
+String
+ASF::Tag::copyright() const
+{
+ return d->copyright;
+}
+
+String
+ASF::Tag::comment() const
+{
+ return d->comment;
+}
+
+String
+ASF::Tag::rating() const
+{
+ return d->rating;
+}
+
+unsigned int
+ASF::Tag::year() const
+{
+ if(d->attributeListMap.contains("WM/Year"))
+ return d->attributeListMap["WM/Year"][0].toString().toInt();
+ return 0;
+}
+
+unsigned int
+ASF::Tag::track() const
+{
+ if(d->attributeListMap.contains("WM/TrackNumber"))
+ return d->attributeListMap["WM/TrackNumber"][0].toString().toInt();
+ if(d->attributeListMap.contains("WM/Track"))
+ return d->attributeListMap["WM/Track"][0].toUInt();
+ return 0;
+}
+
+String
+ASF::Tag::genre() const
+{
+ if(d->attributeListMap.contains("WM/Genre"))
+ return d->attributeListMap["WM/Genre"][0].toString();
+ return String::null;
+}
+
+void
+ASF::Tag::setTitle(const String &value)
+{
+ d->title = value;
+}
+
+void
+ASF::Tag::setArtist(const String &value)
+{
+ d->artist = value;
+}
+
+void
+ASF::Tag::setCopyright(const String &value)
+{
+ d->copyright = value;
+}
+
+void
+ASF::Tag::setComment(const String &value)
+{
+ d->comment = value;
+}
+
+void
+ASF::Tag::setRating(const String &value)
+{
+ d->rating = value;
+}
+
+void
+ASF::Tag::setAlbum(const String &value)
+{
+ setAttribute("WM/AlbumTitle", value);
+}
+
+void
+ASF::Tag::setGenre(const String &value)
+{
+ setAttribute("WM/Genre", value);
+}
+
+void
+ASF::Tag::setYear(uint value)
+{
+ setAttribute("WM/Year", String::number(value));
+}
+
+void
+ASF::Tag::setTrack(uint value)
+{
+ setAttribute("WM/TrackNumber", String::number(value));
+}
+
+ASF::AttributeListMap&
+ASF::Tag::attributeListMap()
+{
+ return d->attributeListMap;
+}
+
+void ASF::Tag::removeItem(const String &key)
+{
+ AttributeListMap::Iterator it = d->attributeListMap.find(key);
+ if(it != d->attributeListMap.end())
+ d->attributeListMap.erase(it);
+}
+
+void ASF::Tag::setAttribute(const String &name, const Attribute &attribute)
+{
+ AttributeList value;
+ value.append(attribute);
+ d->attributeListMap.insert(name, value);
+}
+
+void ASF::Tag::addAttribute(const String &name, const Attribute &attribute)
+{
+ if(d->attributeListMap.contains(name)) {
+ d->attributeListMap[name].append(attribute);
+ }
+ else {
+ setAttribute(name, attribute);
+ }
+}
+
+bool ASF::Tag::isEmpty() const {
+ return TagLib::Tag::isEmpty() &&
+ copyright().isEmpty() &&
+ rating().isEmpty() &&
+ d->attributeListMap.isEmpty();
+}
Index: amarok/src/metadata/asf/asfproperties.cpp
===================================================================
--- amarok/src/metadata/asf/asfproperties.cpp (revision 0)
+++ amarok/src/metadata/asf/asfproperties.cpp (revision 743005)
@@ -0,0 +1,95 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#include <tstring.h>
+#include "asfproperties.h"
+
+using namespace TagLib;
+
+class ASF::Properties::PropertiesPrivate
+{
+public:
+ PropertiesPrivate(): length(0), bitrate(0), sampleRate(0), channels(0) {}
+ int length;
+ int bitrate;
+ int sampleRate;
+ int channels;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// public members
+////////////////////////////////////////////////////////////////////////////////
+
+ASF::Properties::Properties() : AudioProperties(AudioProperties::Average)
+{
+ d = new PropertiesPrivate;
+}
+
+ASF::Properties::~Properties()
+{
+ if(d)
+ delete d;
+}
+
+int ASF::Properties::length() const
+{
+ return d->length;
+}
+
+int ASF::Properties::bitrate() const
+{
+ return d->bitrate;
+}
+
+int ASF::Properties::sampleRate() const
+{
+ return d->sampleRate;
+}
+
+int ASF::Properties::channels() const
+{
+ return d->channels;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// private members
+////////////////////////////////////////////////////////////////////////////////
+
+void ASF::Properties::setLength(int length)
+{
+ d->length = length;
+}
+
+void ASF::Properties::setBitrate(int length)
+{
+ d->bitrate = length;
+}
+
+void ASF::Properties::setSampleRate(int length)
+{
+ d->sampleRate = length;
+}
+
+void ASF::Properties::setChannels(int length)
+{
+ d->channels = length;
+}
+
Property changes on: amarok/src/metadata/asf/asfproperties.cpp
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/asf/Makefile.am
===================================================================
--- amarok/src/metadata/asf/Makefile.am (revision 0)
+++ amarok/src/metadata/asf/Makefile.am (revision 743005)
@@ -0,0 +1,20 @@
+SUBDIRS =
+
+INCLUDES = $(all_includes) $(taglib_includes)
+METASOURCES = AUTO
+libtagasf_la_LDFLAGS = $(all_libraries)
+noinst_LTLIBRARIES = libtagasf.la
+
+libtagasf_la_SOURCES = \
+ asfattribute.cpp \
+ asfproperties.cpp \
+ asftag.cpp \
+ asffile.cpp \
+ taglib_asffiletyperesolver.cpp
+
+noinst_HEADERS = \
+ asfattribute.h \
+ asfproperties.h \
+ asftag.h \
+ asffile.h \
+ taglib_asffiletyperesolver.h
Index: amarok/src/metadata/asf/asffile.cpp
===================================================================
--- amarok/src/metadata/asf/asffile.cpp (revision 0)
+++ amarok/src/metadata/asf/asffile.cpp (revision 743005)
@@ -0,0 +1,547 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#include <tbytevectorlist.h>
+#include <tstring.h>
+#include "asffile.h"
+#include "asftag.h"
+#include "asfproperties.h"
+
+using namespace TagLib;
+
+class ASF::File::FilePrivate
+{
+public:
+ FilePrivate():
+ size(0),
+ tag(0),
+ properties(0),
+ contentDescriptionObject(0),
+ extendedContentDescriptionObject(0),
+ headerExtensionObject(0),
+ metadataObject(0),
+ metadataLibraryObject(0) {}
+ unsigned long long size;
+ ASF::Tag *tag;
+ ASF::Properties *properties;
+ List<ASF::File::BaseObject *> objects;
+ ASF::File::ContentDescriptionObject *contentDescriptionObject;
+ ASF::File::ExtendedContentDescriptionObject *extendedContentDescriptionObject;
+ ASF::File::HeaderExtensionObject *headerExtensionObject;
+ ASF::File::MetadataObject *metadataObject;
+ ASF::File::MetadataLibraryObject *metadataLibraryObject;
+};
+
+static ByteVector headerGuid("\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C", 16);
+static ByteVector filePropertiesGuid("\xA1\xDC\xAB\x8C\x47\xA9\xCF\x11\x8E\xE4\x00\xC0\x0C\x20\x53\x65", 16);
+static ByteVector streamPropertiesGuid("\x91\x07\xDC\xB7\xB7\xA9\xCF\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65", 16);
+static ByteVector contentDescriptionGuid("\x33\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C", 16);
+static ByteVector extendedContentDescriptionGuid("\x40\xA4\xD0\xD2\x07\xE3\xD2\x11\x97\xF0\x00\xA0\xC9\x5E\xA8\x50", 16);
+static ByteVector headerExtensionGuid("\xb5\x03\xbf_.\xa9\xcf\x11\x8e\xe3\x00\xc0\x0c Se", 16);
+static ByteVector metadataGuid("\xEA\xCB\xF8\xC5\xAF[wH\204g\xAA\214D\xFAL\xCA", 16);
+static ByteVector metadataLibraryGuid("\224\034#D\230\224\321I\241A\x1d\x13NEpT", 16);
+
+class ASF::File::BaseObject
+{
+public:
+ ByteVector data;
+ virtual ~BaseObject() {}
+ virtual ByteVector guid() = 0;
+ virtual void parse(ASF::File *file, unsigned int size);
+ virtual ByteVector render(ASF::File *file);
+};
+
+class ASF::File::UnknownObject : public ASF::File::BaseObject
+{
+ ByteVector myGuid;
+public:
+ UnknownObject(const ByteVector &guid);
+ ByteVector guid();
+};
+
+class ASF::File::FilePropertiesObject : public ASF::File::BaseObject
+{
+public:
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+};
+
+class ASF::File::StreamPropertiesObject : public ASF::File::BaseObject
+{
+public:
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+};
+
+class ASF::File::ContentDescriptionObject : public ASF::File::BaseObject
+{
+public:
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+ ByteVector render(ASF::File *file);
+};
+
+class ASF::File::ExtendedContentDescriptionObject : public ASF::File::BaseObject
+{
+public:
+ ByteVectorList attributeData;
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+ ByteVector render(ASF::File *file);
+};
+
+class ASF::File::MetadataObject : public ASF::File::BaseObject
+{
+public:
+ ByteVectorList attributeData;
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+ ByteVector render(ASF::File *file);
+};
+
+class ASF::File::MetadataLibraryObject : public ASF::File::BaseObject
+{
+public:
+ ByteVectorList attributeData;
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+ ByteVector render(ASF::File *file);
+};
+
+class ASF::File::HeaderExtensionObject : public ASF::File::BaseObject
+{
+public:
+ List<ASF::File::BaseObject *> objects;
+ ByteVector guid();
+ void parse(ASF::File *file, uint size);
+ ByteVector render(ASF::File *file);
+};
+
+void
+ASF::File::BaseObject::parse(ASF::File *file, unsigned int size)
+{
+ data = file->readBlock(size - 24);
+}
+
+ByteVector
+ASF::File::BaseObject::render(ASF::File * /*file*/)
+{
+ return guid() + ByteVector::fromLongLong(data.size() + 24, false) + data;
+}
+
+ASF::File::UnknownObject::UnknownObject(const ByteVector &guid) : myGuid(guid)
+{
+}
+
+ByteVector
+ASF::File::UnknownObject::guid()
+{
+ return myGuid;
+}
+
+ByteVector
+ASF::File::FilePropertiesObject::guid()
+{
+ return filePropertiesGuid;
+}
+
+void
+ASF::File::FilePropertiesObject::parse(ASF::File *file, uint size)
+{
+ BaseObject::parse(file, size);
+ file->d->properties->setLength((int)(data.mid(40, 8).toLongLong(false) / 10000000L - data.mid(56, 8).toLongLong(false) / 1000L));
+}
+
+ByteVector
+ASF::File::StreamPropertiesObject::guid()
+{
+ return streamPropertiesGuid;
+}
+
+void
+ASF::File::StreamPropertiesObject::parse(ASF::File *file, uint size)
+{
+ BaseObject::parse(file, size);
+ file->d->properties->setChannels(data.mid(56, 2).toShort(false));
+ file->d->properties->setSampleRate(data.mid(58, 4).toUInt(false));
+ file->d->properties->setBitrate(data.mid(62, 4).toUInt(false) * 8 / 1000);
+}
+
+ByteVector
+ASF::File::ContentDescriptionObject::guid()
+{
+ return contentDescriptionGuid;
+}
+
+void
+ASF::File::ContentDescriptionObject::parse(ASF::File *file, uint /*size*/)
+{
+ file->d->contentDescriptionObject = this;
+ int titleLength = file->readWORD();
+ int artistLength = file->readWORD();
+ int copyrightLength = file->readWORD();
+ int commentLength = file->readWORD();
+ int ratingLength = file->readWORD();
+ file->d->tag->setTitle(file->readString(titleLength));
+ file->d->tag->setArtist(file->readString(artistLength));
+ file->d->tag->setCopyright(file->readString(copyrightLength));
+ file->d->tag->setComment(file->readString(commentLength));
+ file->d->tag->setRating(file->readString(ratingLength));
+}
+
+ByteVector
+ASF::File::ContentDescriptionObject::render(ASF::File *file)
+{
+ ByteVector v1 = file->renderString(file->d->tag->title());
+ ByteVector v2 = file->renderString(file->d->tag->artist());
+ ByteVector v3 = file->renderString(file->d->tag->copyright());
+ ByteVector v4 = file->renderString(file->d->tag->comment());
+ ByteVector v5 = file->renderString(file->d->tag->rating());
+ data.clear();
+ data.append(ByteVector::fromShort(v1.size(), false));
+ data.append(ByteVector::fromShort(v2.size(), false));
+ data.append(ByteVector::fromShort(v3.size(), false));
+ data.append(ByteVector::fromShort(v4.size(), false));
+ data.append(ByteVector::fromShort(v5.size(), false));
+ data.append(v1);
+ data.append(v2);
+ data.append(v3);
+ data.append(v4);
+ data.append(v5);
+ return BaseObject::render(file);
+}
+
+ByteVector
+ASF::File::ExtendedContentDescriptionObject::guid()
+{
+ return extendedContentDescriptionGuid;
+}
+
+void
+ASF::File::ExtendedContentDescriptionObject::parse(ASF::File *file, uint /*size*/)
+{
+ file->d->extendedContentDescriptionObject = this;
+ int count = file->readWORD();
+ while(count--) {
+ ASF::Attribute attribute;
+ String name = attribute.parse(*file);
+ file->d->tag->addAttribute(name, attribute);
+ }
+}
+
+ByteVector
+ASF::File::ExtendedContentDescriptionObject::render(ASF::File *file)
+{
+ data.clear();
+ data.append(ByteVector::fromShort(attributeData.size(), false));
+ data.append(attributeData.toByteVector(ByteVector::null));
+ return BaseObject::render(file);
+}
+
+ByteVector
+ASF::File::MetadataObject::guid()
+{
+ return metadataGuid;
+}
+
+void
+ASF::File::MetadataObject::parse(ASF::File *file, uint /*size*/)
+{
+ file->d->metadataObject = this;
+ int count = file->readWORD();
+ while(count--) {
+ ASF::Attribute attribute;
+ String name = attribute.parse(*file, 1);
+ file->d->tag->addAttribute(name, attribute);
+ }
+}
+
+ByteVector
+ASF::File::MetadataObject::render(ASF::File *file)
+{
+ data.clear();
+ data.append(ByteVector::fromShort(attributeData.size(), false));
+ data.append(attributeData.toByteVector(ByteVector::null));
+ return BaseObject::render(file);
+}
+
+ByteVector
+ASF::File::MetadataLibraryObject::guid()
+{
+ return metadataLibraryGuid;
+}
+
+void
+ASF::File::MetadataLibraryObject::parse(ASF::File *file, uint /*size*/)
+{
+ file->d->metadataLibraryObject = this;
+ int count = file->readWORD();
+ while(count--) {
+ ASF::Attribute attribute;
+ String name = attribute.parse(*file, 2);
+ file->d->tag->addAttribute(name, attribute);
+ }
+}
+
+ByteVector
+ASF::File::MetadataLibraryObject::render(ASF::File *file)
+{
+ data.clear();
+ data.append(ByteVector::fromShort(attributeData.size(), false));
+ data.append(attributeData.toByteVector(ByteVector::null));
+ return BaseObject::render(file);
+}
+
+ByteVector
+ASF::File::HeaderExtensionObject::guid()
+{
+ return headerExtensionGuid;
+}
+
+void
+ASF::File::HeaderExtensionObject::parse(ASF::File *file, uint /*size*/)
+{
+ file->d->headerExtensionObject = this;
+ file->seek(18, File::Current);
+ long long dataSize = file->readDWORD();
+ long long dataPos = 0;
+ while(dataPos < dataSize) {
+ ByteVector guid = file->readBlock(16);
+ long long size = file->readQWORD();
+ BaseObject *obj;
+ if(guid == metadataGuid) {
+ obj = new MetadataObject();
+ }
+ else if(guid == metadataLibraryGuid) {
+ obj = new MetadataLibraryObject();
+ }
+ else {
+ obj = new UnknownObject(guid);
+ }
+ obj->parse(file, size);
+ objects.append(obj);
+ dataPos += size;
+ }
+}
+
+ByteVector
+ASF::File::HeaderExtensionObject::render(ASF::File *file)
+{
+ data.clear();
+ for(unsigned int i = 0; i < objects.size(); i++) {
+ data.append(objects[i]->render(file));
+ }
+ data = ByteVector("\x11\xD2\xD3\xAB\xBA\xA9\xcf\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65\x06\x00", 18) + ByteVector::fromUInt(data.size(), false) + data;
+ return BaseObject::render(file);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// public members
+////////////////////////////////////////////////////////////////////////////////
+
+ASF::File::File(const char *file, bool readProperties, Properties::ReadStyle propertiesStyle)
+ : TagLib::File(file)
+{
+ d = new FilePrivate;
+ read(readProperties, propertiesStyle);
+}
+
+ASF::File::~File()
+{
+ for(unsigned int i = 0; i < d->objects.size(); i++) {
+ delete d->objects[i];
+ }
+ if(d->tag) {
+ delete d->tag;
+ }
+ if(d->properties) {
+ delete d->properties;
+ }
+ delete d;
+}
+
+ASF::Tag *ASF::File::tag() const
+{
+ return d->tag;
+}
+
+ASF::Properties *ASF::File::audioProperties() const
+{
+ return d->properties;
+}
+
+void ASF::File::read(bool /*readProperties*/, Properties::ReadStyle /*propertiesStyle*/)
+{
+ if(!isValid())
+ return;
+
+ ByteVector guid = readBlock(16);
+ if(guid != headerGuid) {
+ return;
+ }
+
+ d->tag = new ASF::Tag();
+ d->properties = new ASF::Properties();
+
+ d->size = readQWORD();
+ int numObjects = readDWORD();
+ seek(2, Current);
+
+ for(int i = 0; i < numObjects; i++) {
+ ByteVector guid = readBlock(16);
+ long size = (long)readQWORD();
+ BaseObject *obj;
+ if(guid == filePropertiesGuid) {
+ obj = new FilePropertiesObject();
+ }
+ else if(guid == streamPropertiesGuid) {
+ obj = new StreamPropertiesObject();
+ }
+ else if(guid == contentDescriptionGuid) {
+ obj = new ContentDescriptionObject();
+ }
+ else if(guid == extendedContentDescriptionGuid) {
+ obj = new ExtendedContentDescriptionObject();
+ }
+ else if(guid == headerExtensionGuid) {
+ obj = new HeaderExtensionObject();
+ }
+ else {
+ obj = new UnknownObject(guid);
+ }
+ obj->parse(this, size);
+ d->objects.append(obj);
+ }
+}
+
+bool ASF::File::save()
+{
+ if(readOnly()) {
+ return false;
+ }
+
+ if(!d->contentDescriptionObject) {
+ d->contentDescriptionObject = new ContentDescriptionObject();
+ d->objects.append(d->contentDescriptionObject);
+ }
+ if(!d->extendedContentDescriptionObject) {
+ d->extendedContentDescriptionObject = new ExtendedContentDescriptionObject();
+ d->objects.append(d->extendedContentDescriptionObject);
+ }
+ if(!d->headerExtensionObject) {
+ d->headerExtensionObject = new HeaderExtensionObject();
+ d->objects.append(d->headerExtensionObject);
+ }
+ if(!d->metadataObject) {
+ d->metadataObject = new MetadataObject();
+ d->headerExtensionObject->objects.append(d->metadataObject);
+ }
+ if(!d->metadataLibraryObject) {
+ d->metadataLibraryObject = new MetadataLibraryObject();
+ d->headerExtensionObject->objects.append(d->metadataLibraryObject);
+ }
+
+ ASF::AttributeListMap::ConstIterator it = d->tag->attributeListMap().begin();
+ for(; it != d->tag->attributeListMap().end(); it++) {
+ const String &name = it->first;
+ const AttributeList &attributes = it->second;
+ bool inExtendedContentDescriptionObject = false;
+ bool inMetadataObject = false;
+ for(unsigned int j = 0; j < attributes.size(); j++) {
+ const Attribute &attribute = attributes[j];
+ if(!inExtendedContentDescriptionObject && attribute.language() == 0 && attribute.stream() == 0) {
+ d->extendedContentDescriptionObject->attributeData.append(attribute.render(name));
+ inExtendedContentDescriptionObject = true;
+ }
+ else if(!inMetadataObject && attribute.language() == 0 && attribute.stream() != 0) {
+ d->metadataObject->attributeData.append(attribute.render(name, 1));
+ inMetadataObject = true;
+ }
+ else {
+ d->metadataLibraryObject->attributeData.append(attribute.render(name, 2));
+ }
+ }
+ }
+
+ ByteVector data;
+ for(unsigned int i = 0; i < d->objects.size(); i++) {
+ data.append(d->objects[i]->render(this));
+ }
+ data = headerGuid + ByteVector::fromLongLong(data.size() + 30, false) + ByteVector::fromUInt(d->objects.size(), false) + ByteVector("\x01\x02", 2) + data;
+ insert(data, 0, d->size);
+
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// protected members
+////////////////////////////////////////////////////////////////////////////////
+
+int ASF::File::readBYTE()
+{
+ ByteVector v = readBlock(1);
+ return v[0];
+}
+
+int ASF::File::readWORD()
+{
+ ByteVector v = readBlock(2);
+ return v.toShort(false);
+}
+
+unsigned int ASF::File::readDWORD()
+{
+ ByteVector v = readBlock(4);
+ return v.toUInt(false);
+}
+
+long long ASF::File::readQWORD()
+{
+ ByteVector v = readBlock(8);
+ return v.toLongLong(false);
+}
+
+String
+ASF::File::readString(int length)
+{
+ ByteVector data = readBlock(length);
+ unsigned int size = data.size();
+ while (size >= 2) {
+ if(data[size - 1] != '\0' || data[size - 2] != '\0') {
+ break;
+ }
+ size -= 2;
+ }
+ if(size != data.size()) {
+ data.resize(size);
+ }
+ return String(data, String::UTF16LE);
+}
+
+ByteVector
+ASF::File::renderString(const String &str, bool includeLength)
+{
+ ByteVector data = str.data(String::UTF16LE) + ByteVector::fromShort(0, false);
+ if(includeLength) {
+ data = ByteVector::fromShort(data.size(), false) + data;
+ }
+ return data;
+}
Property changes on: amarok/src/metadata/asf/asffile.cpp
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/asf/asftag.h
===================================================================
--- amarok/src/metadata/asf/asftag.h (revision 0)
+++ amarok/src/metadata/asf/asftag.h (revision 743005)
@@ -0,0 +1,181 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#ifndef TAGLIB_ASFTAG_H
+#define TAGLIB_ASFTAG_H
+
+#include <tag.h>
+#include <tlist.h>
+#include <tmap.h>
+#include "asfattribute.h"
+
+namespace TagLib {
+
+ namespace ASF {
+
+ typedef List<Attribute> AttributeList;
+ typedef Map<String, AttributeList> AttributeListMap;
+
+ class Tag : public TagLib::Tag {
+
+ friend class File;
+
+ public:
+
+ Tag();
+
+ virtual ~Tag();
+
+ /*!
+ * Returns the track name.
+ */
+ virtual String title() const;
+
+ /*!
+ * Returns the artist name.
+ */
+ virtual String artist() const;
+
+ /*!
+ * Returns the album name; if no album name is present in the tag
+ * String::null will be returned.
+ */
+ virtual String album() const;
+
+ /*!
+ * Returns the track comment.
+ */
+ virtual String comment() const;
+
+ /*!
+ * Returns the genre name; if no genre is present in the tag String::null
+ * will be returned.
+ */
+ virtual String genre() const;
+
+ /*!
+ * Returns the rating.
+ */
+ virtual String rating() const;
+
+ /*!
+ * Returns the genre name; if no genre is present in the tag String::null
+ * will be returned.
+ */
+ virtual String copyright() const;
+
+ /*!
+ * Returns the year; if there is no year set, this will return 0.
+ */
+ virtual uint year() const;
+
+ /*!
+ * Returns the track number; if there is no track number set, this will
+ * return 0.
+ */
+ virtual uint track() const;
+
+ /*!
+ * Sets the title to \a s.
+ */
+ virtual void setTitle(const String &s);
+
+ /*!
+ * Sets the artist to \a s.
+ */
+ virtual void setArtist(const String &s);
+
+ /*!
+ * Sets the album to \a s. If \a s is String::null then this value will be
+ * cleared.
+ */
+ virtual void setAlbum(const String &s);
+
+ /*!
+ * Sets the comment to \a s.
+ */
+ virtual void setComment(const String &s);
+
+ /*!
+ * Sets the rating to \a s.
+ */
+ virtual void setRating(const String &s);
+
+ /*!
+ * Sets the copyright to \a s.
+ */
+ virtual void setCopyright(const String &s);
+
+ /*!
+ * Sets the genre to \a s.
+ */
+ virtual void setGenre(const String &s);
+
+ /*!
+ * Sets the year to \a i. If \a s is 0 then this value will be cleared.
+ */
+ virtual void setYear(uint i);
+
+ /*!
+ * Sets the track to \a i. If \a s is 0 then this value will be cleared.
+ */
+ virtual void setTrack(uint i);
+
+ /*!
+ * Returns true if the tag does not contain any data. This should be
+ * reimplemented in subclasses that provide more than the basic tagging
+ * abilities in this class.
+ */
+ virtual bool isEmpty() const;
+
+ /*!
+ * Returns a reference to the item list map. This is an AttributeListMap of
+ * all of the items in the tag.
+ *
+ * This is the most powerfull structure for accessing the items of the tag.
+ */
+ AttributeListMap &attributeListMap();
+
+ /*!
+ * Removes the \a key attribute from the tag
+ */
+ void removeItem(const String &name);
+
+ /*!
+ * Sets the \a key attribute to the value of \a attribute. If an attribute
+ * with the \a key is already present, it will be replaced.
+ */
+ void setAttribute(const String &name, const Attribute &attribute);
+
+ /*!
+ * Sets the \a key attribute to the value of \a attribute. If an attribute
+ * with the \a key is already present, it will be added to the list.
+ */
+ void addAttribute(const String &name, const Attribute &attribute);
+
+ private:
+
+ class TagPrivate;
+ TagPrivate *d;
+ };
+ }
+}
+#endif
Index: amarok/src/metadata/asf/asfproperties.h
===================================================================
--- amarok/src/metadata/asf/asfproperties.h (revision 0)
+++ amarok/src/metadata/asf/asfproperties.h (revision 743005)
@@ -0,0 +1,69 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#ifndef TAGLIB_ASFPROPERTIES_H
+#define TAGLIB_ASFPROPERTIES_H
+
+#include <audioproperties.h>
+#include <tstring.h>
+
+namespace TagLib {
+
+ namespace ASF {
+
+ //! An implementation of ASF audio properties
+ class Properties : public AudioProperties
+ {
+ public:
+
+ /*!
+ * Create an instance of ASF::Properties.
+ */
+ Properties();
+
+ /*!
+ * Destroys this ASF::Properties instance.
+ */
+ virtual ~Properties();
+
+ // Reimplementations.
+ virtual int length() const;
+ virtual int bitrate() const;
+ virtual int sampleRate() const;
+ virtual int channels() const;
+
+#ifndef DO_NOT_DOCUMENT
+ void setLength(int value);
+ void setBitrate(int value);
+ void setSampleRate(int value);
+ void setChannels(int value);
+#endif
+
+ private:
+ class PropertiesPrivate;
+ PropertiesPrivate *d;
+ };
+
+ }
+
+}
+
+#endif
Property changes on: amarok/src/metadata/asf/asfproperties.h
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/asf/asfattribute.cpp
===================================================================
--- amarok/src/metadata/asf/asfattribute.cpp (revision 0)
+++ amarok/src/metadata/asf/asfattribute.cpp (revision 743005)
@@ -0,0 +1,304 @@
+/**************************************************************************
+ copyright : (C) 2005-2007 by Lukáš Lalinský
+ email : lalinsky@gmail.com
+ **************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+ * USA *
+ ***************************************************************************/
+
+#include <taglib.h>
+#include "asfattribute.h"
+#include "asffile.h"
+
+using namespace TagLib;
+
+class ASF::Attribute::AttributePrivate : public RefCounter
+{
+public:
+ AttributePrivate()
+ : stream(0),
+ language(0) {}
+ AttributeTypes type;
+ String stringValue;
+ ByteVector byteVectorValue;
+ union {
+ unsigned int intValue;
+ unsigned short shortValue;
+ unsigned long long longLongValue;
+ bool boolValue;
+ };
+ int stream;
+ int language;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// public members
+////////////////////////////////////////////////////////////////////////////////
+
+ASF::Attribute::Attribute()
+{
+ d = new AttributePrivate;
+ d->type = UnicodeType;
+}
+
+ASF::Attribute::Attribute(const ASF::Attribute &other)
+ : d(other.d)
+{
+ d->ref();
+}
+
+ASF::Attribute &
+ASF::Attribute::operator=(const ASF::Attribute &other)
+{
+ if(d->deref())
+ delete d;
+ d = other.d;
+ d->ref();
+ return *this;
+}
+
+ASF::Attribute::~Attribute()
+{
+ if(d->deref())
+ delete d;
+}
+
+ASF::Attribute::Attribute(const String &value)
+{
+ d = new AttributePrivate;
+ d->type = UnicodeType;
+ d->stringValue = value;
+}
+
+ASF::Attribute::Attribute(const ByteVector &value)
+{
+ d = new AttributePrivate;
+ d->type = BytesType;
+ d->byteVectorValue = value;
+}
+
+ASF::Attribute::Attribute(unsigned int value)
+{
+ d = new AttributePrivate;
+ d->type = DWordType;
+ d->intValue = value;
+}
+
+ASF::Attribute::Attribute(unsigned long long value)
+{
+ d = new AttributePrivate;
+ d->type = QWordType;
+ d->longLongValue = value;
+}
+
+ASF::Attribute::Attribute(unsigned short value)
+{
+ d = new AttributePrivate;
+ d->type = WordType;
+ d->shortValue = value;
+}
+
+ASF::Attribute::Attribute(bool value)
+{
+ d = new AttributePrivate;
+ d->type = BoolType;
+ d->boolValue = value;
+}
+
+ASF::Attribute::AttributeTypes
+ASF::Attribute::type() const
+{
+ return d->type;
+}
+
+String
+ASF::Attribute::toString() const
+{
+ return d->stringValue;
+}
+
+ByteVector
+ASF::Attribute::toByteVector() const
+{
+ return d->byteVectorValue;
+}
+
+unsigned short
+ASF::Attribute::toBool() const
+{
+ return d->shortValue;
+}
+
+unsigned short
+ASF::Attribute::toUShort() const
+{
+ return d->shortValue;
+}
+
+unsigned int
+ASF::Attribute::toUInt() const
+{
+ return d->intValue;
+}
+
+unsigned long long
+ASF::Attribute::toULongLong() const
+{
+ return d->longLongValue;
+}
+
+String
+ASF::Attribute::parse(ASF::File &f, int kind)
+{
+ int size, nameLength;
+ String name;
+
+ // extended content descriptor
+ if(kind == 0) {
+ nameLength = f.readWORD();
+ name = f.readString(nameLength);
+ d->type = ASF::Attribute::AttributeTypes(f.readWORD());
+ size = f.readWORD();
+ }
+ // metadata & metadata library
+ else {
+ int temp = f.readWORD();
+ // metadata library
+ if(kind == 2) {
+ d->language = temp;
+ }
+ d->stream = f.readWORD();
+ nameLength = f.readWORD();
+ d->type = ASF::Attribute::AttributeTypes(f.readWORD());
+ size = f.readDWORD();
+ name = f.readString(nameLength);
+ }
+
+ switch(d->type) {
+ case WordType:
+ d->shortValue = f.readWORD();
+ break;
+
+ case BoolType:
+ if(kind == 0) {
+ d->boolValue = f.readDWORD() == 1;
+ }
+ else {
+ d->boolValue = f.readWORD() == 1;
+ }
+ break;
+
+ case DWordType:
+ d->intValue = f.readDWORD();
+ break;
+
+ case QWordType:
+ d->longLongValue = f.readQWORD();
+ break;
+
+ case UnicodeType:
+ d->stringValue = f.readString(size);
+ break;
+
+ case BytesType:
+ case GuidType:
+ d->byteVectorValue = f.readBlock(size);
+ break;
+ }
+
+ return name;
+}
+
+ByteVector
+ASF::Attribute::render(const String &name, int kind) const
+{
+ ByteVector data;
+
+ switch (d->type) {
+ case WordType:
+ data.append(ByteVector::fromShort(d->shortValue, false));
+ break;
+
+ case BoolType:
+ if(kind == 0) {
+ data.append(ByteVector::fromUInt(d->boolValue ? 1 : 0, false));
+ }
+ else {
+ data.append(ByteVector::fromShort(d->boolValue ? 1 : 0, false));
+ }
+ break;
+
+ case DWordType:
+ data.append(ByteVector::fromUInt(d->intValue, false));
+ break;
+
+ case QWordType:
+ data.append(ByteVector::fromLongLong(d->longLongValue, false));
+ break;
+
+ case UnicodeType:
+ data.append(File::renderString(d->stringValue));
+ break;
+
+ case BytesType:
+ case GuidType:
+ data.append(d->byteVectorValue);
+ break;
+ }
+
+ if(kind == 0) {
+ data = File::renderString(name, true) +
+ ByteVector::fromShort((int)d->type, false) +
+ ByteVector::fromShort(data.size(), false) +
+ data;
+ }
+ else {
+ ByteVector nameData = File::renderString(name);
+ data = ByteVector::fromShort(kind == 2 ? d->language : 0, false) +
+ ByteVector::fromShort(d->stream, false) +
+ ByteVector::fromShort(nameData.size(), false) +
+ ByteVector::fromShort((int)d->type, false) +
+ ByteVector::fromUInt(data.size(), false) +
+ nameData +
+ data;
+ }
+
+ return data;
+}
+
+int
+ASF::Attribute::language() const
+{
+ return d->language;
+}
+
+void
+ASF::Attribute::setLanguage(int value)
+{
+ d->language = value;
+}
+
+int
+ASF::Attribute::stream() const
+{
+ return d->stream;
+}
+
+void
+ASF::Attribute::setStream(int value)
+{
+ d->stream = value;
+}
Property changes on: amarok/src/metadata/asf/asfattribute.cpp
___________________________________________________________________
Name: svn:eol-style
+ native
Index: amarok/src/metadata/mp4/mp4file.cpp
===================================================================
--- amarok/src/metadata/mp4/mp4file.cpp (revision 705231)
+++ amarok/src/metadata/mp4/mp4file.cpp (working copy)
@@ -156,10 +156,7 @@
}
#endif
- if(!MP4Close(handle))
- {
- fprintf(stderr, "close failed\n");
- }
+ MP4Close(handle);
mp4file = MP4Read(name());
if(mp4file == MP4_INVALID_FILE_HANDLE)
Index: amarok/src/metadata/wma/taglib_wmafiletyperesolver.h
===================================================================
--- amarok/src/metadata/wma/taglib_wmafiletyperesolver.h (revision 705231)
+++ amarok/src/metadata/wma/taglib_wmafiletyperesolver.h (working copy)
@@ -1,39 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Martin Aumueller
- email : aumuell@reserv.at
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-// (c) 2005 Martin Aumueller <aumuell@reserv.at>
-// See COPYING file for licensing information
-
-#ifndef TAGLIB_WMAFILETYPERESOLVER_H
-#define TAGLIB_WMAFILETYPERESOLVER_H
-
-#include <taglib/tfile.h>
-#include <taglib/fileref.h>
-
-
-class WMAFileTypeResolver : public TagLib::FileRef::FileTypeResolver
-{
- TagLib::File *createFile(const char *fileName,
- bool readAudioProperties,
- TagLib::AudioProperties::ReadStyle audioPropertiesStyle) const;
-};
-
-#endif
Index: amarok/src/metadata/wma/wmatag.cpp
===================================================================
--- amarok/src/metadata/wma/wmatag.cpp (revision 705231)
+++ amarok/src/metadata/wma/wmatag.cpp (working copy)
@@ -1,210 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#include <wmatag.h>
-
-using namespace TagLib;
-
-class WMA::Tag::TagPrivate
-{
-public:
- String title;
- String artist;
- String copyright;
- String comment;
- String rating;
- AttributeMap attributeMap;
-};
-
-WMA::Tag::Tag()
-: TagLib::Tag()
-{
- d = new TagPrivate;
-}
-
-WMA::Tag::~Tag()
-{
- if(d)
- delete d;
-}
-
-String
-WMA::Tag::title() const
-{
- return d->title;
-}
-
-String
-WMA::Tag::artist() const
-{
- return d->artist;
-}
-
-String
-WMA::Tag::album() const
-{
- if(d->attributeMap.contains("WM/AlbumTitle"))
- return d->attributeMap["WM/AlbumTitle"].toString();
- return String::null;
-}
-
-String
-WMA::Tag::copyright() const
-{
- return d->copyright;
-}
-
-String
-WMA::Tag::comment() const
-{
- return d->comment;
-}
-
-String
-WMA::Tag::rating() const
-{
- return d->rating;
-}
-
-unsigned int
-WMA::Tag::year() const
-{
- if(d->attributeMap.contains("WM/Year"))
- return d->attributeMap["WM/Year"].toInt();
- return 0;
-}
-
-unsigned int
-WMA::Tag::track() const
-{
- if(d->attributeMap.contains("WM/TrackNumber"))
- return d->attributeMap["WM/TrackNumber"].toInt();
- if(d->attributeMap.contains("WM/Track"))
- return d->attributeMap["WM/Track"].toInt();
- return 0;
-}
-
-String
-WMA::Tag::genre() const
-{
- if(d->attributeMap.contains("WM/Genre"))
- return d->attributeMap["WM/Genre"].toString();
- return String::null;
-}
-
-void
-WMA::Tag::setTitle(const String &value)
-{
- d->title = value;
-}
-
-void
-WMA::Tag::setArtist(const String &value)
-{
- d->artist = value;
-}
-
-void
-WMA::Tag::setCopyright(const String &value)
-{
- d->copyright = value;
-}
-
-void
-WMA::Tag::setComment(const String &value)
-{
- d->comment = value;
-}
-
-void
-WMA::Tag::setRating(const String &value)
-{
- d->rating = value;
-}
-
-void
-WMA::Tag::setAlbum(const String &value)
-{
- setAttribute("WM/AlbumTitle", value);
-}
-
-void
-WMA::Tag::setGenre(const String &value)
-{
- setAttribute("WM/Genre", value);
-}
-
-void
-WMA::Tag::setYear(uint value)
-{
- setAttribute("WM/Year", String::number(value));
-}
-
-void
-WMA::Tag::setTrack(uint value)
-{
- setAttribute("WM/TrackNumber", String::number(value));
-}
-
-const WMA::AttributeMap& WMA::Tag::attributeMap() const
-{
- return d->attributeMap;
-}
-
-void WMA::Tag::removeItem(const ByteVector &key)
-{
- AttributeMap::Iterator it = d->attributeMap.find(key);
- if(it != d->attributeMap.end())
- d->attributeMap.erase(it);
-}
-
-void WMA::Tag::setAttribute(const ByteVector &key, const String &value)
-{
- setAttribute(key, WMA::Attribute(key, value));
-}
-
-void WMA::Tag::setAttribute(const ByteVector &key, const Attribute &attribute)
-{
- removeItem(key);
- d->attributeMap.insert(key, attribute);
-}
-
-bool WMA::Tag::isEmpty() const {
- return TagLib::Tag::isEmpty() &&
- copyright().isEmpty() &&
- rating().isEmpty() &&
- d->attributeMap.isEmpty();
-}
-
-void WMA::Tag::duplicate(const Tag *source, Tag *target, bool overwrite) {
- TagLib::Tag::duplicate(source, target, overwrite);
- if(overwrite) {
- target->setCopyright(source->copyright());
- target->setRating(source->rating());
- }
- else {
- if (target->copyright().isEmpty())
- target->setCopyright(source->copyright());
- if (target->rating().isEmpty())
- target->setRating(source->rating());
- }
-}
-
Index: amarok/src/metadata/wma/wmaproperties.cpp
===================================================================
--- amarok/src/metadata/wma/wmaproperties.cpp (revision 705231)
+++ amarok/src/metadata/wma/wmaproperties.cpp (working copy)
@@ -1,83 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#include <tstring.h>
-#include <wmaproperties.h>
-
-using namespace TagLib;
-
-class WMA::Properties::PropertiesPrivate
-{
-public:
- PropertiesPrivate(): length(0), bitrate(0), sampleRate(0), channels(0) {}
- int length;
- int bitrate;
- int sampleRate;
- int channels;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// public members
-////////////////////////////////////////////////////////////////////////////////
-
-WMA::Properties::Properties() : AudioProperties(AudioProperties::Average)
-{
- d = new PropertiesPrivate;
-}
-
-WMA::Properties::~Properties()
-{
- if(d)
- delete d;
-}
-
-int WMA::Properties::length() const
-{
- return d->length;
-}
-
-int WMA::Properties::bitrate() const
-{
- return d->bitrate;
-}
-
-int WMA::Properties::sampleRate() const
-{
- return d->sampleRate;
-}
-
-int WMA::Properties::channels() const
-{
- return d->channels;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// private members
-////////////////////////////////////////////////////////////////////////////////
-
-void WMA::Properties::set(int length, int bitrate, int sampleRate, int channels)
-{
- d->length = length;
- d->bitrate = bitrate;
- d->sampleRate = sampleRate;
- d->channels = channels;
-}
-
Index: amarok/src/metadata/wma/wmafile.cpp
===================================================================
--- amarok/src/metadata/wma/wmafile.cpp (revision 705231)
+++ amarok/src/metadata/wma/wmafile.cpp (working copy)
@@ -1,388 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#include <tstring.h>
-#include <wmafile.h>
-#include <wmatag.h>
-#include <wmaproperties.h>
-
-#include <string.h>
-
-using namespace TagLib;
-
-class WMA::File::FilePrivate
-{
-public:
- FilePrivate(): size(0), offset1(0), offset2(0), size1(0), size2(0),
- numObjects(0), tag(0), properties(0) {}
- unsigned long long size;
- unsigned long offset1, offset2, size1, size2, numObjects;
- WMA::Tag *tag;
- WMA::Properties *properties;
-};
-
-// GUIDs
-
-struct WMA::GUID
-{
- WMA::DWORD v1;
- WMA::WORD v2;
- WMA::WORD v3;
- WMA::BYTE v4[8];
- bool operator==(const GUID &g) const { return memcmp(this, &g, sizeof(WMA::GUID)) == 0; }
- bool operator!=(const GUID &g) const { return memcmp(this, &g, sizeof(WMA::GUID)) != 0; }
- static GUID header;
- static GUID fileProperties;
- static GUID streamProperties;
- static GUID contentDescription;
- static GUID extendedContentDescription;
- static GUID audioMedia;
-};
-
-WMA::GUID WMA::GUID::header = {
- 0x75B22630, 0x668E, 0x11CF, { 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C }
-};
-
-WMA::GUID WMA::GUID::fileProperties = {
- 0x8CABDCA1, 0xA947, 0x11CF, { 0x8E, 0xE4, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 },
-};
-
-WMA::GUID WMA::GUID::streamProperties = {
- 0xB7DC0791, 0xA9B7, 0x11CF, { 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 },
-};
-
-WMA::GUID WMA::GUID::contentDescription = {
- 0x75b22633, 0x668e, 0x11cf, { 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c },
-};
-
-WMA::GUID WMA::GUID::extendedContentDescription = {
- 0xD2D0A440, 0xE307, 0x11D2, { 0x97, 0xF0, 0x00, 0xA0, 0xC9, 0x5E, 0xA8, 0x50 },
-};
-
-WMA::GUID WMA::GUID::audioMedia = {
- 0xF8699E40, 0x5B4D, 0x11CF, { 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B },
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// public members
-////////////////////////////////////////////////////////////////////////////////
-
-WMA::File::File(const char *file, bool readProperties, Properties::ReadStyle propertiesStyle)
- : TagLib::File(file)
-{
- d = new FilePrivate;
- read(readProperties, propertiesStyle);
-}
-
-WMA::File::~File()
-{
- if(d) {
- if (d->tag)
- delete d->tag;
- if (d->properties)
- delete d->properties;
- delete d;
- }
-}
-
-TagLib::Tag *WMA::File::tag() const
-{
- return d->tag;
-}
-
-WMA::Tag *WMA::File::WMATag() const
-{
- return d->tag;
-}
-
-WMA::Properties *WMA::File::audioProperties() const
-{
- return d->properties;
-}
-
-void WMA::File::read(bool readProperties, Properties::ReadStyle /* propertiesStyle */)
-{
- WMA::GUID guid;
-
- readGUID(guid);
- if(guid != GUID::header) {
- return;
- }
-
- int length = 0;
- int bitrate = 0;
- int sampleRate = 0;
- int channels = 0;
-
- d->tag = new WMA::Tag();
- if(!d->tag)
- return;
-
- d->size = readQWORD();
- d->numObjects = readDWORD();
- seek(2, Current);
-
- for(int i = 0; i < (int)d->numObjects; i++) {
-
- readGUID(guid);
- long objectSize = (long)readQWORD();
-
- if(readProperties && guid == GUID::fileProperties) {
-
- seek(16+8+8+8, Current);
- length = (int)(readQWORD() / 10000000L);
- seek(8+8+4+4+4+4, Current);
-
- }
-
- else if(readProperties && guid == GUID::streamProperties) {
-
- long pos = tell();
-
- readGUID(guid);
- if(guid != GUID::audioMedia) {
- return;
- }
-
- seek(16+8+4+4+2+4+2, Current);
- channels = readWORD();
- sampleRate = readDWORD();
- bitrate = readDWORD() * 8 / 1000;
-
- seek(pos + (long)objectSize - 24);
- }
-
- else if(guid == GUID::extendedContentDescription) {
-
- d->offset2 = tell() - 16 - 8;
- d->size2 = (long)objectSize;
-
- int numDescriptors = readWORD();
-
- for(int j = 0; j < numDescriptors; j++) {
- WMA::Attribute attr(*this);
- d->tag->setAttribute(attr.name().toCString(false), attr);
- }
-
- }
-
- else if(guid == GUID::contentDescription) {
-
- d->offset1 = tell() - 16 - 8;
- d->size1 = (long)objectSize;
-
- int titleLength = readWORD();
- int artistLength = readWORD();
- int copyrightLength = readWORD();
- int commentLength = readWORD();
- int ratingLength = readWORD();
-
- String value;
-
- readString(titleLength, value);
- d->tag->setTitle(value);
-
- readString(artistLength, value);
- d->tag->setArtist(value);
-
- readString(copyrightLength, value);
- d->tag->setCopyright(value);
-
- readString(commentLength, value);
- d->tag->setComment(value);
-
- readString(ratingLength, value);
- d->tag->setRating(value);
- }
-
- else {
- seek((long)objectSize - 24, Current);
- }
-
- }
-
- if(readProperties) {
- d->properties = new WMA::Properties();
- if(d->properties)
- d->properties->set(length, bitrate, sampleRate, channels);
- }
-
-}
-
-bool WMA::File::save()
-{
- if(readOnly()) {
- return false;
- }
-
- if(d->offset1 == 0) {
- d->offset1 = 16 + 8 + 4 + 2;
- d->numObjects++;
- }
-
- if(d->offset2 == 0) {
- d->offset2 = 16 + 8 + 4 + 2;
- d->numObjects++;
- }
-
- ByteVector chunk1 = renderContentDescription();
- ByteVector chunk2 = renderExtendedContentDescription();
-
- if(d->offset1 > d->offset2) {
- insert(chunk1, d->offset1, d->size1);
- insert(chunk2, d->offset2, d->size2);
- }
- else {
- insert(chunk2, d->offset2, d->size2);
- insert(chunk1, d->offset1, d->size1);
- }
-
- insert(ByteVector::fromLongLong(d->size +
- (int)(chunk1.size() - d->size1) +
- (int)(chunk2.size() - d->size2), false) +
- ByteVector::fromUInt(d->numObjects, false), 16, 8 + 4);
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// protected members
-////////////////////////////////////////////////////////////////////////////////
-
-int WMA::File::readBYTE()
-{
- ByteVector v = readBlock(1);
- return v[0];
-}
-
-int WMA::File::readWORD()
-{
- ByteVector v = readBlock(2);
- return v.toShort(false);
-}
-
-unsigned int WMA::File::readDWORD()
-{
- ByteVector v = readBlock(4);
- return v.toUInt(false);
-}
-
-long long WMA::File::readQWORD()
-{
- ByteVector v = readBlock(8);
- return v.toLongLong(false);
-}
-
-void WMA::File::readGUID(GUID &g)
-{
- g.v1 = readDWORD();
- g.v2 = readWORD();
- g.v3 = readWORD();
- for(int i = 0; i < 8; i++)
- g.v4[i] = readBYTE();
-}
-
-void WMA::File::readString(int len, String &s)
-{
- ByteVector v = readBlock(len);
- if(len < 2 || v[len-1] != 0 || v[len-2] != 0)
- v.append(ByteVector::fromShort(0));
- s = String(v, String::UTF16LE);
-}
-
-ByteVector WMA::File::renderContentDescription()
-{
- String s;
-
- s = d->tag->title();
- ByteVector v1 = s.data(String::UTF16LE);
- if(s.size()) {
- v1.append((char)0);
- v1.append((char)0);
- }
-
- s = d->tag->artist();
- ByteVector v2 = s.data(String::UTF16LE);
- if(s.size()) {
- v2.append((char)0);
- v2.append((char)0);
- }
-
- s = d->tag->copyright();
- ByteVector v3 = s.data(String::UTF16LE);
- if(s.size()) {
- v3.append((char)0);
- v3.append((char)0);
- }
-
- s = d->tag->comment();
- ByteVector v4 = s.data(String::UTF16LE);
- if(s.size()) {
- v4.append((char)0);
- v4.append((char)0);
- }
-
- s = d->tag->rating();
- ByteVector v5 = s.data(String::UTF16LE);
- if(s.size()) {
- v5.append((char)0);
- v5.append((char)0);
- }
-
- ByteVector data;
-
- data.append(ByteVector::fromShort(v1.size(), false));
- data.append(ByteVector::fromShort(v2.size(), false));
- data.append(ByteVector::fromShort(v3.size(), false));
- data.append(ByteVector::fromShort(v4.size(), false));
- data.append(ByteVector::fromShort(v5.size(), false));
-
- data.append(v1);
- data.append(v2);
- data.append(v3);
- data.append(v4);
- data.append(v5);
-
- data = ByteVector(reinterpret_cast<const char *>(&GUID::contentDescription), sizeof(GUID))
- + ByteVector::fromLongLong(data.size() + 16 + 8, false)
- + data;
-
- return data;
-}
-
-ByteVector WMA::File::renderExtendedContentDescription()
-{
- ByteVector data;
-
- data.append(ByteVector::fromShort(d->tag->attributeMap().size(), false));
-
- WMA::AttributeMap::ConstIterator it = d->tag->attributeMap().begin();
- for(; it != d->tag->attributeMap().end(); it++)
- data.append(it->second.render());
-
- data = ByteVector(reinterpret_cast<const char *>(&GUID::extendedContentDescription), sizeof(GUID))
- + ByteVector::fromLongLong(data.size() + 16 + 8, false)
- + data;
-
- return data;
-}
-
-
Index: amarok/src/metadata/wma/wmatag.h
===================================================================
--- amarok/src/metadata/wma/wmatag.h (revision 705231)
+++ amarok/src/metadata/wma/wmatag.h (working copy)
@@ -1,188 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#ifndef TAGLIB_WMATAG_H
-#define TAGLIB_WMATAG_H
-
-#include <tmap.h>
-#include <tag.h>
-#include "wmafile.h"
-#include "wmaattribute.h"
-
-namespace TagLib {
-
- namespace WMA {
-
- typedef Map<const ByteVector, Attribute> AttributeMap;
-
- class Tag : public TagLib::Tag {
-
- friend class File;
-
- public:
-
- Tag();
-
- virtual ~Tag();
-
- /*!
- * Returns the track name.
- */
- virtual String title() const;
-
- /*!
- * Returns the artist name.
- */
- virtual String artist() const;
-
- /*!
- * Returns the album name; if no album name is present in the tag
- * String::null will be returned.
- */
- virtual String album() const;
-
- /*!
- * Returns the track comment.
- */
- virtual String comment() const;
-
- /*!
- * Returns the genre name; if no genre is present in the tag String::null
- * will be returned.
- */
- virtual String genre() const;
-
- /*!
- * Returns the rating.
- */
- virtual String rating() const;
-
- /*!
- * Returns the genre name; if no genre is present in the tag String::null
- * will be returned.
- */
- virtual String copyright() const;
-
- /*!
- * Returns the year; if there is no year set, this will return 0.
- */
- virtual uint year() const;
-
- /*!
- * Returns the track number; if there is no track number set, this will
- * return 0.
- */
- virtual uint track() const;
-
- /*!
- * Sets the title to \a s.
- */
- virtual void setTitle(const String &s);
-
- /*!
- * Sets the artist to \a s.
- */
- virtual void setArtist(const String &s);
-
- /*!
- * Sets the album to \a s. If \a s is String::null then this value will be
- * cleared.
- */
- virtual void setAlbum(const String &s);
-
- /*!
- * Sets the comment to \a s.
- */
- virtual void setComment(const String &s);
-
- /*!
- * Sets the rating to \a s.
- */
- virtual void setRating(const String &s);
-
- /*!
- * Sets the copyright to \a s.
- */
- virtual void setCopyright(const String &s);
-
- /*!
- * Sets the genre to \a s.
- */
- virtual void setGenre(const String &s);
-
- /*!
- * Sets the year to \a i. If \a s is 0 then this value will be cleared.
- */
- virtual void setYear(uint i);
-
- /*!
- * Sets the track to \a i. If \a s is 0 then this value will be cleared.
- */
- virtual void setTrack(uint i);
-
- /*!
- * Returns true if the tag does not contain any data. This should be
- * reimplemented in subclasses that provide more than the basic tagging
- * abilities in this class.
- */
- virtual bool isEmpty() const;
-
- /*!
- * Copies the generic data from one tag to another.
- *
- * If \a overwrite is true then the values will be unconditionally copied.
- * If false only empty values will be overwritten.
- */
- static void duplicate(const Tag *source, Tag *target, bool overwrite = true);
-
- /*!
- * Returns a reference to the item list map. This is an ItemListMap of
- * all of the items in the tag.
- *
- * This is the most powerfull structure for accessing the items of the tag.
- *
- * \warning You should not modify this data structure directly, instead
- * use setItem() and removeItem().
- */
- const AttributeMap &attributeMap() const;
-
- /*!
- * Removes the \a key attribute from the tag
- */
- void removeItem(const ByteVector &key);
-
- void setAttribute(const ByteVector &key, const String &value);
-
- /*!
- * Sets the \a key attribute to the value of \a attribute. If an attribute
- * with the \a key is already present, it will be replaced.
- */
- void setAttribute(const ByteVector &key, const Attribute &attribute);
-
- private:
-
- class TagPrivate;
- TagPrivate *d;
-
- };
- }
-}
-#endif
Index: amarok/src/metadata/wma/wmaproperties.h
===================================================================
--- amarok/src/metadata/wma/wmaproperties.h (revision 705231)
+++ amarok/src/metadata/wma/wmaproperties.h (working copy)
@@ -1,71 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#ifndef TAGLIB_WMAPROPERTIES_H
-#define TAGLIB_WMAPROPERTIES_H
-
-#include <audioproperties.h>
-#include <tstring.h>
-
-namespace TagLib {
-
- namespace WMA {
-
- class File;
-
- class Properties : public AudioProperties
- {
-
- friend class WMA::File;
-
- public:
-
- /*!
- * Create an instance of WMA::Properties.
- */
- Properties();
-
- /*!
- * Destroys this WMA::Properties instance.
- */
- virtual ~Properties();
-
- // Reimplementations.
-
- virtual int length() const;
- virtual int bitrate() const;
- virtual int sampleRate() const;
- virtual int channels() const;
-
- private:
-
- class PropertiesPrivate;
- PropertiesPrivate *d;
-
- void set(int length, int bitrate, int sampleRate, int channels);
-
- };
-
- }
-
-}
-
-#endif
Index: amarok/src/metadata/wma/Makefile.am
===================================================================
--- amarok/src/metadata/wma/Makefile.am (revision 705231)
+++ amarok/src/metadata/wma/Makefile.am (working copy)
@@ -1,20 +0,0 @@
-SUBDIRS =
-
-INCLUDES = $(all_includes) $(taglib_includes)
-METASOURCES = AUTO
-libtagwma_la_LDFLAGS = $(all_libraries)
-noinst_LTLIBRARIES = libtagwma.la
-
-libtagwma_la_SOURCES = \
- wmaattribute.cpp \
- wmaproperties.cpp \
- wmatag.cpp \
- wmafile.cpp \
- taglib_wmafiletyperesolver.cpp
-
-noinst_HEADERS = \
- wmaattribute.h \
- wmaproperties.h \
- wmatag.h \
- wmafile.h \
- taglib_wmafiletyperesolver.h
Index: amarok/src/metadata/wma/wmaattribute.cpp
===================================================================
--- amarok/src/metadata/wma/wmaattribute.cpp (revision 705231)
+++ amarok/src/metadata/wma/wmaattribute.cpp (working copy)
@@ -1,231 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#include <wmaattribute.h>
-#include <wmafile.h>
-
-using namespace TagLib;
-
-class WMA::Attribute::AttributePrivate
-{
-public:
- AttributeTypes type;
- String name;
- String value_string;
- ByteVector value_bytes;
- union {
- int value_int;
- long long value_longlong;
- };
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// public members
-////////////////////////////////////////////////////////////////////////////////
-
-WMA::Attribute::Attribute()
-{
- d = new AttributePrivate;
- d->name = String::null;
- d->type = UnicodeType;
-}
-
-WMA::Attribute::Attribute(WMA::File &file)
-{
- d = new AttributePrivate;
- parse(file);
-}
-
-WMA::Attribute::Attribute(const String &name, const String &value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = UnicodeType;
- d->value_string = value;
-}
-
-WMA::Attribute::Attribute(const String &name, const ByteVector &value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = BytesType;
- d->value_bytes = value;
-}
-
-WMA::Attribute::Attribute(const String &name, unsigned int value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = DWordType;
- d->value_int = value;
-}
-
-WMA::Attribute::Attribute(const String &name, unsigned long long value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = QWordType;
- d->value_longlong = value;
-}
-
-WMA::Attribute::Attribute(const String &name, unsigned short value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = WordType;
- d->value_int = value;
-}
-
-WMA::Attribute::Attribute(const String &name, bool value)
-{
- d = new AttributePrivate;
- d->name = name;
- d->type = BoolType;
- d->value_int = value;
-}
-
-WMA::Attribute::Attribute(const Attribute &attr)
-{
- d = new AttributePrivate(*attr.d);
-}
-
-WMA::Attribute::~Attribute()
-{
- if(d)
- delete d;
-}
-
-String WMA::Attribute::name() const
-{
- return d->name;
-}
-
-WMA::Attribute::AttributeTypes WMA::Attribute::type() const
-{
- return d->type;
-}
-
-String WMA::Attribute::toString() const
-{
- return d->value_string;
-}
-
-ByteVector WMA::Attribute::toByteVector() const
-{
- return d->value_bytes;
-}
-
-int WMA::Attribute::toInt() const
-{
- if (d->type == UnicodeType)
- return d->value_string.toInt();
- else
- return d->value_int;
-}
-
-long long WMA::Attribute::toLongLong() const
-{
- return d->value_longlong;
-}
-
-bool WMA::Attribute::parse(WMA::File &f)
-{
- int size = f.readWORD();
- f.readString(size, d->name);
-
- d->type = (WMA::Attribute::AttributeTypes)f.readWORD();
- size = f.readWORD();
-
- switch(d->type) {
- case WordType:
- d->value_int = f.readWORD();
- break;
-
- case BoolType:
- case DWordType:
- d->value_int = f.readDWORD();
- break;
-
- case QWordType:
- d->value_longlong = f.readQWORD();
- break;
-
- case UnicodeType:
- f.readString(size, d->value_string);
- break;
-
- case BytesType:
- d->value_bytes = f.readBlock(size);
- break;
-
- default:
- return false;
- }
-
- return true;
-}
-
-ByteVector WMA::Attribute::render() const
-{
- ByteVector data;
-
- ByteVector v = d->name.data(String::UTF16LE);
- data.append(ByteVector::fromShort(v.size() + 2, false));
- data.append(v + ByteVector::fromShort(0, false));
-
- data.append(ByteVector::fromShort((int)d->type, false));
-
- switch (d->type) {
- case WordType:
- data.append(ByteVector::fromShort(2, false));
- data.append(ByteVector::fromShort(d->value_int, false));
- break;
-
- case BoolType:
- case DWordType:
- data.append(ByteVector::fromShort(4, false));
- data.append(ByteVector::fromUInt(d->value_int, false));
- break;
-
- case QWordType:
- data.append(ByteVector::fromShort(8, false));
- data.append(ByteVector::fromLongLong(d->value_longlong, false));
- break;
-
- case UnicodeType:
- v = d->value_string.data(String::UTF16LE);
- data.append(ByteVector::fromShort(v.size() + 2, false));
- data.append(v + ByteVector::fromShort(0, false));
- break;
-
- case BytesType:
- data.append(ByteVector::fromShort(d->value_bytes.size(), false));
- data.append(d->value_bytes);
- break;
-
- default:
- return ByteVector::null;
- }
-
- return data;
-}
-
-
Index: amarok/src/metadata/wma/wmafile.h
===================================================================
--- amarok/src/metadata/wma/wmafile.h (revision 705231)
+++ amarok/src/metadata/wma/wmafile.h (working copy)
@@ -1,100 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#ifndef TAGLIB_WMAFILE_H
-#define TAGLIB_WMAFILE_H
-
-#include <tfile.h>
-#include <tag.h>
-#include "wmaproperties.h"
-#include "wmatag.h"
-
-namespace TagLib {
-
- namespace WMA {
-
- struct GUID;
-
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- typedef unsigned int DWORD;
- typedef unsigned long long QWORD;
-
- class File : public TagLib::File
- {
-
- friend class Attribute;
-
- public:
-
- File(const char *file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average);
-
- virtual ~File();
-
- /*!
- * Returns the TagLib::Tag for this file.
- */
- virtual TagLib::Tag *tag() const;
-
- /*!
- * Returns the WMA::Tag for this file.
- */
- virtual Tag *WMATag() const;
-
- /*!
- * Returns the WMA::Properties for this file.
- */
- virtual Properties *audioProperties() const;
-
-
- /*!
- * Save the file.
- *
- * This returns true if the save was successful.
- */
- virtual bool save();
-
- protected:
-
- int readBYTE();
- int readWORD();
- unsigned int readDWORD();
- long long readQWORD();
- void readGUID(GUID &g);
- void readString(int len, String &s);
-
- ByteVector renderContentDescription();
- ByteVector renderExtendedContentDescription();
-
- void read(bool readProperties, Properties::ReadStyle propertiesStyle);
-
- private:
-
- class FilePrivate;
- FilePrivate *d;
-
- };
-
- }
-
-}
-
-#endif
Index: amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp
===================================================================
--- amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp (revision 705231)
+++ amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp (working copy)
@@ -1,47 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Martin Aumueller
- email : aumuell@reserv.at
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-// (c) 2005 Martin Aumueller <aumuell@reserv.at>
-// See COPYING file for licensing information
-
-#include "taglib_wmafiletyperesolver.h"
-#include "wmafile.h"
-
-#include <string.h>
-
-TagLib::File *WMAFileTypeResolver::createFile(const char *fileName,
- bool readProperties,
- TagLib::AudioProperties::ReadStyle propertiesStyle) const
-{
- const char *ext = strrchr(fileName, '.');
- if(ext && (!strcasecmp(ext, ".wma") || !strcasecmp(ext, ".asf")))
- {
- TagLib::WMA::File *f = new TagLib::WMA::File(fileName, readProperties, propertiesStyle);
- if(f->isValid())
- return f;
- else
- {
- delete f;
- }
- }
-
- return 0;
-}
Index: amarok/src/metadata/wma/wmaattribute.h
===================================================================
--- amarok/src/metadata/wma/wmaattribute.h (revision 705231)
+++ amarok/src/metadata/wma/wmaattribute.h (working copy)
@@ -1,125 +0,0 @@
-/***************************************************************************
- copyright : (C) 2005 by Lukas Lalinsky
- email : lalinsky@gmail.com
- ***************************************************************************/
-
-/***************************************************************************
- * This library is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License version *
- * 2.1 as published by the Free Software Foundation. *
- * *
- * This library is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this library; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
- * MA 02110-1301 USA *
- ***************************************************************************/
-
-#ifndef TAGLIB_WMAATTRIBUTE_H
-#define TAGLIB_WMAATTRIBUTE_H
-
-#include <tstring.h>
-#include <tbytevector.h>
-
-namespace TagLib {
-
- namespace WMA {
-
- class File;
-
- class Attribute {
-
- friend class File;
-
- public:
-
- /*!
- * Enum of types an Attribute can have.
- */
- enum AttributeTypes {
- UnicodeType = 0,
- BytesType = 1,
- BoolType = 2,
- DWordType = 3,
- QWordType = 4,
- WordType = 5
- };
-
- /*!
- * Constructs an empty attribute.
- */
- Attribute();
-
- /*!
- * Constructs an attribute with \a key and \a value.
- */
- Attribute(const String &key, const String &value);
- Attribute(const String &key, const ByteVector &value);
- Attribute(const String &key, unsigned int value);
- Attribute(const String &key, unsigned long long value);
- Attribute(const String &key, unsigned short value);
- Attribute(const String &key, bool value);
-
- /*!
- * Construct an attribute as a copy of \a item.
- */
- Attribute(const Attribute &item);
-
- /*!
- * Destroys the attribute.
- */
- virtual ~Attribute();
-
- /*!
- * Returns the name.
- */
- String name() const;
-
- /*!
- * Returns type of the value.
- */
- AttributeTypes type() const;
-
- /*!
- * Returns the value as a String.
- */
- String toString() const;
-
- /*!
- * Returns the value as a ByteVector.
- */
- ByteVector toByteVector() const;
-
- /*!
- * Returns the value as an integer.
- */
- int toInt() const;
-
- /*!
- * Returns the value as a long long.
- */
- long long toLongLong() const;
-
- ByteVector render() const;
-
- protected:
-
- Attribute(WMA::File &file);
- bool parse(WMA::File &file);
-
- private:
-
- class AttributePrivate;
- AttributePrivate *d;
-
- };
-
- }
-
-}
-
-#endif
Property changes on: amarok/src/metadata/wma
___________________________________________________________________
Name: svn:ignore
- .libs
.deps
Makefile
Makefile.in
Index: amarok/src/metadata/tplugins.cpp
===================================================================
--- amarok/src/metadata/tplugins.cpp (revision 705231)
+++ amarok/src/metadata/tplugins.cpp (working copy)
@@ -42,8 +42,8 @@
#include "wavpack/wvfile.h"
#include "speex/taglib_speexfiletyperesolver.h"
#include "speex/speexfile.h"
-#include "wma/taglib_wmafiletyperesolver.h"
-#include "wma/wmafile.h"
+#include "asf/taglib_asffiletyperesolver.h"
+#include "asf/asffile.h"
#include "rmff/taglib_realmediafiletyperesolver.h"
#include "rmff/taglib_realmediafile.h"
#include "audible/taglib_audiblefiletyperesolver.h"
@@ -95,7 +95,7 @@
|| mimetype->is( "video/x-msvideo" )
|| mimetype->is( "video/x-ms-wmv" ) )
{
- return new TagLib::WMA::File(fileName, readProperties, propertiesStyle);
+ return new TagLib::ASF::File(fileName, readProperties, propertiesStyle);
}
else if( mimetype->is( "audio/vnd.rn-realaudio" )
|| mimetype->is( "audio/x-pn-realaudio" )
@@ -130,7 +130,7 @@
{
//TagLib::FileRef::addFileTypeResolver(new MimeTypeFileTypeResolver);
TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver);
- TagLib::FileRef::addFileTypeResolver(new WMAFileTypeResolver);
+ TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver);
TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver);
TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver);
TagLib::FileRef::addFileTypeResolver(new AACFileTypeResolver);
Index: amarok/src/metadata/Makefile.am
===================================================================
--- amarok/src/metadata/Makefile.am (revision 705231)
+++ amarok/src/metadata/Makefile.am (working copy)
@@ -6,7 +6,7 @@
MP4_LDADD = m4a/libtagm4a.la
endif
-SUBDIRS = speex wavpack trueaudio wma audible rmff $(MP4_SUBDIR) aac wav
+SUBDIRS = speex wavpack trueaudio asf audible rmff $(MP4_SUBDIR) aac wav
INCLUDES = -I$(top_srcdir)/amarok/src $(all_includes) $(taglib_includes)
@@ -24,7 +24,7 @@
speex/libtagspeex.la \
trueaudio/libtagtrueaudio.la \
wavpack/libtagwavpack.la \
- wma/libtagwma.la \
+ asf/libtagasf.la \
wav/libtagwav.la \
rmff/libtagrealmedia.la \
$(MP4_LDADD) \