Rationalise #undef-ing of ERROR.
[libdcp.git] / src / verify.h
index 8eec9749c44c3a121bea8ea10fc12ea12f9f0c23..2d3cc9df66c1562b174e381ec9864f0b28aefd64 100644 (file)
 #include <boost/filesystem.hpp>
 #include <boost/function.hpp>
 #include <boost/optional.hpp>
+#include <map>
 #include <string>
 #include <vector>
 
 
-/* Something in windows.h defines this */
+/* windows.h defines this but we want to use it */
 #undef ERROR
 
 
@@ -436,7 +437,31 @@ public:
                /** An interop subtitle file has a <LoadFont> node which refers to a font file that is not found.
                 *  note contains the <LoadFont> ID
                 */
-               MISSING_FONT
+               MISSING_FONT,
+               /** A tile part in a JPEG2000 frame is too big.
+                *  frame contains the frame index (counted from 0)
+                *  component contains the component index (0, 1 or 2)
+                *  size contains the invalid size in bytes.
+                */
+               INVALID_JPEG2000_TILE_PART_SIZE,
+               /** A subtitle XML root node has more than one namespace (xmlns) declaration.
+                *  note contains the asset ID
+                */
+               INCORRECT_SUBTITLE_NAMESPACE_COUNT,
+               /** A subtitle or closed caption file has a <Font> tag which refers to a font that is not
+                *  first introduced with a <LoadFont>.
+                *  id contains the ID of the <Font> tag.
+                */
+               MISSING_LOAD_FONT_FOR_FONT,
+               /** A SMPTE subtitle asset has at least one <Text> element but no <LoadFont>
+                *  id contains the ID of the subtitle asset.
+                */
+               MISSING_LOAD_FONT,
+               /** An ID in an asset map does not match the ID obtained from reading the actual file.
+                *  id contains the ID from the asset map.
+                *  other_id contains the ID from the file.
+                */
+               MISMATCHED_ASSET_MAP_ID,
        };
 
        VerificationNote (Type type, Code code)
@@ -485,9 +510,14 @@ public:
 
 private:
        enum class Data {
-               NOTE, ///< further information about the error
-               FILE, ///< path of file containing the error
-               LINE  ///< error line number within the FILE
+               NOTE,  ///< further information about the error
+               FILE,  ///< path of file containing the error
+               LINE,  ///< error line number within the FILE
+               FRAME,
+               COMPONENT,
+               SIZE,
+               ID,
+               OTHER_ID,
        };
 
        template <class T>
@@ -513,6 +543,51 @@ public:
                return data<uint64_t>(Data::LINE);
        }
 
+       VerificationNote& set_frame(int frame) {
+               _data[Data::FRAME] = frame;
+               return *this;
+       }
+
+       boost::optional<int> frame() const {
+               return data<int>(Data::FRAME);
+       }
+
+       VerificationNote& set_component(int component) {
+               _data[Data::COMPONENT] = component;
+               return *this;
+       }
+
+       boost::optional<int> component() const {
+               return data<int>(Data::COMPONENT);
+       }
+
+       VerificationNote& set_size(int size) {
+               _data[Data::SIZE] = size;
+               return *this;
+       }
+
+       boost::optional<int> size() const {
+               return data<int>(Data::SIZE);
+       }
+
+       VerificationNote& set_id(std::string id) {
+               _data[Data::ID] = id;
+               return *this;
+       }
+
+       boost::optional<std::string> id() const {
+               return data<std::string>(Data::ID);
+       }
+
+       VerificationNote& set_other_id(std::string other_id) {
+               _data[Data::OTHER_ID] = other_id;
+               return *this;
+       }
+
+       boost::optional<std::string> other_id() const {
+               return data<std::string>(Data::OTHER_ID);
+       }
+
 private:
        Type _type;
        Code _code;