summaryrefslogtreecommitdiff
path: root/src/lib/reel_writer.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-10-21 10:04:37 +0100
committerCarl Hetherington <cth@carlh.net>2015-10-22 10:30:45 +0100
commit7a65b08f1b09beacc0e0a8060641f677683d400c (patch)
tree643deec8a777ab94d68a865561936f23d2c58bda /src/lib/reel_writer.h
parente25bf0c33f4085f6caa3d0d19a083399a422146a (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.h112
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;
+};