+ case VerificationNote::Code::INVALID_PICTURE_SIZE_IN_PIXELS:
+ return String::compose("The size %1 of picture asset %2 is not allowed.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::INVALID_PICTURE_FRAME_RATE_FOR_2K:
+ return String::compose("The frame rate %1 of picture asset %2 is not allowed for 2K DCPs.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::INVALID_PICTURE_FRAME_RATE_FOR_4K:
+ return String::compose("The frame rate %1 of picture asset %2 is not allowed for 4K DCPs.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D:
+ return "3D 4K DCPs are not allowed.";
+ case VerificationNote::Code::INVALID_CLOSED_CAPTION_XML_SIZE_IN_BYTES:
+ return String::compose("The size %1 of the closed caption asset %2 is larger than the 256KB maximum.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::INVALID_TIMED_TEXT_SIZE_IN_BYTES:
+ return String::compose("The size %1 of the timed text asset %2 is larger than the 115MB maximum.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::INVALID_TIMED_TEXT_FONT_SIZE_IN_BYTES:
+ return String::compose("The size %1 of the fonts in timed text asset %2 is larger than the 10MB maximum.", note.note().get(), note.file()->filename());
+ case VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE:
+ return String::compose("The XML for the SMPTE subtitle asset %1 has no <Language> tag.", note.file()->filename());
+ case VerificationNote::Code::MISMATCHED_SUBTITLE_LANGUAGES:
+ return "Some subtitle assets have different <Language> tags than others";
+ case VerificationNote::Code::MISSING_SUBTITLE_START_TIME:
+ return String::compose("The XML for the SMPTE subtitle asset %1 has no <StartTime> tag.", note.file()->filename());
+ case VerificationNote::Code::INVALID_SUBTITLE_START_TIME:
+ return String::compose("The XML for a SMPTE subtitle asset %1 has a non-zero <StartTime> tag.", note.file()->filename());
+ case VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME:
+ return "The first subtitle or closed caption is less than 4 seconds from the start of the DCP.";
+ 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.";