+ 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::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";