Factor out empty_text_asset() method.
[dcpomatic.git] / src / lib / reel_writer.h
index 09c29adae05a1e7efacdf22448ed81ac0e6ce31e..08b85a78520c6f7326c3827ff6f0661f89a3250f 100644 (file)
@@ -24,6 +24,7 @@
 #include "referenced_reel_asset.h"
 #include "player_text.h"
 #include "dcp_text_track.h"
+#include "weak_film.h"
 #include <dcp/picture_asset_writer.h>
 #include <dcp/atmos_asset_writer.h>
 #include <boost/shared_ptr.hpp>
@@ -52,18 +53,19 @@ namespace dcp {
        class AtmosAsset;
        class ReelAsset;
        class Reel;
+       class ReelPictureAsset;
 }
 
-class ReelWriter
+class ReelWriter : public WeakConstFilm
 {
 public:
        ReelWriter (
-               boost::shared_ptr<const Film> film,
+               boost::weak_ptr<const Film> film,
                dcpomatic::DCPTimePeriod period,
                boost::shared_ptr<Job> job,
                int reel_index,
                int reel_count,
-               boost::optional<std::string> content_summary
+               bool text_only
                );
 
        void write (boost::shared_ptr<const dcp::Data> encoded, Frame frame, Eyes eyes);
@@ -73,8 +75,10 @@ public:
        void write (PlayerText text, TextType type, boost::optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period);
        void write (boost::shared_ptr<const dcp::AtmosFrame> atmos, AtmosMetadata metadata);
 
-       void finish ();
-       boost::shared_ptr<dcp::Reel> create_reel (std::list<ReferencedReelAsset> const & refs, std::list<boost::shared_ptr<dcpomatic::Font> > const & fonts);
+       void finish (boost::filesystem::path output_dcp);
+       boost::shared_ptr<dcp::Reel> create_reel (
+               std::list<ReferencedReelAsset> const & refs, std::list<boost::shared_ptr<dcpomatic::Font> > const & fonts, boost::filesystem::path output_dcp
+               );
        void calculate_digests (boost::function<void (float)> set_progress);
 
        Frame start () const;
@@ -97,8 +101,17 @@ private:
        long frame_info_position (Frame frame, Eyes eyes) const;
        Frame check_existing_picture_asset (boost::filesystem::path asset);
        bool existing_picture_frame_ok (FILE* asset_file, boost::shared_ptr<InfoFileHandle> info_file, Frame frame) const;
-
-       boost::shared_ptr<const Film> _film;
+       boost::shared_ptr<dcp::SubtitleAsset> empty_text_asset (TextType type, boost::optional<DCPTextTrack> track) const;
+
+       boost::shared_ptr<dcp::ReelPictureAsset> create_reel_picture (boost::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const;
+       void create_reel_sound (boost::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const;
+       void create_reel_text (
+               boost::shared_ptr<dcp::Reel> reel,
+               std::list<ReferencedReelAsset> const & refs, std::list<boost::shared_ptr<dcpomatic::Font> > const& fonts,
+               int64_t duration,
+               boost::filesystem::path output_dcp
+               ) const;
+       void create_reel_markers (boost::shared_ptr<dcp::Reel> reel) const;
 
        dcpomatic::DCPTimePeriod _period;
        /** the first picture frame index that does not already exist in our MXF */
@@ -111,6 +124,7 @@ private:
        int _reel_count;
        boost::optional<std::string> _content_summary;
        boost::weak_ptr<Job> _job;
+       bool _text_only;
 
        boost::shared_ptr<dcp::PictureAsset> _picture_asset;
        /** picture asset writer, or 0 if we are not writing any picture because we already have one */