X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Freel_writer.h;h=0b5a3dad59c321101b161fbdfb0eaf01d409dded;hp=06f19f15a7a7e9eef3742269fbcec5309b3f7897;hb=56caa542a558a3e261a3da4773c9ed3e66e262ab;hpb=27b83475435dda4e84a90cf59a52f150905c4ab1 diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h index 06f19f15a..0b5a3dad5 100644 --- a/src/lib/reel_writer.h +++ b/src/lib/reel_writer.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -21,14 +21,21 @@ #include "types.h" #include "dcpomatic_time.h" #include "referenced_reel_asset.h" -#include "player_caption.h" +#include "player_text.h" +#include "dcp_text_track.h" #include #include +#include + +namespace dcpomatic { + class Font; +} class Film; class Job; -class Font; class AudioBuffers; +class InfoFileHandle; +struct write_frame_info_test; namespace dcp { class MonoPictureAsset; @@ -49,7 +56,7 @@ class ReelWriter public: ReelWriter ( boost::shared_ptr film, - DCPTimePeriod period, + dcpomatic::DCPTimePeriod period, boost::shared_ptr job, int reel_index, int reel_count, @@ -57,63 +64,57 @@ public: ); void write (boost::optional encoded, Frame frame, Eyes eyes); - void fake_write (Frame frame, Eyes eyes, int size); + void fake_write (int size); void repeat_write (Frame frame, Eyes eyes); void write (boost::shared_ptr audio); - void write (PlayerCaption text, CaptionType type, DCPTimePeriod period); + void write (PlayerText text, TextType type, boost::optional track, dcpomatic::DCPTimePeriod period); void finish (); - boost::shared_ptr create_reel (std::list const & refs, std::list > const & fonts); + boost::shared_ptr create_reel (std::list const & refs, std::list > const & fonts); void calculate_digests (boost::function set_progress); Frame start () const; - DCPTimePeriod period () const { + dcpomatic::DCPTimePeriod period () const { 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; } - dcp::FrameInfo read_frame_info (FILE* file, Frame frame, Eyes eyes) const; + dcp::FrameInfo read_frame_info (boost::shared_ptr info, Frame frame, Eyes eyes) const; private: + friend struct ::write_frame_info_test; + 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 (); - bool existing_picture_frame_ok (FILE* asset_file, FILE* info_file, Frame frame) const; + 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; - DCPTimePeriod _period; + 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; /** index of this reel within the DCP (starting from 0) */ int _reel_index; /** number of reels in the DCP */ int _reel_count; boost::optional _content_summary; + 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; static int const _info_size; };