X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Freel_writer.cc;h=fa84180f000179b5605804f944d96532c86d43f4;hp=a42c6182ab5fc37bf758a5c014a145a7def45060;hb=d5bdc5cf073987043ace62378b02ffee5af818bd;hpb=1a7c50245309bb0b99001940b2203a267de942ca diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index a42c6182a..fa84180f0 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -67,6 +67,7 @@ using boost::dynamic_pointer_cast; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif +using dcp::ArrayData; using dcp::Data; using dcp::raw_convert; using namespace dcpomatic; @@ -289,14 +290,14 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset) } void -ReelWriter::write (optional encoded, Frame frame, Eyes eyes) +ReelWriter::write (shared_ptr encoded, Frame frame, Eyes eyes) { if (!_picture_asset_writer) { /* We're not writing any data */ return; } - dcp::FrameInfo fin = _picture_asset_writer->write (encoded->data().get (), encoded->size()); + dcp::FrameInfo fin = _picture_asset_writer->write (encoded->data(), encoded->size()); write_frame_info (frame, eyes, fin); _last_written[eyes] = encoded; } @@ -338,7 +339,7 @@ ReelWriter::repeat_write (Frame frame, Eyes eyes) } dcp::FrameInfo fin = _picture_asset_writer->write ( - _last_written[eyes]->data().get(), + _last_written[eyes]->data(), _last_written[eyes]->size() ); write_frame_info (frame, eyes, fin); @@ -596,18 +597,25 @@ ReelWriter::create_reel (list const & refs, listadd (reel_sound_asset); - maybe_add_text (_subtitle_asset, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period); + shared_ptr subtitle = maybe_add_text (_subtitle_asset, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period); + if (subtitle && !_film->subtitle_languages().empty()) { + subtitle->set_language (_film->subtitle_languages().front()); + } + for (map >::const_iterator i = _closed_caption_assets.begin(); i != _closed_caption_assets.end(); ++i) { shared_ptr a = maybe_add_text ( i->second, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period ); - a->set_annotation_text (i->first.name); - a->set_language (i->first.language); + if (a) { + a->set_annotation_text (i->first.name); + a->set_language (dcp::LanguageTag(i->first.language)); + } } - map markers = _film->markers (); - map reel_markers; - for (map::const_iterator i = markers.begin(); i != markers.end(); ++i) { + Film::Markers markers = _film->markers (); + _film->add_ffoc_lfoc (markers); + Film::Markers reel_markers; + for (Film::Markers::const_iterator i = markers.begin(); i != markers.end(); ++i) { if (_period.contains(i->second)) { reel_markers[i->first] = i->second; } @@ -683,12 +691,12 @@ ReelWriter::write (PlayerText subs, TextType type, optional track, } if (!asset) { - string lang = _film->subtitle_language (); + vector lang = _film->subtitle_languages (); if (_film->interop ()) { shared_ptr s (new dcp::InteropSubtitleAsset ()); s->set_movie_title (_film->name ()); if (type == TEXT_OPEN_SUBTITLE) { - s->set_language (lang.empty() ? "Unknown" : lang); + s->set_language (lang.empty() ? "Unknown" : lang.front().to_string()); } else { s->set_language (track->language); } @@ -699,9 +707,9 @@ ReelWriter::write (PlayerText subs, TextType type, optional track, s->set_content_title_text (_film->name ()); s->set_metadata (mxf_metadata()); if (type == TEXT_OPEN_SUBTITLE && !lang.empty()) { - s->set_language (lang); + s->set_language (lang.front()); } else { - s->set_language (track->language); + s->set_language (dcp::LanguageTag(track->language)); } s->set_edit_rate (dcp::Fraction (_film->video_frame_rate (), 1)); s->set_reel_number (_reel_index + 1); @@ -762,15 +770,15 @@ ReelWriter::existing_picture_frame_ok (FILE* asset_file, shared_ptr (data.size ())) { LOG_GENERAL ("Existing frame %1 is incomplete", frame); ok = false; } else { Digester digester; - digester.add (data.data().get(), data.size()); + digester.add (data.data(), data.size()); LOG_GENERAL ("Hash %1 vs %2", digester.get(), info.hash); if (digester.get() != info.hash) { LOG_GENERAL ("Existing frame %1 failed hash check", frame);