/*
- Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
using std::string;
using std::cout;
using std::list;
-using boost::shared_ptr;
-using boost::weak_ptr;
-using boost::dynamic_pointer_cast;
+using std::vector;
+using std::shared_ptr;
+using std::weak_ptr;
+using std::dynamic_pointer_cast;
using boost::optional;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
using namespace dcpomatic;
/** Construct a DCP encoder.
_player_video_connection = _player->Video.connect (bind (&DCPEncoder::video, this, _1, _2));
_player_audio_connection = _player->Audio.connect (bind (&DCPEncoder::audio, this, _1, _2));
_player_text_connection = _player->Text.connect (bind (&DCPEncoder::text, this, _1, _2, _3, _4));
+ _player_atmos_connection = _player->Atmos.connect (bind (&DCPEncoder::atmos, this, _1, _2, _3));
BOOST_FOREACH (shared_ptr<const Content> c, film->content ()) {
BOOST_FOREACH (shared_ptr<TextContent> i, c->text) {
_player_video_connection.release ();
_player_audio_connection.release ();
_player_text_connection.release ();
+ _player_atmos_connection.release ();
}
void
}
if (_non_burnt_subtitles) {
- list<shared_ptr<Font> > fonts = _player->get_subtitle_fonts ();
+ vector<FontData> fonts = _player->get_subtitle_fonts ();
if (fonts.size() > 1 && _film->interop()) {
/* Interop will ignore second and subsequent <LoadFont>s so don't even
write them as they upset some validators.
*/
- shared_ptr<Font> first = fonts.front ();
+ FontData first = fonts.front ();
fonts.clear ();
fonts.push_back (first);
}
_finishing = true;
_j2k_encoder->end ();
- _writer->finish ();
+ _writer->finish (_film->dir(_film->dcp_name()));
}
void
DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
{
- if (!_film->three_d() && data->eyes() == EYES_LEFT) {
- /* Use left-eye images for both eyes */
- data->set_eyes (EYES_BOTH);
+ if (!_film->three_d()) {
+ if (data->eyes() == EYES_LEFT) {
+ /* Use left-eye images for both eyes... */
+ data->set_eyes (EYES_BOTH);
+ } else if (data->eyes() == EYES_RIGHT) {
+ /* ...and discard the right */
+ return;
+ }
}
_j2k_encoder->encode (data, time);
}
}
-float
+
+void
+DCPEncoder::atmos (shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata)
+{
+ _writer->write (data, time, metadata);
+}
+
+
+optional<float>
DCPEncoder::current_rate () const
{
if (!_j2k_encoder) {
- return 0;
+ return optional<float>();
}
return _j2k_encoder->current_encoding_rate ();