]> granicus.if.org Git - taglib/commitdiff
Add support for ID2v2 PCST frames (podcast).
authorUrs Fleisch <ufleisch@users.sourceforge.net>
Mon, 7 Sep 2015 19:00:46 +0000 (21:00 +0200)
committerUrs Fleisch <ufleisch@users.sourceforge.net>
Tue, 8 Sep 2015 18:42:30 +0000 (20:42 +0200)
taglib/CMakeLists.txt
taglib/mpeg/id3v2/frames/podcastframe.cpp [new file with mode: 0644]
taglib/mpeg/id3v2/frames/podcastframe.h [new file with mode: 0644]
taglib/mpeg/id3v2/id3v2framefactory.cpp

index 73c1a2f8a8835ae59e2b3318ea83a2c8b8f3cbce..31e2c49b9ef88325d5f2ab8c46cf0cdb4b8256fc 100644 (file)
@@ -83,6 +83,7 @@ set(tag_HDRS
   mpeg/id3v2/frames/urllinkframe.h
   mpeg/id3v2/frames/chapterframe.h
   mpeg/id3v2/frames/tableofcontentsframe.h
+  mpeg/id3v2/frames/podcastframe.h
   ogg/oggfile.h
   ogg/oggpage.h
   ogg/oggpageheader.h
@@ -177,6 +178,7 @@ set(frames_SRCS
   mpeg/id3v2/frames/urllinkframe.cpp
   mpeg/id3v2/frames/chapterframe.cpp
   mpeg/id3v2/frames/tableofcontentsframe.cpp
+  mpeg/id3v2/frames/podcastframe.cpp
 )
 
 set(ogg_SRCS
diff --git a/taglib/mpeg/id3v2/frames/podcastframe.cpp b/taglib/mpeg/id3v2/frames/podcastframe.cpp
new file mode 100644 (file)
index 0000000..5115a7d
--- /dev/null
@@ -0,0 +1,79 @@
+/***************************************************************************
+    copyright            : (C) 2015 by Urs Fleisch
+    email                : ufleisch@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ *   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                                                       *
+ *                                                                         *
+ *   Alternatively, this file is available under the Mozilla Public        *
+ *   License Version 1.1.  You may obtain a copy of the License at         *
+ *   http://www.mozilla.org/MPL/                                           *
+ ***************************************************************************/
+
+#include "podcastframe.h"
+
+using namespace TagLib;
+using namespace ID3v2;
+
+class PodcastFrame::PodcastFramePrivate
+{
+public:
+  ByteVector fieldData;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// public members
+////////////////////////////////////////////////////////////////////////////////
+
+PodcastFrame::PodcastFrame() : Frame("PCST")
+{
+  d = new PodcastFramePrivate;
+  d->fieldData = ByteVector(4, '\0');
+}
+
+PodcastFrame::~PodcastFrame()
+{
+  delete d;
+}
+
+String PodcastFrame::toString() const
+{
+  return String();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// protected members
+////////////////////////////////////////////////////////////////////////////////
+
+void PodcastFrame::parseFields(const ByteVector &data)
+{
+  d->fieldData = data;
+}
+
+ByteVector PodcastFrame::renderFields() const
+{
+  return d->fieldData;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// private members
+////////////////////////////////////////////////////////////////////////////////
+
+PodcastFrame::PodcastFrame(const ByteVector &data, Header *h) : Frame(h)
+{
+  d = new PodcastFramePrivate;
+  parseFields(fieldData(data));
+}
diff --git a/taglib/mpeg/id3v2/frames/podcastframe.h b/taglib/mpeg/id3v2/frames/podcastframe.h
new file mode 100644 (file)
index 0000000..7bbc213
--- /dev/null
@@ -0,0 +1,80 @@
+/***************************************************************************
+    copyright            : (C) 2015 by Urs Fleisch
+    email                : ufleisch@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ *   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                                                       *
+ *                                                                         *
+ *   Alternatively, this file is available under the Mozilla Public        *
+ *   License Version 1.1.  You may obtain a copy of the License at         *
+ *   http://www.mozilla.org/MPL/                                           *
+ ***************************************************************************/
+
+#ifndef TAGLIB_PODCASTFRAME_H
+#define TAGLIB_PODCASTFRAME_H
+
+#include "id3v2frame.h"
+#include "taglib_export.h"
+
+namespace TagLib {
+
+  namespace ID3v2 {
+
+    //! ID3v2 podcast frame
+    /*!
+     * An implementation of ID3v2 podcast flag, a frame with four zero bytes.
+     */
+    class TAGLIB_EXPORT PodcastFrame : public Frame
+    {
+      friend class FrameFactory;
+
+    public:
+      /*!
+       * Construct a podcast frame.
+       */
+      PodcastFrame();
+
+      /*!
+       * Destroys this PodcastFrame instance.
+       */
+      virtual ~PodcastFrame();
+
+      /*!
+       * Returns a null string.
+       */
+      virtual String toString() const;
+
+    protected:
+      // Reimplementations.
+
+      virtual void parseFields(const ByteVector &data);
+      virtual ByteVector renderFields() const;
+
+    private:
+      /*!
+       * The constructor used by the FrameFactory.
+       */
+      PodcastFrame(const ByteVector &data, Header *h);
+      PodcastFrame(const PodcastFrame &);
+      PodcastFrame &operator=(const PodcastFrame &);
+
+      class PodcastFramePrivate;
+      PodcastFramePrivate *d;
+    };
+
+  }
+}
+#endif
index 3b40ae45751ac672e035ea1d2372aedfa7d5e10a..bf4b0ee835f17f6dff913988fd71beb6c1863a97 100644 (file)
@@ -49,6 +49,7 @@
 #include "frames/eventtimingcodesframe.h"
 #include "frames/chapterframe.h"
 #include "frames/tableofcontentsframe.h"
+#include "frames/podcastframe.h"
 
 using namespace TagLib;
 using namespace ID3v2;
@@ -288,6 +289,11 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader)
   if(frameID == "CTOC")
     return new TableOfContentsFrame(tagHeader, data, header);
 
+  // Apple proprietary PCST (Podcast)
+
+  if(frameID == "PCST")
+    return new PodcastFrame(data, header);
+
   return new UnknownFrame(data, header);
 }