X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fverify.h;h=77fc28b39d671e78dd1586ddf5c5703c0bb307ff;hb=refs%2Ftags%2Fv1.8.63;hp=c0491422301c33c3142b0186f4142c2941907b39;hpb=a6a1294944d4ce02cbb429ca1aec07ca78d79a88;p=libdcp.git diff --git a/src/verify.h b/src/verify.h index c0491422..77fc28b3 100644 --- a/src/verify.h +++ b/src/verify.h @@ -58,9 +58,6 @@ namespace dcp { class VerificationNote { public: - /* I've been unable to make mingw happy with ERROR as a symbol, so - I'm using a VERIFY_ prefix here. - */ enum class Type { ERROR, BV21_ERROR, ///< may not always be considered an error, but violates a "shall" requirement of Bv2.1 @@ -82,13 +79,19 @@ public: * - MISMATCHED: two things, which should be the same, are not. * - EMPTY: something, which should have a value, has no value. * - MISSING: something, which should be present, is not. + * - UNEXPECTED: something, which is present, should not be. * - FAILED: some part of the verification failed in some serious way. * * Comments should clarify meaning and also say which of the optional fields (e.g. file) * are filled in when this code is used. */ + + // If you change the next line, also look in doc/manual/verifier.py in DCP-o-matic + // as it looks for it when compiling the manual. Also, in this enum: + // [...] will be taken as a reference to a section of Bv2.1 + // _foo_ means foo should be written as a piece of code enum class Code { - /** An error when reading the DCP + /** A general error when reading the DCP * note contains (probably technical) details */ FAILED_READ, @@ -97,7 +100,7 @@ public: * file contains CPL filename */ MISMATCHED_CPL_HASHES, - /** Frame rate given in a reel for the main picture is not 24, 25, 30, 48, 50 or 60 + /** The frame rate given in a reel for the main picture is not 24, 25, 30, 48, 50 or 60 * note contains the invalid frame rate as "/" */ INVALID_PICTURE_FRAME_RATE, @@ -117,7 +120,7 @@ public: * file contains the sound asset filename */ MISMATCHED_SOUND_HASHES, - /** An assetmap's entry is empty. */ + /** An assetmap's __ entry is empty */ EMPTY_ASSET_PATH, /** A file mentioned in an asset map cannot be found * file contains the filename that is missing @@ -125,19 +128,19 @@ public: MISSING_ASSET, /** The DCP contains both SMPTE and Interop-standard components */ MISMATCHED_STANDARD, - /** Some XML fails to validate against the XSD/DTD + /** Some XML fails to validate against its XSD/DTD * note contains the (probably technical) details * file contains the invalid filename * line contains the line number */ INVALID_XML, - /** No ASSETMAP{.xml} was found */ + /** No _ASSETMAP_ or _ASSETMAP.xml_ was found */ MISSING_ASSETMAP, - /** An asset's IntrinsicDuration is less than 1 second + /** An asset's _IntrinsicDuration_ is less than 1 second * note contains asset ID */ INVALID_INTRINSIC_DURATION, - /** An asset's Duration is less than 1 second + /** An asset's _Duration_ is less than 1 second * note contains asset ID */ INVALID_DURATION, @@ -159,16 +162,16 @@ public: THREED_ASSET_MARKED_AS_TWOD, /** DCP is Interop, not SMPTE [Bv2.1_6.1] */ INVALID_STANDARD, - /** A language or territory does not conform to RFC 5646 [Bv2.1_6.2.1]. + /** A language or territory does not conform to RFC 5646 [Bv2.1_6.2.1] * note contains the invalid language */ INVALID_LANGUAGE, - /** A picture asset does not have one of the required Bv2.1 sizes (in pixels) [Bv2.1_7.1]. + /** A picture asset does not have one of the required Bv2.1 sizes (in pixels) [Bv2.1_7.1] * note contains the incorrect size as "x" * file contains the asset filename */ INVALID_PICTURE_SIZE_IN_PIXELS, - /** A picture asset is 2K but is not at 24, 25 or 48 fps as required by Bv2.1 [Bv2.1_7.1]. + /** A picture asset is 2K but is not at 24, 25 or 48 fps as required by Bv2.1 [Bv2.1_7.1] * note contains the invalid frame rate as "/" * file contains the asset filename */ @@ -183,7 +186,7 @@ public: * file contains the asset filename */ INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D, - /** A closed caption's XML file is larger than 256KB [Bv2.1_7.2.1]. + /** A closed caption's XML file is larger than 256KB [Bv2.1_7.2.1] * note contains the invalid size in bytes * file contains the asset filename */ @@ -198,17 +201,17 @@ public: * file contains the asset filename */ INVALID_TIMED_TEXT_FONT_SIZE_IN_BYTES, - /** Some SMPTE subtitle XML has no tag [Bv2.1_7.2.2] + /** Some SMPTE subtitle XML has no __ tag [Bv2.1_7.2.2] * file contains the asset filename */ MISSING_SUBTITLE_LANGUAGE, - /** Not all subtitle assets specify the same tag [Bv2.1_7.2.2] */ + /** Not all subtitle assets specify the same __ tag [Bv2.1_7.2.2] */ MISMATCHED_SUBTITLE_LANGUAGES, - /** Some SMPTE subtitle XML has no tag [Bv2.1_7.2.3] + /** Some SMPTE subtitle XML has no __ tag [Bv2.1_7.2.3] * file contains the asset filename */ MISSING_SUBTITLE_START_TIME, - /** Some SMPTE subtitle XML has a non-zero tag [Bv2.1_7.2.3] + /** Some SMPTE subtitle XML has a non-zero __ tag [Bv2.1_7.2.3] * file contains the asset filename */ INVALID_SUBTITLE_START_TIME, @@ -230,101 +233,101 @@ public: INVALID_CLOSED_CAPTION_LINE_COUNT, /** There are more than 32 characters in at least one closed caption line [Bv2.1_7.2.6] */ INVALID_CLOSED_CAPTION_LINE_LENGTH, - /** The audio sampling rate must be 48kHz [Bv2.1_7.3]. + /** The audio sampling rate must be 48kHz [Bv2.1_7.3] * note contains the invalid frame rate * file contains the asset filename */ INVALID_SOUND_FRAME_RATE, - /** The CPL has no tag [Bv2.1_8.1] + /** The CPL has no __ tag [Bv2.1_8.1] * note contains the CPL ID * file contains the CPL filename */ MISSING_CPL_ANNOTATION_TEXT, - /** The is not the same as the [Bv2.1_8.1] + /** The __ is not the same as the __ [Bv2.1_8.1] * note contains the CPL ID * file contains the CPL filename */ MISMATCHED_CPL_ANNOTATION_TEXT, /** At least one asset in a reel does not have the same duration as the others */ MISMATCHED_ASSET_DURATION, - /** If one reel has a MainSubtitle, all must have them */ + /** If one reel has a _MainSubtitle_, all must have them */ MISSING_MAIN_SUBTITLE_FROM_SOME_REELS, - /** If one reel has at least one ClosedCaption, all reels must have the same number of ClosedCaptions */ + /** If one reel has at least one _ClosedCaption_, all reels must have the same number of _ClosedCaptions_ */ MISMATCHED_CLOSED_CAPTION_ASSET_COUNTS, - /** MainSubtitle in reels must have [Bv2.1_8.3.2] + /** MainSubtitle in reels must have __ [Bv2.1_8.3.2] * note contains the asset ID */ MISSING_SUBTITLE_ENTRY_POINT, - /** MainSubtitle must be zero [Bv2.1_8.3.2] + /** MainSubtitle __ must be zero [Bv2.1_8.3.2] * note contains the asset ID */ INCORRECT_SUBTITLE_ENTRY_POINT, - /** Closed caption in reels must have [Bv2.1_8.3.2] + /** Closed caption in reels must have __ [Bv2.1_8.3.2] * note contains the asset ID */ MISSING_CLOSED_CAPTION_ENTRY_POINT, - /** Closed caption MainSubtitle must be zero [Bv2.1_8.3.2] + /** Closed caption _MainSubtitle_ __ must be zero [Bv2.1_8.3.2] * note contains the asset ID */ INCORRECT_CLOSED_CAPTION_ENTRY_POINT, - /** must be present for assets in CPLs + /** __ must be present for assets in CPLs * note contains the asset ID */ MISSING_HASH, - /** If ContentKind is Feature there must be a FFEC marker */ + /** If _ContentKind_ is Feature there must be a FFEC marker */ MISSING_FFEC_IN_FEATURE, - /** If ContentKind is Feature there must be a FFMC marker */ + /** If _ContentKind_ is Feature there must be a FFMC marker */ MISSING_FFMC_IN_FEATURE, - /** There should be a FFOC */ + /** There should be a FFOC marker */ MISSING_FFOC, - /** There should be a LFOC */ + /** There should be a LFOC marker */ MISSING_LFOC, - /** The FFOC should be 1 + /** The FFOC marker should be 1 * note contains the incorrect value. */ INCORRECT_FFOC, - /** The LFOC should be the last frame in the reel + /** The LFOC marker should be the last frame in the reel * note contains the incorrect value */ INCORRECT_LFOC, - /** There must be a + /** There must be a __ * note contains the CPL ID * file contains the CPL filename */ MISSING_CPL_METADATA, - /** CPL metadata should contain of 1, at least + /** CPL metadata should contain __ of 1, at least * note contains the CPL ID * file contains the CPL filename */ MISSING_CPL_METADATA_VERSION_NUMBER, - /** There must be an in [Bv2.1_8.6.3] + /** There must be an __ in __ [Bv2.1_8.6.3] * note contains the CPL ID * file contains the CPL filename */ MISSING_EXTENSION_METADATA, - /** must have a particular form [Bv2.1_8.6.3] + /** __ does not have the correct form [Bv2.1_8.6.3] * note contains details of what's wrong * file contains the CPL filename */ INVALID_EXTENSION_METADATA, - /** CPLs containing encrypted content must be signed [Bv2.1_8.7] + /** A CPL containing encrypted content is not signed [Bv2.1_8.7] * note contains the CPL ID * file contains the CPL filename */ UNSIGNED_CPL_WITH_ENCRYPTED_CONTENT, - /** PKLs containing encrypted content must be signed [Bv2.1_8.7] + /** A PKL containing encrypted content is not signed [Bv2.1_8.7] * note contains the PKL ID * file contains the PKL filename */ UNSIGNED_PKL_WITH_ENCRYPTED_CONTENT, - /** If a PKL has one CPL its must be the same as the PKL's . + /** If a PKL has one CPL its __ must be the same as the PKL's __ * note contains the PKL ID * file contains the PKL filename */ MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, - /** If any content is encrypted, everything must be encrypted */ + /** Some, but not all content, is encrypted */ PARTIALLY_ENCRYPTED, - /** General error from our JPEG2000 codestream verification + /** General error during JPEG2000 codestream verification * note contains details */ INVALID_JPEG2000_CODESTREAM, @@ -370,17 +373,55 @@ public: INVALID_JPEG2000_TILE_PARTS_FOR_4K, /** No TLM marker was found [Bv2.1_10.2.1] */ MISSING_JPEG200_TLM_MARKER, - /** The MXF ResourceID of a timed text resource was not the same as that of the contained XML essence [Bv2.1_10.4.3] */ + /** The MXF _ResourceID_ of a timed text resource was not the same as that of the contained XML essence [Bv2.1_10.4.3] */ MISMATCHED_TIMED_TEXT_RESOURCE_ID, - /** The AssetID of a timed text MXF is the same as its ResourceID or that of the contained XML essence [Bv2.1_10.4.2] */ + /** The AssetID of a timed text MXF is the same as its _ResourceID_ or that of the contained XML essence [Bv2.1_10.4.2] */ INCORRECT_TIMED_TEXT_ASSET_ID, - /** The ContainerDuration of a timed text MXF is not the same as the Duration in its reel [Bv2.1_10_4_3] + /** The ContainerDuration of a timed text MXF is not the same as the _Duration_ in its reel [Bv2.1_10.4.3] * note contains the reel duration, followed by a space, followed by the MXF duration * file contains the asset filename */ MISMATCHED_TIMED_TEXT_DURATION, /** Something could not be verified because content is encrypted and no key is available */ MISSED_CHECK_OF_ENCRYPTED, + /** Some timed-text XML has an empty <_Text_> node */ + EMPTY_TEXT, + /** Some closed captions do not have the same vertical alignment within a <_Subtitle_> node */ + MISMATCHED_CLOSED_CAPTION_VALIGN, + /** Some closed captions are not listed in the XML in the order of their vertical position */ + INCORRECT_CLOSED_CAPTION_ORDERING, + /** Some asset has an that should not be there */ + UNEXPECTED_ENTRY_POINT, + /** Some asset has an that should not be there */ + UNEXPECTED_DURATION, + /** A has been specified with either no scope or the SMPTE 429-7 scope, but which is not one of those allowed */ + INVALID_CONTENT_KIND, + /** Either the width or height of a in a CPL is either not an even number, or bigger than the corresponding asset dimension. + * note contains details of what is wrong + * file contains the CPL filename + */ + INVALID_MAIN_PICTURE_ACTIVE_AREA, + /** A PKL has more than one asset with the same ID + * note contains the PKL ID + * file contains the PKL filename + */ + DUPLICATE_ASSET_ID_IN_PKL, + /** An ASSETMAP has more than one asset with the same ID + * note contains the ASSETMAP ID + * file contains the ASSETMAP filename + */ + DUPLICATE_ASSET_ID_IN_ASSETMAP, + /** An Interop subtitle asset has no subtitles. + * note contains the asset ID + * file contains the asset filename + */ + MISSING_SUBTITLE, + /** A SMPTE subtitle asset as an which is not of the form yyyy-mm-ddThh:mm:ss + * I can find no reference in a standard to this being required, but the Deluxe delivery + * specifications require it and their QC will fail DCPs that don't have it. + * note contains the incorrect + */ + INVALID_SUBTITLE_ISSUE_DATE }; VerificationNote (Type type, Code code) @@ -447,10 +488,21 @@ private: }; +struct VerificationOptions +{ + ///< If set, any assets larger than this number of bytes will not have their hashes checked + boost::optional maximum_asset_size_for_hash_check; + ///< true to check asset hashes (except those which match maximum_asset_size_for_hash_check) + ///< false to check no asset hashes. + bool check_asset_hashes = true; +}; + + std::vector verify ( std::vector directories, boost::function)> stage, boost::function progress, + VerificationOptions options = {}, boost::optional xsd_dtd_directory = boost::optional() );