using std::runtime_error;
using std::map;
using std::shared_ptr;
+using std::string;
using std::dynamic_pointer_cast;
+using boost::optional;
+
DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
: DCP (content, tolerant)
_name = cpl->content_title_text ();
_content_kind = cpl->content_kind ();
+ auto try_to_parse_language = [](optional<string> lang) -> boost::optional<dcp::LanguageTag> {
+ try {
+ if (lang) {
+ return dcp::LanguageTag (*lang);
+ }
+ } catch (...) {}
+ return boost::none;
+ };
+
for (auto i: cpl->reels()) {
if (i->main_picture ()) {
}
_audio_length += i->main_sound()->actual_duration();
+ _audio_language = try_to_parse_language (asset->language());
}
if (i->main_subtitle ()) {
}
_text_count[static_cast<int>(TextType::OPEN_SUBTITLE)] = 1;
+ _open_subtitle_language = try_to_parse_language (i->main_subtitle()->language());
}
for (auto j: i->closed_captions()) {
}
_text_count[static_cast<int>(TextType::CLOSED_CAPTION)]++;
- _dcp_text_tracks.push_back (DCPTextTrack(j->annotation_text(), j->language().get_value_or(_("Unknown"))));
+ _dcp_text_tracks.push_back (DCPTextTrack(j->annotation_text(), try_to_parse_language(j->language())));
}
if (i->main_markers ()) {
- map<dcp::Marker, dcp::Time> rm = i->main_markers()->get();
+ auto rm = i->main_markers()->get();
_markers.insert (rm.begin(), rm.end());
}
auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset>(pic);
if (mono) {
- mono->start_read()->get_frame(0)->xyz_image ();
+ auto reader = mono->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0)->xyz_image();
} else {
- stereo->start_read()->get_frame(0)->xyz_image(dcp::Eye::LEFT);
+ auto reader = stereo->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0)->xyz_image(dcp::Eye::LEFT);
}
if (i->main_sound()) {
if (sound->encrypted() && !sound->key()) {
_kdm_valid = false;
}
- i->main_sound()->asset()->start_read()->get_frame(0);
+ auto reader = i->main_sound()->asset()->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0);
}
if (i->main_subtitle()) {
if (atmos->encrypted() && !atmos->key()) {
_kdm_valid = false;
}
- atmos->start_read()->get_frame(0);
+ auto reader = atmos->start_read();
+ reader->set_check_hmac (false);
+ reader->get_frame(0);
}
}
} catch (dcp::ReadError& e) {
_kdm_valid = false;
}
- DCPOMATIC_ASSERT (cpl->standard ());
- _standard = cpl->standard().get();
+ _standard = cpl->standard();
_three_d = !cpl->reels().empty() && cpl->reels().front()->main_picture() &&
dynamic_pointer_cast<dcp::StereoPictureAsset> (cpl->reels().front()->main_picture()->asset());
_ratings = cpl->ratings();