X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Freel_writer.h;h=d5b531f410ed9b6793237305296fbf43c83e66d9;hp=2b3b6e23772458511eb674dab77350e0a35d3790;hb=323b8cbb0b95297fbd027ffdc4ea5003b59ef25f;hpb=6a5c7209770aa2c20d702b6f31d877ad2864ece7 diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h index 2b3b6e237..d5b531f41 100644 --- a/src/lib/reel_writer.h +++ b/src/lib/reel_writer.h @@ -18,64 +18,74 @@ */ + #include "atmos_metadata.h" -#include "types.h" +#include "dcp_text_track.h" #include "dcpomatic_time.h" -#include "referenced_reel_asset.h" +#include "enum_indexed_vector.h" +#include "font_id_map.h" #include "player_text.h" -#include "dcp_text_track.h" -#include +#include "referenced_reel_asset.h" +#include "render_text.h" +#include "types.h" +#include "weak_film.h" #include -#include -#include +#include +#include -namespace dcpomatic { - class Font; -} -class Film; -class Job; class AudioBuffers; +class Film; class InfoFileHandle; +class Job; struct write_frame_info_test; namespace dcp { + class AtmosAsset; class MonoPictureAsset; class MonoPictureAssetWriter; - class StereoPictureAsset; - class StereoPictureAssetWriter; class PictureAsset; class PictureAssetWriter; + class Reel; + class ReelAsset; + class ReelPictureAsset; class SoundAsset; class SoundAssetWriter; + class StereoPictureAsset; + class StereoPictureAssetWriter; class SubtitleAsset; - class AtmosAsset; - class ReelAsset; - class Reel; - class ReelPictureAsset; } -class ReelWriter + +class ReelWriter : public WeakConstFilm { public: ReelWriter ( - boost::shared_ptr film, + std::weak_ptr film, dcpomatic::DCPTimePeriod period, - boost::shared_ptr job, + std::shared_ptr job, int reel_index, - int reel_count + int reel_count, + bool text_only ); - void write (boost::shared_ptr encoded, Frame frame, Eyes eyes); + void write (std::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); - void calculate_digests (boost::function set_progress); + void write (std::shared_ptr audio); + void write (PlayerText text, TextType type, boost::optional track, dcpomatic::DCPTimePeriod period, FontIdMap const& fonts); + void write (std::shared_ptr atmos, AtmosMetadata metadata); + + void finish (boost::filesystem::path output_dcp); + std::shared_ptr create_reel ( + std::list const & refs, + FontIdMap const & fonts, + std::shared_ptr chosen_interop_font, + boost::filesystem::path output_dcp, + bool ensure_subtitles, + std::set ensure_closed_captions + ); + void calculate_digests (std::function set_progress); Frame start () const; @@ -83,11 +93,11 @@ public: return _period; } - int first_nonexistant_frame () const { - return _first_nonexistant_frame; + int first_nonexistent_frame () const { + return _first_nonexistent_frame; } - dcp::FrameInfo read_frame_info (boost::shared_ptr info, Frame frame, Eyes eyes) const; + dcp::FrameInfo read_frame_info (std::shared_ptr info, Frame frame, Eyes eyes) const; private: @@ -96,40 +106,50 @@ 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 (boost::filesystem::path asset); - bool existing_picture_frame_ok (FILE* asset_file, boost::shared_ptr info_file, Frame frame) const; + bool existing_picture_frame_ok (dcp::File& asset_file, std::shared_ptr info_file, Frame frame) const; + std::shared_ptr empty_text_asset (TextType type, boost::optional track, bool with_dummy) const; - 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; + std::shared_ptr create_reel_picture (std::shared_ptr reel, std::list const & refs) const; + void create_reel_sound (std::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 + std::shared_ptr reel, + std::list const & refs, + FontIdMap const& fonts, + std::shared_ptr chosen_interop_font, + int64_t duration, + boost::filesystem::path output_dcp, + bool ensure_subtitles, + std::set ensure_closed_captions ) const; - void create_reel_markers (boost::shared_ptr reel) const; - - boost::shared_ptr _film; + void create_reel_markers (std::shared_ptr reel) const; + float convert_vertical_position(StringText const& subtitle, dcp::Standard to) const; dcpomatic::DCPTimePeriod _period; /** the first picture frame index that does not already exist in our MXF */ - int _first_nonexistant_frame; + int _first_nonexistent_frame; /** the data of the last written frame, if there is one */ - boost::shared_ptr _last_written[EYES_COUNT]; + EnumIndexedVector, Eyes> _last_written; /** 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; + std::weak_ptr _job; + bool _text_only; + + dcp::ArrayData _default_font; - boost::shared_ptr _picture_asset; + std::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; + std::shared_ptr _picture_asset_writer; + std::shared_ptr _sound_asset; + std::shared_ptr _sound_asset_writer; + std::shared_ptr _subtitle_asset; + std::map> _closed_caption_assets; + std::shared_ptr _atmos_asset; + std::shared_ptr _atmos_asset_writer; + + mutable FontMetrics _font_metrics; static int const _info_size; };