Merge.
[dcpomatic.git] / src / lib / playlist.h
index 4295a3e3512da7de78a1444a5194f826e763a89f..76055bea0341c6ac2c831a11c0cf417de91fce5a 100644 (file)
 #ifndef DCPOMATIC_PLAYLIST_H
 #define DCPOMATIC_PLAYLIST_H
 
-#include <list>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "ffmpeg_content.h"
-#include "audio_mapping.h"
 #include "util.h"
+#include "frame_rate_change.h"
+#include <libcxml/cxml.h>
+#include <boost/shared_ptr.hpp>
+#include <boost/signals2.hpp>
+#include <list>
 
-class Content;
-class FFmpegContent;
-class FFmpegDecoder;
-class StillImageMagickContent;
-class StillImageMagickDecoder;
-class SndfileContent;
-class SndfileDecoder;
-class Job;
 class Film;
-class Region;
 
 struct ContentSorter
 {
@@ -54,7 +45,7 @@ public:
        ~Playlist ();
 
        void as_xml (xmlpp::Node *);
-       void set_from_xml (boost::shared_ptr<const Film>, boost::shared_ptr<const cxml::Node>, int, std::list<std::string> &);
+       void set_from_xml (boost::shared_ptr<const Film>, cxml::ConstNodePtr, int, std::list<std::string> &);
 
        void add (boost::shared_ptr<Content>);
        void remove (boost::shared_ptr<Content>);
@@ -62,14 +53,13 @@ public:
        void move_earlier (boost::shared_ptr<Content>);
        void move_later (boost::shared_ptr<Content>);
 
-       bool has_subtitles () const;
-
        ContentList content () const;
 
        std::string video_identifier () const;
 
        DCPTime length () const;
-       
+       boost::optional<DCPTime> start () const;
+
        int best_dcp_frame_rate () const;
        DCPTime video_end () const;
        FrameRateChange active_frame_rate_change (DCPTime, int dcp_frame_rate) const;
@@ -79,10 +69,14 @@ public:
 
        void repeat (ContentList, int);
 
+       /** Emitted when content has been added to or removed from the playlist */
        mutable boost::signals2::signal<void ()> Changed;
-       /** Third parameter is true if signals are currently being emitted frequently */
+       /** Emitted when something about a piece of our content has changed;
+        *  these emissions include when the position of the content changes.
+        *  Third parameter is true if signals are currently being emitted frequently.
+        */
        mutable boost::signals2::signal<void (boost::weak_ptr<Content>, int, bool)> ContentChanged;
-       
+
 private:
        void content_changed (boost::weak_ptr<Content>, int, bool);
        void reconnect ();