};
auto add = [&counts, &add_bullet](dcp::VerificationNote note, wxString message) {
+ if (note.reference_hash()) {
+ message.Replace("%reference_hash", std_to_wx(note.reference_hash().get()));
+ }
+ if (note.calculated_hash()) {
+ message.Replace("%calculated_hash", std_to_wx(note.calculated_hash().get()));
+ }
+ if (note.frame()) {
+ message.Replace("%frame", std_to_wx(dcp::raw_convert<string>(note.frame().get())));
+ message.Replace(
+ "%timecode",
+ std_to_wx(
+ dcp::Time(note.frame().get(), note.frame_rate().get(), note.frame_rate().get()).as_string(dcp::Standard::SMPTE)
+ ));
+ }
if (note.note()) {
message.Replace("%n", std_to_wx(note.note().get()));
}
if (note.line()) {
message.Replace("%l", std_to_wx(dcp::raw_convert<string>(note.line().get())));
}
+ if (note.component()) {
+ message.Replace("%component", std_to_wx(dcp::raw_convert<string>(note.component().get())));
+ }
+ if (note.size()) {
+ message.Replace("%size", std_to_wx(dcp::raw_convert<string>(note.size().get())));
+ }
+ if (note.id()) {
+ message.Replace("%id", std_to_wx(note.id().get()));
+ }
+ if (note.other_id()) {
+ message.Replace("%other_id", std_to_wx(note.other_id().get()));
+ }
add_bullet (note.type(), message);
counts[note.type()]++;
};
if (job->finished_in_error() && job->error_summary() != "") {
/* We have an error that did not come from dcp::verify */
add_bullet (dcp::VerificationNote::Type::ERROR, std_to_wx(job->error_summary()));
+ ++counts[dcp::VerificationNote::Type::ERROR];
}
for (auto i: job->notes()) {
switch (i.code()) {
case dcp::VerificationNote::Code::FAILED_READ:
- add (i, std_to_wx(*i.note()));
+ add (i, _("Could not read DCP (%n)"));
break;
case dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES:
- add(i, _("The hash of the CPL %n in the PKL does not agree with the CPL file. This probably means that the CPL file is corrupt."));
+ add(i, _("The hash (%reference_hash) of the CPL %n in the PKL does not agree with the CPL file (%calculated_hash). This probably means that the CPL file is corrupt."));
break;
case dcp::VerificationNote::Code::INVALID_PICTURE_FRAME_RATE:
add(i, _("The picture in a reel has a frame rate of %n, which is not valid."));
break;
case dcp::VerificationNote::Code::INCORRECT_PICTURE_HASH:
- add(i, _("The hash of the picture asset %f does not agree with the PKL file. This probably means that the asset file is corrupt."));
+ add(i, _("The hash (%calculated_hash) of the picture asset %f does not agree with the PKL file (%reference_hash). This probably means that the asset file is corrupt."));
break;
case dcp::VerificationNote::Code::MISMATCHED_PICTURE_HASHES:
add(i, _("The PKL and CPL hashes disagree for picture asset %f."));
break;
case dcp::VerificationNote::Code::INCORRECT_SOUND_HASH:
- add(i, _("The hash of the sound asset %f does not agree with the PKL file. This probably means that the asset file is corrupt."));
+ add(i, _("The hash (%calculated_hash) of the sound asset %f does not agree with the PKL file (%reference_hash). This probably means that the asset file is corrupt."));
break;
case dcp::VerificationNote::Code::MISMATCHED_SOUND_HASHES:
add(i, _("The PKL and CPL hashes disagree for sound asset %f."));
add(i, _("At least one frame of the video asset %f is over the limit of 250Mbit/s."));
break;
case dcp::VerificationNote::Code::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES:
- add(i, _("At least one frame of the video asset %f is close to the limit of 250MBit/s."));
+ add(i, _("Frame %frame (timecode %timecode) in asset %f has an instantaneous bit rate that is close to the limit of 250Mbit/s."));
break;
case dcp::VerificationNote::Code::EXTERNAL_ASSET:
add(i, _("This DCP refers to at the asset %n in another DCP (and perhaps others), so it is a \"version file\" (VF)"));
case dcp::VerificationNote::Code::INCORRECT_SUBTITLE_NAMESPACE_COUNT:
add(i, _("The XML in the subtitle asset %n has more than one namespace declaration."));
break;
+ case dcp::VerificationNote::Code::MISSING_LOAD_FONT_FOR_FONT:
+ add(i, _("A subtitle or closed caption refers to a font with ID %id that does not have a corresponding <LoadFont> node."));
+ break;
+ case dcp::VerificationNote::Code::MISSING_LOAD_FONT:
+ add(i, _("The SMPTE subtitle asset %id has <Text> nodes but no <LoadFont> node"));
+ break;
+ case dcp::VerificationNote::Code::MISMATCHED_ASSET_MAP_ID:
+ add(i, _("The asset with ID %id in the asset map actually has an id of %other_id"));
+ break;
+ case dcp::VerificationNote::Code::EMPTY_CONTENT_VERSION_LABEL_TEXT:
+ add(i, _("The <LabelText> in a <ContentVersion> in CPL %id is empty"));
+ break;
}
}