diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-10-21 10:04:37 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-10-22 10:30:45 +0100 |
| commit | 7a65b08f1b09beacc0e0a8060641f677683d400c (patch) | |
| tree | 643deec8a777ab94d68a865561936f23d2c58bda /src/lib/reel_writer.h | |
| parent | e25bf0c33f4085f6caa3d0d19a083399a422146a (diff) | |
Move quite a lot of stuff out of Writer into a new class
ReelWriter, which hopefully cleans things up a bit.
Diffstat (limited to 'src/lib/reel_writer.h')
| -rw-r--r-- | src/lib/reel_writer.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h new file mode 100644 index 000000000..3adaaf477 --- /dev/null +++ b/src/lib/reel_writer.h @@ -0,0 +1,112 @@ +/* + Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "types.h" +#include "data.h" +#include "dcpomatic_time.h" +#include "referenced_reel_asset.h" +#include "player_subtitles.h" +#include <dcp/picture_asset_writer.h> +#include <boost/shared_ptr.hpp> + +class Film; +class Job; +class Font; +class AudioBuffers; + +namespace dcp { + class MonoPictureAsset; + class MonoPictureAssetWriter; + class StereoPictureAsset; + class StereoPictureAssetWriter; + class PictureAsset; + class PictureAssetWriter; + class SoundAsset; + class SoundAssetWriter; + class SubtitleAsset; + class ReelAsset; + class Reel; +} + +class ReelWriter +{ +public: + ReelWriter (boost::shared_ptr<const Film> film, DCPTimePeriod period, boost::shared_ptr<Job> job); + + void write (boost::optional<Data> encoded, Frame frame, Eyes eyes); + void fake_write (Frame frame, Eyes eyes, int size); + void repeat_write (Frame frame, Eyes eyes); + void write (boost::shared_ptr<const AudioBuffers> audio); + void write (PlayerSubtitles subs); + + void finish (); + boost::shared_ptr<dcp::Reel> create_reel (std::list<ReferencedReelAsset> const & refs, std::list<boost::shared_ptr<Font> > const & fonts); + void calculate_digests (boost::shared_ptr<Job> job); + + Frame start () const; + + DCPTimePeriod period () const { + return _period; + } + + int total_written_audio_frames () const { + return _total_written_audio_frames; + } + + 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; + +private: + + void write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const; + long frame_info_position (Frame frame, Eyes eyes) const; + void check_existing_picture_asset (); + + boost::shared_ptr<const Film> _film; + + DCPTimePeriod _period; + /** the first 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<Data> _last_written[EYES_COUNT]; + /** the index of the last written video frame within the reel */ + int _last_written_video_frame; + Eyes _last_written_eyes; + /** the number of audio frames that have been written to the reel */ + int _total_written_audio_frames; + + boost::shared_ptr<dcp::PictureAsset> _picture_asset; + boost::shared_ptr<dcp::PictureAssetWriter> _picture_asset_writer; + boost::shared_ptr<dcp::SoundAsset> _sound_asset; + boost::shared_ptr<dcp::SoundAssetWriter> _sound_asset_writer; + boost::shared_ptr<dcp::SubtitleAsset> _subtitle_asset; + + static int const _info_size; +}; |
