X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Freel_writer.h;h=6acf0d21a37f79b310079beaf19fff3494126037;hb=613b06aa87ae10517409a9a376e294c2c2d2a9bf;hp=46f47761622a0afae5424374af8b9e45bc97d8f5;hpb=f37e6b5a0f320d4352b87b97f78afae762512b93;p=dcpomatic.git diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h index 46f477616..6acf0d21a 100644 --- a/src/lib/reel_writer.h +++ b/src/lib/reel_writer.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2019 Carl Hetherington + Copyright (C) 2012-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -18,12 +18,15 @@ */ +#include "atmos_metadata.h" #include "types.h" #include "dcpomatic_time.h" #include "referenced_reel_asset.h" #include "player_text.h" #include "dcp_text_track.h" +#include "weak_film.h" #include +#include #include #include @@ -47,27 +50,29 @@ namespace dcp { class SoundAsset; class SoundAssetWriter; class SubtitleAsset; + class AtmosAsset; class ReelAsset; class Reel; + class ReelPictureAsset; } -class ReelWriter +class ReelWriter : public WeakConstFilm { public: ReelWriter ( - boost::shared_ptr film, + boost::weak_ptr film, dcpomatic::DCPTimePeriod period, boost::shared_ptr job, int reel_index, - int reel_count, - boost::optional content_summary + int reel_count ); - void write (boost::optional encoded, Frame frame, Eyes eyes); - void fake_write (Frame frame, Eyes eyes, int size); + void write (boost::shared_ptr encoded, Frame frame, Eyes eyes); + void fake_write (int size); void repeat_write (Frame frame, Eyes eyes); void write (boost::shared_ptr audio); void write (PlayerText text, TextType type, boost::optional track, dcpomatic::DCPTimePeriod period); + void write (boost::shared_ptr atmos, AtmosMetadata metadata); void finish (); boost::shared_ptr create_reel (std::list const & refs, std::list > const & fonts); @@ -79,14 +84,6 @@ public: return _period; } - int last_written_video_frame () const { - return _last_written_video_frame; - } - - Eyes last_written_eyes () const { - return _last_written_eyes; - } - int first_nonexistant_frame () const { return _first_nonexistant_frame; } @@ -99,19 +96,23 @@ private: void write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const; long frame_info_position (Frame frame, Eyes eyes) const; - Frame check_existing_picture_asset (); + Frame check_existing_picture_asset (boost::filesystem::path asset); bool existing_picture_frame_ok (FILE* asset_file, boost::shared_ptr info_file, Frame frame) const; - boost::shared_ptr _film; + boost::shared_ptr create_reel_picture (boost::shared_ptr reel, std::list const & refs) const; + void create_reel_sound (boost::shared_ptr reel, std::list const & refs) const; + void create_reel_text ( + boost::shared_ptr reel, + std::list const & refs, std::list > const& fonts, + int64_t duration + ) const; + void create_reel_markers (boost::shared_ptr reel) const; dcpomatic::DCPTimePeriod _period; /** the first picture frame index that does not already exist in our MXF */ int _first_nonexistant_frame; /** the data of the last written frame, if there is one */ - boost::optional _last_written[EYES_COUNT]; - /** the index of the last written video frame within the reel */ - int _last_written_video_frame; - Eyes _last_written_eyes; + boost::shared_ptr _last_written[EYES_COUNT]; /** index of this reel within the DCP (starting from 0) */ int _reel_index; /** number of reels in the DCP */ @@ -120,11 +121,14 @@ private: boost::weak_ptr _job; boost::shared_ptr _picture_asset; + /** picture asset writer, or 0 if we are not writing any picture because we already have one */ boost::shared_ptr _picture_asset_writer; boost::shared_ptr _sound_asset; boost::shared_ptr _sound_asset_writer; boost::shared_ptr _subtitle_asset; std::map > _closed_caption_assets; + boost::shared_ptr _atmos_asset; + boost::shared_ptr _atmos_asset_writer; static int const _info_size; };