- case dcp::VerificationNote::SUBTITLE_TOO_SHORT:
- return "At least one subtitle is less than the minimum of 15 frames suggested by Bv2.1";
- case dcp::VerificationNote::SUBTITLE_TOO_CLOSE:
- return "At least one pair of subtitles are separated by less than the the minimum of 2 frames suggested by Bv2.1";
- case dcp::VerificationNote::TOO_MANY_SUBTITLE_LINES:
- return "There are more than 3 subtitle lines in at least one place in the DCP, which Bv2.1 advises against.";
- case dcp::VerificationNote::SUBTITLE_LINE_LONGER_THAN_RECOMMENDED:
- return "There are more than 52 characters in at least one subtitle line, which Bv2.1 advises against.";
- case dcp::VerificationNote::SUBTITLE_LINE_TOO_LONG:
- return "There are more than 79 characters in at least one subtitle line, which Bv2.1 strongly advises against.";
- case dcp::VerificationNote::TOO_MANY_CLOSED_CAPTION_LINES:
- return "There are more than 3 closed caption lines in at least one place, which is disallowed by Bv2.1";
- case dcp::VerificationNote::CLOSED_CAPTION_LINE_TOO_LONG:
- return "There are more than 32 characters in at least one closed caption line, which is disallowed by Bv2.1";
- case dcp::VerificationNote::INVALID_SOUND_FRAME_RATE:
- return "A sound asset has a sampling rate other than 48kHz, which is disallowed by Bv2.1";
- case dcp::VerificationNote::MISSING_ANNOTATION_TEXT_IN_CPL:
- return "The CPL has no <AnnotationText> tag, which is required by Bv2.1";
- case dcp::VerificationNote::CPL_ANNOTATION_TEXT_DIFFERS_FROM_CONTENT_TITLE_TEXT:
- return "The CPL's <AnnotationText> differs from its <ContentTitleText>, which Bv2.1 advises against.";
- case dcp::VerificationNote::MISMATCHED_ASSET_DURATION:
- return "All assets in a reel do not have the same duration, which is required by Bv2.1";
+ case VerificationNote::Code::INVALID_SUBTITLE_DURATION:
+ return "At least one subtitle lasts less than 15 frames.";
+ case VerificationNote::Code::INVALID_SUBTITLE_SPACING:
+ return "At least one pair of subtitles is separated by less than 2 frames.";
+ case VerificationNote::Code::SUBTITLE_OVERLAPS_REEL_BOUNDARY:
+ return "At least one subtitle extends outside of its reel.";
+ case VerificationNote::Code::INVALID_SUBTITLE_LINE_COUNT:
+ return "There are more than 3 subtitle lines in at least one place in the DCP.";
+ case VerificationNote::Code::NEARLY_INVALID_SUBTITLE_LINE_LENGTH:
+ return "There are more than 52 characters in at least one subtitle line.";
+ case VerificationNote::Code::INVALID_SUBTITLE_LINE_LENGTH:
+ return "There are more than 79 characters in at least one subtitle line.";
+ case VerificationNote::Code::INVALID_CLOSED_CAPTION_LINE_COUNT:
+ return "There are more than 3 closed caption lines in at least one place.";
+ case VerificationNote::Code::INVALID_CLOSED_CAPTION_LINE_LENGTH:
+ return "There are more than 32 characters in at least one closed caption line.";
+ case VerificationNote::Code::INVALID_SOUND_FRAME_RATE:
+ return String::compose("The sound asset %1 has a sampling rate of %2", note.file()->filename(), note.note().get());
+ case VerificationNote::Code::MISSING_CPL_ANNOTATION_TEXT:
+ return String::compose("The CPL %1 has no <AnnotationText> tag.", note.note().get());
+ case VerificationNote::Code::MISMATCHED_CPL_ANNOTATION_TEXT:
+ return String::compose("The CPL %1 has an <AnnotationText> which differs from its <ContentTitleText>", note.note().get());
+ case VerificationNote::Code::MISMATCHED_ASSET_DURATION:
+ return "All assets in a reel do not have the same duration.";
+ case VerificationNote::Code::MISSING_MAIN_SUBTITLE_FROM_SOME_REELS:
+ return "At least one reel contains a subtitle asset, but some reel(s) do not";
+ case VerificationNote::Code::MISMATCHED_CLOSED_CAPTION_ASSET_COUNTS:
+ return "At least one reel has closed captions, but reels have different numbers of closed caption assets.";
+ 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.note().get());
+ case VerificationNote::Code::MISSING_CPL_METADATA_VERSION_NUMBER:
+ return String::compose("The CPL %1 has no <VersionNumber> in its <CompositionMetadataAsset>.", note.note().get());
+ case VerificationNote::Code::MISSING_EXTENSION_METADATA:
+ return String::compose("The CPL %1 has no <ExtensionMetadata> in its <CompositionMetadataAsset>.", note.note().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.note().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("The JPEG2000 codestream for at least one frame is invalid (%1)", 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.";