- case dcp::VerificationNote::MISSING_SUBTITLE_ENTRY_POINT:
- return "Subtitle assets must have an <EntryPoint> tag.";
- case dcp::VerificationNote::INCORRECT_SUBTITLE_ENTRY_POINT:
- return "Subtitle assets must have an <EntryPoint> of 0.";
- case dcp::VerificationNote::MISSING_CLOSED_CAPTION_ENTRY_POINT:
- return "Closed caption assets must have an <EntryPoint> tag.";
- case dcp::VerificationNote::INCORRECT_CLOSED_CAPTION_ENTRY_POINT:
- return "Closed caption assets must have an <EntryPoint> of 0.";
- case dcp::VerificationNote::MISSING_HASH:
- return String::compose("An asset is missing a <Hash> tag: %1", note.note().get());
- case dcp::VerificationNote::MISSING_FFEC_IN_FEATURE:
- return "The DCP is marked as a Feature but there is no FFEC (first frame of end credits) marker";
- case dcp::VerificationNote::MISSING_FFMC_IN_FEATURE:
- return "The DCP is marked as a Feature but there is no FFMC (first frame of moving credits) marker";
- case dcp::VerificationNote::MISSING_FFOC:
- return "There should be a FFOC (first frame of content) marker";
- case dcp::VerificationNote::MISSING_LFOC:
- return "There should be a LFOC (last frame of content) marker";
- case dcp::VerificationNote::INCORRECT_FFOC:
- return "The FFOC marker should bet set to 1";
- case dcp::VerificationNote::INCORRECT_LFOC:
- return "The LFOC marker should be set to 1 less than the duration of the last reel";
- case dcp::VerificationNote::MISSING_CPL_METADATA:
- return "There should be a <CompositionMetadataAsset> tag";
- case dcp::VerificationNote::MISSING_CPL_METADATA_VERSION_NUMBER:
- return "The CPL metadata must contain a <VersionNumber>";
- case dcp::VerificationNote::MISSING_EXTENSION_METADATA:
- return "The CPL metadata must contain <ExtensionMetadata>";
- case dcp::VerificationNote::INVALID_EXTENSION_METADATA:
- return String::compose("The <ExtensionMetadata> is malformed in some way: %1", note.note().get());
- case dcp::VerificationNote::UNSIGNED_CPL_WITH_ENCRYPTED_CONTENT:
- return String::compose("The CPL %1, which has encrypted content, is not signed", note.file()->filename());
- case dcp::VerificationNote::UNSIGNED_PKL_WITH_ENCRYPTED_CONTENT:
- return String::compose("The PKL %1, which has encrypted content, is not signed", note.file()->filename());
- case dcp::VerificationNote::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL:
- return String::compose("The PKL %1 has only one CPL but its <AnnotationText> does not match the CPL's <ContentTitleText>", note.file()->filename());
- case dcp::VerificationNote::PARTIALLY_ENCRYPTED:
- return "Some assets are encrypted but some are not";
+ case VerificationNote::Code::MISSING_SUBTITLE_ENTRY_POINT:
+ return String::compose("The subtitle asset %1 has no <EntryPoint> tag.", note.note().get());
+ case VerificationNote::Code::INCORRECT_SUBTITLE_ENTRY_POINT:
+ return String::compose("The subtitle asset %1 has an <EntryPoint> other than 0.", note.note().get());
+ case VerificationNote::Code::MISSING_CLOSED_CAPTION_ENTRY_POINT:
+ return String::compose("The closed caption asset %1 has no <EntryPoint> tag.", note.note().get());
+ case VerificationNote::Code::INCORRECT_CLOSED_CAPTION_ENTRY_POINT:
+ return String::compose("The closed caption asset %1 has an <EntryPoint> other than 0.", note.note().get());
+ case VerificationNote::Code::MISSING_HASH:
+ return String::compose("The asset %1 has no <Hash> tag in the CPL.", note.note().get());
+ case VerificationNote::Code::MISSING_FFEC_IN_FEATURE:
+ return "The DCP is marked as a Feature but there is no FFEC (first frame of end credits) marker.";
+ case VerificationNote::Code::MISSING_FFMC_IN_FEATURE:
+ return "The DCP is marked as a Feature but there is no FFMC (first frame of moving credits) marker.";
+ case VerificationNote::Code::MISSING_FFOC:
+ return "There should be a FFOC (first frame of content) marker.";
+ case VerificationNote::Code::MISSING_LFOC:
+ return "There should be a LFOC (last frame of content) marker.";
+ case VerificationNote::Code::INCORRECT_FFOC:
+ return String::compose("The FFOC marker is %1 instead of 1", note.note().get());
+ case VerificationNote::Code::INCORRECT_LFOC:
+ return String::compose("The LFOC marker is %1 instead of 1 less than the duration of the last reel.", note.note().get());
+ case VerificationNote::Code::MISSING_CPL_METADATA:
+ return String::compose("The CPL %1 has no <CompositionMetadataAsset> tag.", note.cpl_id().get());
+ case VerificationNote::Code::MISSING_CPL_METADATA_VERSION_NUMBER:
+ return String::compose("The CPL %1 has no <VersionNumber> in its <CompositionMetadataAsset>.", note.cpl_id().get());
+ case VerificationNote::Code::MISSING_EXTENSION_METADATA:
+ return String::compose("The CPL %1 has no <ExtensionMetadata> in its <CompositionMetadataAsset>.", note.cpl_id().get());
+ case VerificationNote::Code::INVALID_EXTENSION_METADATA:
+ return String::compose("The CPL %1 has a malformed <ExtensionMetadata> (%2).", note.file()->filename(), note.note().get());
+ case VerificationNote::Code::UNSIGNED_CPL_WITH_ENCRYPTED_CONTENT:
+ return String::compose("The CPL %1, which has encrypted content, is not signed.", note.cpl_id().get());
+ case VerificationNote::Code::UNSIGNED_PKL_WITH_ENCRYPTED_CONTENT:
+ return String::compose("The PKL %1, which has encrypted content, is not signed.", note.note().get());
+ case VerificationNote::Code::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL:
+ return String::compose("The PKL %1 has only one CPL but its <AnnotationText> does not match the CPL's <ContentTitleText>.", note.note().get());
+ case VerificationNote::Code::PARTIALLY_ENCRYPTED:
+ return "Some assets are encrypted but some are not.";
+ case VerificationNote::Code::INVALID_JPEG2000_CODESTREAM:
+ return String::compose(
+ "Frame %1 (timecode %2) has an invalid JPEG2000 codestream (%3).",
+ note.frame().get(),
+ dcp::Time(note.frame().get(), note.frame_rate().get(), note.frame_rate().get()).as_string(dcp::Standard::SMPTE),
+ note.note().get()
+ );
+ case VerificationNote::Code::INVALID_JPEG2000_GUARD_BITS_FOR_2K:
+ return String::compose("The JPEG2000 codestream uses %1 guard bits in a 2K image instead of 1.", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_GUARD_BITS_FOR_4K:
+ return String::compose("The JPEG2000 codestream uses %1 guard bits in a 4K image instead of 2.", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_TILE_SIZE:
+ return "The JPEG2000 tile size is not the same as the image size.";
+ case VerificationNote::Code::INVALID_JPEG2000_CODE_BLOCK_WIDTH:
+ return String::compose("The JPEG2000 codestream uses a code block width of %1 instead of 32.", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_CODE_BLOCK_HEIGHT:
+ return String::compose("The JPEG2000 codestream uses a code block height of %1 instead of 32.", note.note().get());
+ case VerificationNote::Code::INCORRECT_JPEG2000_POC_MARKER_COUNT_FOR_2K:
+ return String::compose("%1 POC markers found in 2K JPEG2000 codestream instead of 0.", note.note().get());
+ case VerificationNote::Code::INCORRECT_JPEG2000_POC_MARKER_COUNT_FOR_4K:
+ return String::compose("%1 POC markers found in 4K JPEG2000 codestream instead of 1.", note.note().get());
+ case VerificationNote::Code::INCORRECT_JPEG2000_POC_MARKER:
+ return String::compose("Incorrect POC marker content found (%1).", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_POC_MARKER_LOCATION:
+ return "POC marker found outside main header.";
+ case VerificationNote::Code::INVALID_JPEG2000_TILE_PARTS_FOR_2K:
+ return String::compose("The JPEG2000 codestream has %1 tile parts in a 2K image instead of 3.", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_TILE_PARTS_FOR_4K:
+ return String::compose("The JPEG2000 codestream has %1 tile parts in a 4K image instead of 6.", note.note().get());
+ case VerificationNote::Code::MISSING_JPEG200_TLM_MARKER:
+ return "No TLM marker was found in a JPEG2000 codestream.";
+ case VerificationNote::Code::MISMATCHED_TIMED_TEXT_RESOURCE_ID:
+ return "The Resource ID in a timed text MXF did not match the ID of the contained XML.";
+ case VerificationNote::Code::INCORRECT_TIMED_TEXT_ASSET_ID:
+ return "The Asset ID in a timed text MXF is the same as the Resource ID or that of the contained XML.";
+ case VerificationNote::Code::MISMATCHED_TIMED_TEXT_DURATION:
+ {
+ vector<string> parts;
+ boost::split (parts, note.note().get(), boost::is_any_of(" "));
+ DCP_ASSERT (parts.size() == 2);
+ return String::compose("The reel duration of some timed text (%1) is not the same as the ContainerDuration of its MXF (%2).", parts[0], parts[1]);
+ }
+ case VerificationNote::Code::MISSED_CHECK_OF_ENCRYPTED:
+ return "Some aspect of this DCP could not be checked because it is encrypted.";
+ case VerificationNote::Code::EMPTY_TEXT:
+ return "There is an empty <Text> node in a subtitle or closed caption.";
+ case VerificationNote::Code::MISMATCHED_CLOSED_CAPTION_VALIGN:
+ return "Some closed <Text> or <Image> nodes have different vertical alignments within a <Subtitle>.";
+ case VerificationNote::Code::INCORRECT_CLOSED_CAPTION_ORDERING:
+ return "Some closed captions are not listed in the order of their vertical position.";
+ case VerificationNote::Code::UNEXPECTED_ENTRY_POINT:
+ return "There is an <EntryPoint> node inside a <MainMarkers>.";
+ case VerificationNote::Code::UNEXPECTED_DURATION:
+ return "There is an <Duration> node inside a <MainMarkers>.";
+ case VerificationNote::Code::INVALID_CONTENT_KIND:
+ return String::compose("<ContentKind> has an invalid value %1.", note.note().get());
+ case VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA:
+ return String::compose("<MainPictureActiveaArea> has an invalid value: %1", note.note().get());
+ case VerificationNote::Code::DUPLICATE_ASSET_ID_IN_PKL:
+ return String::compose("The PKL %1 has more than one asset with the same ID.", note.note().get());
+ case VerificationNote::Code::DUPLICATE_ASSET_ID_IN_ASSETMAP:
+ return String::compose("The ASSETMAP %1 has more than one asset with the same ID.", note.note().get());
+ case VerificationNote::Code::MISSING_SUBTITLE:
+ return String::compose("The subtitle asset %1 has no subtitles.", note.note().get());
+ case VerificationNote::Code::INVALID_SUBTITLE_ISSUE_DATE:
+ return String::compose("<IssueDate> has an invalid value: %1", note.note().get());
+ case VerificationNote::Code::MISMATCHED_SOUND_CHANNEL_COUNTS:
+ return String::compose("The sound assets do not all have the same channel count; the first to differ is %1", note.file()->filename());
+ case VerificationNote::Code::INVALID_MAIN_SOUND_CONFIGURATION:
+ return String::compose("<MainSoundConfiguration> has an invalid value: %1", note.note().get());
+ case VerificationNote::Code::MISSING_FONT:
+ return String::compose("The font file for font ID \"%1\" was not found, or was not referred to in the ASSETMAP.", note.note().get());
+ case VerificationNote::Code::INVALID_JPEG2000_TILE_PART_SIZE:
+ return String::compose(
+ "Frame %1 has an image component that is too large (component %2 is %3 bytes in size).",
+ note.frame().get(), note.component().get(), note.size().get()
+ );
+ case VerificationNote::Code::INCORRECT_SUBTITLE_NAMESPACE_COUNT:
+ return String::compose("The XML in the subtitle asset %1 has more than one namespace declaration.", note.note().get());
+ case VerificationNote::Code::MISSING_LOAD_FONT_FOR_FONT:
+ return String::compose("A subtitle or closed caption refers to a font with ID %1 that does not have a corresponding <LoadFont> node", note.id().get());
+ case VerificationNote::Code::MISSING_LOAD_FONT:
+ return String::compose("The SMPTE subtitle asset %1 has <Text> nodes but no <LoadFont> node", note.id().get());
+ case VerificationNote::Code::MISMATCHED_ASSET_MAP_ID:
+ return String::compose("The asset with ID %1 in the asset map actually has an id of %2", note.id().get(), note.other_id().get());
+ case VerificationNote::Code::EMPTY_CONTENT_VERSION_LABEL_TEXT:
+ return String::compose("The <LabelText> in a <ContentVersion> in CPL %1 is empty", note.cpl_id().get());