X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Freel_writer.cc;h=f5f21f2eac92e5799a901370ecd44c394d654ee2;hb=8475d7b7d70d5b98e7737f326653d80a9fd8e9cf;hp=3697fc7b147472992d1e00470ece76735994f637;hpb=54ca5a01f0648d2a5101fab0f50b41d8c90612e4;p=dcpomatic.git diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index 3697fc7b1..f5f21f2ea 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -30,11 +30,14 @@ #include "config.h" #include "audio_buffers.h" #include "image.h" +#include +#include #include #include #include #include #include +#include #include #include #include @@ -167,7 +170,8 @@ ReelWriter::ReelWriter ( of the DCP directory until the last minute. */ _sound_asset_writer = _sound_asset->start_write ( - _film->directory().get() / audio_asset_filename (_sound_asset, _reel_index, _reel_count, _content_summary) + _film->directory().get() / audio_asset_filename (_sound_asset, _reel_index, _reel_count, _content_summary), + _film->contains_atmos_content() ); } } @@ -238,7 +242,7 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset) try { info_file = _film->info_file_handle (_period, true); - } catch (OpenFileError) { + } catch (OpenFileError &) { LOG_GENERAL_NC ("Could not open film info file"); fclose (asset_file); return 0; @@ -287,6 +291,23 @@ ReelWriter::write (optional encoded, Frame frame, Eyes eyes) _last_written[eyes] = encoded; } + +void +ReelWriter::write (shared_ptr atmos, AtmosMetadata metadata) +{ + if (!_atmos_asset) { + _atmos_asset = metadata.create (dcp::Fraction(_film->video_frame_rate(), 1)); + if (_film->encrypted()) { + _atmos_asset->set_key(_film->key()); + } + _atmos_asset_writer = _atmos_asset->start_write ( + _film->directory().get() / atmos_asset_filename (_atmos_asset, _reel_index, _reel_count, _content_summary) + ); + } + _atmos_asset_writer->write (atmos); +} + + void ReelWriter::fake_write (int size) { @@ -381,6 +402,24 @@ ReelWriter::finish () _sound_asset->set_file (audio_to); } + + if (_atmos_asset) { + _atmos_asset_writer->finalize (); + boost::filesystem::path atmos_to; + atmos_to /= _film->dir (_film->dcp_name()); + string const aaf = atmos_asset_filename (_atmos_asset, _reel_index, _reel_count, _content_summary); + atmos_to /= aaf; + + boost::system::error_code ec; + boost::filesystem::rename (_film->file(aaf), atmos_to, ec); + if (ec) { + throw FileError ( + String::compose (_("could not move atmos asset into the DCP (%1)"), ec.value ()), aaf + ); + } + + _atmos_asset->set_file (atmos_to); + } } template @@ -400,24 +439,9 @@ maybe_add_text ( shared_ptr reel_asset; if (asset) { - boost::filesystem::path liberation_normal; - try { - liberation_normal = shared_path() / "LiberationSans-Regular.ttf"; - if (!boost::filesystem::exists (liberation_normal)) { - /* Hack for unit tests */ - liberation_normal = shared_path() / "fonts" / "LiberationSans-Regular.ttf"; - } - } catch (boost::filesystem::filesystem_error& e) { - - } - - if (!boost::filesystem::exists(liberation_normal)) { - liberation_normal = "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"; - } - /* Add the font to the subtitle content */ BOOST_FOREACH (shared_ptr j, fonts) { - asset->add_font (j->id(), j->file().get_value_or(liberation_normal)); + asset->add_font (j->id(), j->file().get_value_or(default_font_file())); } if (dynamic_pointer_cast (asset)) { @@ -590,6 +614,10 @@ ReelWriter::create_reel (list const & refs, listadd (ma); } + if (_atmos_asset) { + reel->add (shared_ptr(new dcp::ReelAtmosAsset(_atmos_asset, 0))); + } + return reel; } @@ -603,6 +631,10 @@ ReelWriter::calculate_digests (boost::function set_progress) if (_sound_asset) { _sound_asset->hash (set_progress); } + + if (_atmos_asset) { + _atmos_asset->hash (set_progress); + } } Frame