Proper-ish support for multi-reel DCPs.
[libdcp.git] / src / cpl.h
index a0426b96d29a2bddfb7a19772e19c37d25fde740..0005219a8ae98a6c4f32e6f351b2cc87b2f0cbe4 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -1,9 +1,33 @@
+/*
+    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** @file  src/cpl.h
+ *  @brief Classes used to parse a CPL.
+ */
+
 #include <stdint.h>
 #include <boost/shared_ptr.hpp>
 #include "xml.h"
 
 namespace libdcp {
 
+/** CPL MainPicture node */    
 class MainPicture : public XMLNode
 {
 public:
@@ -20,6 +44,7 @@ public:
        Fraction screen_aspect_ratio;
 };
 
+/** CPL MainSound node */      
 class MainSound : public XMLNode
 {
 public:
@@ -34,6 +59,22 @@ public:
        int64_t duration;
 };
 
+/** CPL MainSubtitle node */   
+class MainSubtitle : public XMLNode
+{
+public:
+       MainSubtitle () {}
+       MainSubtitle (xmlpp::Node const * node);
+
+       std::string id;
+       std::string annotation_text;
+       Fraction edit_rate;
+       int64_t intrinsic_duration;
+       int64_t entry_point;
+       int64_t duration;
+};
+
+/** CPL AssetList node */      
 class CPLAssetList : public XMLNode
 {
 public:
@@ -42,18 +83,21 @@ public:
 
        boost::shared_ptr<MainPicture> main_picture;
        boost::shared_ptr<MainSound> main_sound;
+       boost::shared_ptr<MainSubtitle> main_subtitle;
 };
 
-class Reel : public XMLNode
+/** CPL Reel node */   
+class CPLReel : public XMLNode
 {
 public:
-       Reel () {}
-       Reel (xmlpp::Node const * node);
+       CPLReel () {}
+       CPLReel (xmlpp::Node const * node);
 
        std::string id;
        boost::shared_ptr<CPLAssetList> asset_list;
 };
 
+/** CPL ContentVersion node */ 
 class ContentVersion : public XMLNode
 {
 public:
@@ -64,9 +108,11 @@ public:
        std::string label_text;
 };
 
+/** Class to parse a CPL */
 class CPL : public XMLFile
 {
 public:
+       /** Parse a CPL XML file into our member variables */
        CPL (std::string file);
 
        std::string id;
@@ -76,7 +122,7 @@ public:
        std::string content_title_text;
        ContentKind content_kind;
        boost::shared_ptr<ContentVersion> content_version;
-       std::list<boost::shared_ptr<Reel> > reels;
+       std::list<boost::shared_ptr<CPLReel> > reels;
 };
 
 }