Added first few XMP parser regression tests, updated property value types, fixed related Xmpdatum methods.

v0.27.3
Andreas Huggel 18 years ago
parent e043a7cd6a
commit f1d24641cd

@ -93,31 +93,31 @@ namespace Exiv2 {
};
extern const XmpPropertyInfo xmpDcInfo[] = {
{ "contributor", "contributor", "bag ProperName", xmpText, xmpExternal, "Contributors to the resource (other than the authors)." },
{ "contributor", "contributor", "bag ProperName", xmpArray, xmpExternal, "Contributors to the resource (other than the authors)." },
{ "coverage", "coverage", "Text", xmpText, xmpExternal, "The extent or scope of the resource." },
{ "creator", "creator", "seq ProperName", xmpText, xmpExternal, "The authors of the resource (listed in order of precedence, if significant)." },
{ "date", "date", "seq Date", xmpText, xmpExternal, "Date(s) that something interesting happened to the resource." },
{ "description", "description", "Lang Alt", xmpText, xmpExternal, "A textual description of the content of the resource. Multiple values may be "
{ "creator", "creator", "seq ProperName", xmpArray, xmpExternal, "The authors of the resource (listed in order of precedence, if significant)." },
{ "date", "date", "seq Date", xmpArray, xmpExternal, "Date(s) that something interesting happened to the resource." },
{ "description", "description", "Lang Alt", langAlt, xmpExternal, "A textual description of the content of the resource. Multiple values may be "
"present for different languages." },
{ "format", "format", "MIMEType", xmpText, xmpInternal, "The file format used when saving the resource. Tools and applications should set "
"this property to the save format of the data. It may include appropriate qualifiers." },
{ "identifier", "identifier", "Text", xmpText, xmpExternal, "Unique identifier of the resource." },
{ "language", "language", "bag Locale", xmpText, xmpInternal, "An unordered array specifying the languages used in the resource." },
{ "publisher", "publisher", "bag ProperName", xmpText, xmpExternal, "Publishers." },
{ "relation", "relation", "bag Text", xmpText, xmpInternal, "Relationships to other documents." },
{ "rights", "rights", "Lang Alt", xmpText, xmpExternal, "Informal rights statement, selected by language." },
{ "language", "language", "bag Locale", xmpArray, xmpInternal, "An unordered array specifying the languages used in the resource." },
{ "publisher", "publisher", "bag ProperName", xmpArray, xmpExternal, "Publishers." },
{ "relation", "relation", "bag Text", xmpArray, xmpInternal, "Relationships to other documents." },
{ "rights", "rights", "Lang Alt", langAlt, xmpExternal, "Informal rights statement, selected by language." },
{ "source", "source", "Text", xmpText, xmpExternal, "Unique identifier of the work from which this resource was derived." },
{ "subject", "subject", "bag Text", xmpText, xmpExternal, "An unordered array of descriptive phrases or keywords that specify the topic of the "
{ "subject", "subject", "bag Text", xmpArray, xmpExternal, "An unordered array of descriptive phrases or keywords that specify the topic of the "
"content of the resource." },
{ "title", "title", "Lang Alt", xmpText, xmpExternal, "The title of the document, or the name given to the resource. Typically, it will be "
{ "title", "title", "Lang Alt", langAlt, xmpExternal, "The title of the document, or the name given to the resource. Typically, it will be "
"a name by which the resource is formally known." },
{ "type", "type", "bag open Choice", xmpText, xmpExternal, "A document type; for example, novel, poem, or working paper." },
{ "type", "type", "bag open Choice", xmpArray, xmpExternal, "A document type; for example, novel, poem, or working paper." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
};
extern const XmpPropertyInfo xmpXmpInfo[] = {
{ "Advisory", "Advisory", "bag XPath", xmpText, xmpExternal, "An unordered array specifying properties that were edited outside the authoring "
{ "Advisory", "Advisory", "bag XPath", xmpArray, xmpExternal, "An unordered array specifying properties that were edited outside the authoring "
"application. Each item should contain a single namespace and XPath separated by "
"one ASCII space (U+0020)." },
{ "BaseURL", "BaseURL", "URL", xmpText, xmpInternal, "The base URL for relative URLs in the document content. If this document contains "
@ -129,7 +129,7 @@ namespace Exiv2 {
{ "CreatorTool", "CreatorTool", "AgentName", xmpText, xmpInternal, "The name of the first known tool used to create the resource. If history is "
"present in the metadata, this value should be equivalent to that of "
"xmpMM:History's softwareAgent property." },
{ "Identifier", "Identifier", "bag Text", xmpText, xmpExternal, "An unordered array of text strings that unambiguously identify the resource within "
{ "Identifier", "Identifier", "bag Text", xmpArray, xmpExternal, "An unordered array of text strings that unambiguously identify the resource within "
"a given context. An array item may be qualified with xmpidq:Scheme to denote the "
"formal identification system to which that identifier conforms. Note: The "
"dc:identifier property is not used because it lacks a defined scheme qualifier and "
@ -142,7 +142,7 @@ namespace Exiv2 {
"is not necessarily the same as the file's system modification date because it is "
"set before the file is saved." },
{ "Nickname", "Nickname", "Text", xmpText, xmpExternal, "A short informal name for the resource." },
{ "Rating", "Rating", "Closed Choice of Integer", signedLong, xmpExternal, "A number that indicates a document's status relative to other documents, "
{ "Rating", "Rating", "Closed Choice of Integer", xmpText, xmpExternal, "A number that indicates a document's status relative to other documents, "
"used to organize documents in a file browser. Values are user-defined within an "
"application-defined range." },
{ "Thumbnails", "Thumbnails", "alt Thumbnail", undefined, xmpInternal, "An alternative array of thumbnail images for a file, which can differ in "
@ -154,8 +154,8 @@ namespace Exiv2 {
extern const XmpPropertyInfo xmpXmpRightsInfo[] = {
{ "Certificate", "Certificate", "URL", xmpText, xmpExternal, "Online rights management certificate." },
{ "Marked", "Marked", "Boolean", xmpText, xmpExternal, "Indicates that this is a rights-managed resource." },
{ "Owner", "Owner", "bag ProperName", xmpText, xmpExternal, "An unordered array specifying the legal owner(s) of a resource." },
{ "UsageTerms", "UsageTerms", "Lang Alt", xmpText, xmpExternal, "Text instructions on how a resource can be legally used." },
{ "Owner", "Owner", "bag ProperName", xmpArray, xmpExternal, "An unordered array specifying the legal owner(s) of a resource." },
{ "UsageTerms", "UsageTerms", "Lang Alt", langAlt, xmpExternal, "Text instructions on how a resource can be legally used." },
{ "WebStatement", "WebStatement", "URL", xmpText, xmpExternal, "The location of a web page describing the owner and/or rights statement for this resource." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
@ -205,7 +205,7 @@ namespace Exiv2 {
{ "LastURL", "LastURL", "URL", xmpText, xmpInternal, "Deprecated for privacy protection." },
{ "RenditionOf", "RenditionOf", "ResourceRef", xmpText, xmpInternal, "Deprecated in favor of xmpMM:DerivedFrom. A reference to the document of which this is "
"a rendition." },
{ "SaveID", "SaveID", "Integer", signedLong, xmpInternal, "Deprecated. Previously used only to support the xmpMM:LastURL property." },
{ "SaveID", "SaveID", "Integer", xmpText, xmpInternal, "Deprecated. Previously used only to support the xmpMM:LastURL property." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
};
@ -221,10 +221,10 @@ namespace Exiv2 {
extern const XmpPropertyInfo xmpXmpTPgInfo[] = {
{ "MaxPageSize", "MaxPageSize", "Dimensions", xmpText, xmpInternal, "The size of the largest page in the document (including any in contained documents)." },
{ "NPages", "NPages", "Integer", unsignedLong, xmpInternal, "The number of pages in the document (including any in contained documents)." },
{ "NPages", "NPages", "Integer", xmpText, xmpInternal, "The number of pages in the document (including any in contained documents)." },
{ "Fonts", "Fonts", "bag Font", xmpText, xmpInternal, "An unordered array of fonts that are used in the document (including any in contained documents)." },
{ "Colorants", "Colorants", "seq Colorant", xmpText, xmpInternal, "An ordered array of colorants (swatches) that are used in the document (including any in contained documents)." },
{ "PlateNames", "PlateNames", "seq Text", xmpText, xmpInternal, "An ordered array of plate names that are needed to print the document (including any in contained documents)." },
{ "PlateNames", "PlateNames", "seq Text", xmpArray, xmpInternal, "An ordered array of plate names that are needed to print the document (including any in contained documents)." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
};
@ -233,7 +233,7 @@ namespace Exiv2 {
{ "projectRef", "projectRef", "ProjectLink", xmpText, xmpInternal, "A reference to the project that created this file." },
{ "videoFrameRate", "videoFrameRate", "open Choice of Text", xmpText, xmpInternal, "The video frame rate. One of: 24, NTSC, PAL." },
{ "videoFrameSize", "videoFrameSize", "Dimensions", xmpText, xmpInternal, "The frame size. For example: w:720, h: 480, unit:pixels" },
{ "videoPixelAspectRatio", "videoPixelAspectRatio", "Rational", unsignedRational, xmpInternal, "The aspect ratio, expressed as ht/wd. For example: \"648/720\" = 0.9" },
{ "videoPixelAspectRatio", "videoPixelAspectRatio", "Rational", xmpText, xmpInternal, "The aspect ratio, expressed as ht/wd. For example: \"648/720\" = 0.9" },
{ "videoPixelDepth", "videoPixelDepth", "closed Choice of Text", xmpText, xmpInternal, "The size in bits of each color component of a pixel. Standard Windows 32-bit "
"pixels have 8 bits per component. One of: 8Int, 16Int, 32Int, 32Float." },
{ "videoColorSpace", "videoColorSpace", "closed Choice of Text", xmpText, xmpInternal, "The color space. One of: sRGB (used by Photoshop), CCIR-601 (used for NTSC), "
@ -246,13 +246,13 @@ namespace Exiv2 {
{ "videoFieldOrder", "videoFieldOrder", "closed Choice of Text", xmpText, xmpInternal, "The field order for video. One of: Upper, Lower, Progressive." },
{ "pullDown", "pullDown", "closed Choice of Text", xmpText, xmpInternal, "The sampling phase of film to be converted to video (pull-down). One of: "
"WSSWW, SSWWW, SWWWS, WWWSS, WWSSW, WSSWW_24p, SSWWW_24p, SWWWS_24p, WWWSS_24p, WWSSW_24p." },
{ "audioSampleRate", "audioSampleRate", "Integer", unsignedLong, xmpInternal, "The audio sample rate. Can be any value, but commonly 32000, 41100, or 48000." },
{ "audioSampleRate", "audioSampleRate", "Integer", xmpText, xmpInternal, "The audio sample rate. Can be any value, but commonly 32000, 41100, or 48000." },
{ "audioSampleType", "audioSampleType", "closed Choice of Text", xmpText, xmpInternal, "The audio sample type. One of: 8Int, 16Int, 32Int, 32Float." },
{ "audioChannelType", "audioChannelType", "closed Choice of Text", xmpText, xmpInternal, "The audio channel type. One of: Mono, Stereo, 5.1, 7.1." },
{ "audioCompressor", "audioCompressor", "Text", xmpText, xmpInternal, "The audio compression used. For example, MP3." },
{ "speakerPlacement", "speakerPlacement", "Text", xmpText, xmpExternal, "A description of the speaker angles from center front in degrees. For example: "
"\"Left = -30, Right = 30, Center = 0, LFE = 45, Left Surround = -110, Right Surround = 110\"" },
{ "fileDataRate", "fileDataRate", "Rational", unsignedRational, xmpInternal, "The file data rate in megabytes per second. For example: \"36/10\" = 3.6 MB/sec" },
{ "fileDataRate", "fileDataRate", "Rational", xmpText, xmpInternal, "The file data rate in megabytes per second. For example: \"36/10\" = 3.6 MB/sec" },
{ "tapeName", "tapeName", "Text", xmpText, xmpExternal, "The name of the tape from which the clip was captured, as set during the capture process." },
{ "altTapeName", "altTapeName", "Text", xmpText, xmpExternal, "An alternative tape name, set via the project window or timecode dialog in Premiere. "
"If an alternative name has been set and has not been reverted, that name is displayed." },
@ -274,7 +274,7 @@ namespace Exiv2 {
{ "metadataModDate", "metadataModDate", "Date", xmpText, xmpInternal, "The date and time when the metadata was last modified." },
{ "artist", "artist", "Text", xmpText, xmpExternal, "The name of the artist or artists." },
{ "album", "album", "Text", xmpText, xmpExternal, "The name of the album." },
{ "trackNumber", "trackNumber", "Integer", unsignedShort, xmpExternal, "A numeric value indicating the order of the audio file within its original recording." },
{ "trackNumber", "trackNumber", "Integer", xmpText, xmpExternal, "A numeric value indicating the order of the audio file within its original recording." },
{ "genre", "genre", "Text", xmpText, xmpExternal, "The name of the genre." },
{ "copyright", "copyright", "Text", xmpText, xmpExternal, "The copyright information." },
{ "releaseDate", "releaseDate", "Date", xmpText, xmpExternal, "The date the title was released." },
@ -322,7 +322,7 @@ namespace Exiv2 {
{ "Instructions", "Instructions", "Text", xmpText, xmpExternal, "Special instructions." },
{ "Source", "Source", "Text", xmpText, xmpExternal, "Source." },
{ "State", "State", "Text", xmpText, xmpExternal, "Province/state." },
{ "SupplementalCategories", "SupplementalCategories", "bag Text", xmpText, xmpExternal, "Supplemental category." },
{ "SupplementalCategories", "SupplementalCategories", "bag Text", xmpArray, xmpExternal, "Supplemental category." },
{ "TransmissionReference", "TransmissionReference", "Text", xmpText, xmpExternal, "Original transmission reference." },
{ "Urgency", "Urgency", "Integer", xmpText, xmpExternal, "Urgency. Valid range is 1-8." },
// End of list marker
@ -341,14 +341,14 @@ namespace Exiv2 {
{ "AutoContrast", "AutoContrast", "Boolean", xmpText, xmpExternal, "When true, \"Contrast\" is automatically adjusted." },
{ "AutoExposure", "AutoExposure", "Boolean", xmpText, xmpExternal, "When true, \"Exposure\" is automatically adjusted." },
{ "AutoShadows", "AutoShadows", "Boolean", xmpText, xmpExternal, "When true,\"Shadows\" is automatically adjusted." },
{ "BlueHue", "BlueHue", "Integer", signedShort, xmpExternal, "\"Blue Hue\" setting. Range -100 to 100." },
{ "BlueSaturation", "BlueSaturation", "Integer", signedShort, xmpExternal, "\"Blue Saturation\" setting. Range -100 to +100." },
{ "Brightness", "Brightness", "Integer", unsignedShort, xmpExternal, "\"Brightness\" setting. Range 0 to +150." },
{ "BlueHue", "BlueHue", "Integer", xmpText, xmpExternal, "\"Blue Hue\" setting. Range -100 to 100." },
{ "BlueSaturation", "BlueSaturation", "Integer", xmpText, xmpExternal, "\"Blue Saturation\" setting. Range -100 to +100." },
{ "Brightness", "Brightness", "Integer", xmpText, xmpExternal, "\"Brightness\" setting. Range 0 to +150." },
{ "CameraProfile", "CameraProfile", "Text", xmpText, xmpExternal, "\"Camera Profile\" setting." },
{ "ChromaticAberrationB", "ChromaticAberrationB", "Integer", signedShort, xmpExternal, "\"Chomatic Aberration, Fix Blue/Yellow Fringe\" setting. Range -100 to +100." },
{ "ChromaticAberrationR", "ChromaticAberrationR", "Integer", signedShort, xmpExternal, "\"Chomatic Aberration, Fix Red/Cyan Fringe\" setting. Range -100 to +100." },
{ "ColorNoiseReduction", "ColorNoiseReduction", "Integer", unsignedShort, xmpExternal, "\"Color Noise Reducton\" setting. Range 0 to +100." },
{ "Contrast", "Contrast", "Integer", signedShort, xmpExternal, "\"Contrast\" setting. Range -50 to +100." },
{ "ChromaticAberrationB", "ChromaticAberrationB", "Integer", xmpText, xmpExternal, "\"Chomatic Aberration, Fix Blue/Yellow Fringe\" setting. Range -100 to +100." },
{ "ChromaticAberrationR", "ChromaticAberrationR", "Integer", xmpText, xmpExternal, "\"Chomatic Aberration, Fix Red/Cyan Fringe\" setting. Range -100 to +100." },
{ "ColorNoiseReduction", "ColorNoiseReduction", "Integer", xmpText, xmpExternal, "\"Color Noise Reducton\" setting. Range 0 to +100." },
{ "Contrast", "Contrast", "Integer", xmpText, xmpExternal, "\"Contrast\" setting. Range -50 to +100." },
{ "CropTop", "CropTop", "Real", xmpText, xmpExternal, "When HasCrop is true, top of crop rectangle" },
{ "CropLeft", "CropLeft", "Real", xmpText, xmpExternal, "When HasCrop is true, left of crop rectangle." },
{ "CropBottom", "CropBottom", "Real", xmpText, xmpExternal, "When HasCrop is true, bottom of crop rectangle." },
@ -356,28 +356,28 @@ namespace Exiv2 {
{ "CropAngle", "CropAngle", "Real", xmpText, xmpExternal, "When HasCrop is true, angle of crop rectangle." },
{ "CropWidth", "CropWidth", "Real", xmpText, xmpExternal, "Width of resulting cropped image in CropUnits units." },
{ "CropHeight", "CropHeight", "Real", xmpText, xmpExternal, "Height of resulting cropped image in CropUnits units." },
{ "CropUnits", "CropUnits", "Integer", unsignedShort, xmpExternal, "Units for CropWidth and CropHeight. 0=pixels, 1=inches, 2=cm" },
{ "CropUnits", "CropUnits", "Integer", xmpText, xmpExternal, "Units for CropWidth and CropHeight. 0=pixels, 1=inches, 2=cm" },
{ "Exposure", "Exposure", "Real", xmpText, xmpExternal, "\"Exposure\" setting. Range -4.0 to +4.0." },
{ "GreenHue", "GreenHue", "Integer", signedShort, xmpExternal, "\"Green Hue\" setting. Range -100 to +100." },
{ "GreenSaturation", "GreenSaturation", "Integer", signedShort, xmpExternal, "\"Green Saturation\" setting. Range -100 to +100." },
{ "GreenHue", "GreenHue", "Integer", xmpText, xmpExternal, "\"Green Hue\" setting. Range -100 to +100." },
{ "GreenSaturation", "GreenSaturation", "Integer", xmpText, xmpExternal, "\"Green Saturation\" setting. Range -100 to +100." },
{ "HasCrop", "HasCrop", "Boolean", xmpText, xmpExternal, "When true, image has a cropping rectangle." },
{ "HasSettings", "HasSettings", "Boolean", xmpText, xmpExternal, "When true, non-default camera raw settings." },
{ "LuminanceSmoothing", "LuminanceSmoothing", "Integer", unsignedShort, xmpExternal, "\"Luminance Smoothing\" setting. Range 0 to +100." },
{ "LuminanceSmoothing", "LuminanceSmoothing", "Integer", xmpText, xmpExternal, "\"Luminance Smoothing\" setting. Range 0 to +100." },
{ "RawFileName", "RawFileName", "Text", xmpText, xmpInternal, "File name fo raw file (not a complete path)." },
{ "RedHue", "RedHue", "Integer", signedShort, xmpExternal, "\"Red Hue\" setting. Range -100 to +100." },
{ "RedSaturation", "RedSaturation", "Integer", signedShort, xmpExternal, "\"Red Saturation\" setting. Range -100 to +100." },
{ "Saturation", "Saturation", "Integer", signedShort, xmpExternal, "\"Saturation\" setting. Range -100 to +100." },
{ "Shadows", "Shadows", "Integer", unsignedShort, xmpExternal, "\"Shadows\" setting. Range 0 to +100." },
{ "ShadowTint", "ShadowTint", "Integer", signedShort, xmpExternal, "\"Shadow Tint\" setting. Range -100 to +100." },
{ "Sharpness", "Sharpness", "Integer", unsignedShort, xmpExternal, "\"Sharpness\" setting. Range 0 to +100." },
{ "Temperature", "Temperature", "Integer", unsignedShort, xmpExternal, "\"Temperature\" setting. Range 2000 to 50000." },
{ "Tint", "Tint", "Integer", signedShort, xmpExternal, "\"Tint\" setting. Range -150 to +150." },
{ "RedHue", "RedHue", "Integer", xmpText, xmpExternal, "\"Red Hue\" setting. Range -100 to +100." },
{ "RedSaturation", "RedSaturation", "Integer", xmpText, xmpExternal, "\"Red Saturation\" setting. Range -100 to +100." },
{ "Saturation", "Saturation", "Integer", xmpText, xmpExternal, "\"Saturation\" setting. Range -100 to +100." },
{ "Shadows", "Shadows", "Integer", xmpText, xmpExternal, "\"Shadows\" setting. Range 0 to +100." },
{ "ShadowTint", "ShadowTint", "Integer", xmpText, xmpExternal, "\"Shadow Tint\" setting. Range -100 to +100." },
{ "Sharpness", "Sharpness", "Integer", xmpText, xmpExternal, "\"Sharpness\" setting. Range 0 to +100." },
{ "Temperature", "Temperature", "Integer", xmpText, xmpExternal, "\"Temperature\" setting. Range 2000 to 50000." },
{ "Tint", "Tint", "Integer", xmpText, xmpExternal, "\"Tint\" setting. Range -150 to +150." },
{ "ToneCurve", "ToneCurve", "Seq of points (Integer, Integer)", xmpText, xmpExternal, "Array of points (Integer, Integer) defining a \"Tone Curve\"." },
{ "ToneCurveName", "ToneCurveName", "Choice Text", xmpText, xmpInternal, "The name of the Tone Curve described by ToneCurve. One of: Linear, Medium Contrast, "
"Strong Contrast, Custom or a user-defined preset name." },
{ "Version", "Version", "Text", xmpText, xmpInternal, "Version of Camera Raw plugin." },
{ "VignetteAmount", "VignetteAmount", "Integer", signedShort, xmpExternal, "\"Vignetting Amount\" setting. Range -100 to +100." },
{ "VignetteMidpoint", "VignetteMidpoint", "Integer", unsignedShort, xmpExternal, "\"Vignetting Midpoint\" setting. Range 0 to +100." },
{ "VignetteAmount", "VignetteAmount", "Integer", xmpText, xmpExternal, "\"Vignetting Amount\" setting. Range -100 to +100." },
{ "VignetteMidpoint", "VignetteMidpoint", "Integer", xmpText, xmpExternal, "\"Vignetting Midpoint\" setting. Range 0 to +100." },
{ "WhiteBalance", "WhiteBalance", "Closed Choice Text", xmpText, xmpExternal, "\"White Balance\" setting. One of: As Shot, Auto, Daylight, Cloudy, Shade, Tungsten, "
"Fluorescent, Flash, Custom" },
// End of list marker
@ -385,12 +385,12 @@ namespace Exiv2 {
};
extern const XmpPropertyInfo xmpTiffInfo[] = {
{ "ImageWidth", "ImageWidth", "Integer", unsignedLong, xmpInternal, "TIFF tag 256, 0x100. Image width in pixels." },
{ "ImageLength", "ImageLength", "Integer", unsignedLong, xmpInternal, "TIFF tag 257, 0x101. Image height in pixels." },
{ "BitsPerSample", "BitsPerSample", "seq Integer", unsignedShort, xmpInternal, "TIFF tag 258, 0x102. Number of bits per component in each channel." },
{ "Compression", "Compression", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 259, 0x103. Compression scheme: 1 = uncompressed; 6 = JPEG." },
{ "PhotometricInterpretation", "PhotometricInterpretation", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 262, 0x106. Pixel Composition: 2 = RGB; 6 = YCbCr." },
{ "Orientation", "Orientation", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 274, 0x112. Orientation:"
{ "ImageWidth", "ImageWidth", "Integer", xmpText, xmpInternal, "TIFF tag 256, 0x100. Image width in pixels." },
{ "ImageLength", "ImageLength", "Integer", xmpText, xmpInternal, "TIFF tag 257, 0x101. Image height in pixels." },
{ "BitsPerSample", "BitsPerSample", "seq Integer", xmpArray, xmpInternal, "TIFF tag 258, 0x102. Number of bits per component in each channel." },
{ "Compression", "Compression", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 259, 0x103. Compression scheme: 1 = uncompressed; 6 = JPEG." },
{ "PhotometricInterpretation", "PhotometricInterpretation", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 262, 0x106. Pixel Composition: 2 = RGB; 6 = YCbCr." },
{ "Orientation", "Orientation", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 274, 0x112. Orientation:"
"1 = 0th row at top, 0th column at left "
"2 = 0th row at top, 0th column at right "
"3 = 0th row at bottom, 0th column at right "
@ -399,36 +399,36 @@ namespace Exiv2 {
"6 = 0th row at right, 0th column at top "
"7 = 0th row at right, 0th column at bottom "
"8 = 0th row at left, 0th column at bottom" },
{ "SamplesPerPixel", "SamplesPerPixel", "Integer", unsignedShort, xmpInternal, "TIFF tag 277, 0x115. Number of components per pixel." },
{ "PlanarConfiguration", "PlanarConfiguration", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 284, 0x11C. Data layout:1 = chunky; 2 = planar." },
{ "YCbCrSubSampling", "YCbCrSubSampling", "Closed Choice of seq Integer", unsignedShort, xmpInternal, "TIFF tag 530, 0x212. Sampling ratio of chrominance "
{ "SamplesPerPixel", "SamplesPerPixel", "Integer", xmpText, xmpInternal, "TIFF tag 277, 0x115. Number of components per pixel." },
{ "PlanarConfiguration", "PlanarConfiguration", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 284, 0x11C. Data layout:1 = chunky; 2 = planar." },
{ "YCbCrSubSampling", "YCbCrSubSampling", "Closed Choice of seq Integer", xmpArray, xmpInternal, "TIFF tag 530, 0x212. Sampling ratio of chrominance "
"components: [2, 1] = YCbCr4:2:2; [2, 2] = YCbCr4:2:0" },
{ "YCbCrPositioning", "YCbCrPositioning", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 531, 0x213. Position of chrominance vs. "
{ "YCbCrPositioning", "YCbCrPositioning", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 531, 0x213. Position of chrominance vs. "
"luminance components: 1 = centered; 2 = co-sited." },
{ "XResolution", "XResolution", "Rational", unsignedRational, xmpInternal, "TIFF tag 282, 0x11A. Horizontal resolution in pixels per unit." },
{ "YResolution", "YResolution", "Rational", unsignedRational, xmpInternal, "TIFF tag 283, 0x11B. Vertical resolution in pixels per unit." },
{ "ResolutionUnit", "ResolutionUnit", "Closed Choice of Integer", unsignedShort, xmpInternal, "TIFF tag 296, 0x128. Unit used for XResolution and "
{ "XResolution", "XResolution", "Rational", xmpText, xmpInternal, "TIFF tag 282, 0x11A. Horizontal resolution in pixels per unit." },
{ "YResolution", "YResolution", "Rational", xmpText, xmpInternal, "TIFF tag 283, 0x11B. Vertical resolution in pixels per unit." },
{ "ResolutionUnit", "ResolutionUnit", "Closed Choice of Integer", xmpText, xmpInternal, "TIFF tag 296, 0x128. Unit used for XResolution and "
"YResolution. Value is one of: 2 = inches; 3 = centimeters." },
{ "TransferFunction", "TransferFunction", "seq Integer", unsignedShort, xmpInternal, "TIFF tag 301, 0x12D. Transfer function for image "
{ "TransferFunction", "TransferFunction", "seq Integer", xmpArray, xmpInternal, "TIFF tag 301, 0x12D. Transfer function for image "
"described in tabular style with 3 * 256 entries." },
{ "WhitePoint", "WhitePoint", "seq Rational", unsignedRational, xmpInternal, "TIFF tag 318, 0x13E. Chromaticity of white point." },
{ "PrimaryChromaticities", "PrimaryChromaticities", "seq Rational", unsignedRational, xmpInternal, "TIFF tag 319, 0x13F. Chromaticity of the three primary colors." },
{ "YCbCrCoefficients", "YCbCrCoefficients", "seq Rational", unsignedRational, xmpInternal, "TIFF tag 529, 0x211. Matrix coefficients for RGB to YCbCr transformation." },
{ "ReferenceBlackWhite", "ReferenceBlackWhite", "seq Rational", unsignedRational, xmpInternal, "TIFF tag 532, 0x214. Reference black and white point values." },
{ "WhitePoint", "WhitePoint", "seq Rational", xmpArray, xmpInternal, "TIFF tag 318, 0x13E. Chromaticity of white point." },
{ "PrimaryChromaticities", "PrimaryChromaticities", "seq Rational", xmpArray, xmpInternal, "TIFF tag 319, 0x13F. Chromaticity of the three primary colors." },
{ "YCbCrCoefficients", "YCbCrCoefficients", "seq Rational", xmpArray, xmpInternal, "TIFF tag 529, 0x211. Matrix coefficients for RGB to YCbCr transformation." },
{ "ReferenceBlackWhite", "ReferenceBlackWhite", "seq Rational", xmpArray, xmpInternal, "TIFF tag 532, 0x214. Reference black and white point values." },
{ "DateTime", "DateTime", "Date", date, xmpInternal, "TIFF tag 306, 0x132 (primary) and EXIF tag 37520, "
"0x9290 (subseconds). Date and time of image creation "
"(no time zone in EXIF), stored in ISO 8601 format, not "
"the original EXIF format. This property includes the "
"value for the EXIF SubSecTime attribute. "
"NOTE: This property is stored in XMP as xmp:ModifyDate." },
{ "ImageDescription", "ImageDescription", "Lang Alt", xmpText, xmpExternal, "TIFF tag 270, 0x10E. Description of the image. Note: This property is stored in XMP as dc:description." },
{ "ImageDescription", "ImageDescription", "Lang Alt", langAlt, xmpExternal, "TIFF tag 270, 0x10E. Description of the image. Note: This property is stored in XMP as dc:description." },
{ "Make", "Make", "ProperName", xmpText, xmpInternal, "TIFF tag 271, 0x10F. Manufacturer of recording equipment." },
{ "Model", "Model", "ProperName", xmpText, xmpInternal, "TIFF tag 272, 0x110. Model name or number of equipment." },
{ "Software", "Software", "AgentName", xmpText, xmpInternal, "TIFF tag 305, 0x131. Software or firmware used to generate image. "
"Note: This property is stored in XMP as xmp:CreatorTool. " },
{ "Artist", "Artist", "ProperName", xmpText, xmpExternal, "TIFF tag 315, 0x13B. Camera owner, photographer or image creator. "
"Note: This property is stored in XMP as the first item in the dc:creator array." },
{ "Copyright", "Copyright", "Lang Alt", xmpText, xmpExternal, "TIFF tag 33432, 0x8298. Copyright information. "
{ "Copyright", "Copyright", "Lang Alt", langAlt, xmpExternal, "TIFF tag 33432, 0x8298. Copyright information. "
"Note: This property is stored in XMP as dc:rights." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
@ -633,90 +633,90 @@ namespace Exiv2 {
extern const XmpPropertyInfo xmpExifInfo[] = {
{ "ExifVersion", "ExifVersion", "Closed Choice of Text", xmpText, xmpInternal, "EXIF tag 36864, 0x9000. EXIF version number." },
{ "FlashpixVersion", "FlashpixVersion", "Closed Choice of Text", xmpText, xmpInternal, "EXIF tag 40960, 0xA000. Version of FlashPix." },
{ "ColorSpace", "ColorSpace", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 40961, 0xA001. Color space information" },
{ "ComponentsConfiguration", "ComponentsConfiguration", "Closed Choice of seq Integer", unsignedShort, xmpInternal, "EXIF tag 37121, 0x9101. Configuration of components in data: 4 5 6 0 (if RGB compressed data), 1 2 3 0 (other cases)." },
{ "CompressedBitsPerPixel", "CompressedBitsPerPixel", "Rational", unsignedRational, xmpInternal, "EXIF tag 37122, 0x9102. Compression mode used for a compressed image is indicated in unit bits per pixel." },
{ "PixelXDimension", "PixelXDimension", "Integer", unsignedLong, xmpInternal, "EXIF tag 40962, 0xA002. Valid image width, in pixels." },
{ "PixelYDimension", "PixelYDimension", "Integer", unsignedLong, xmpInternal, "EXIF tag 40963, 0xA003. Valid image height, in pixels." },
{ "UserComment", "UserComment", "Lang Alt", xmpText, xmpExternal, "EXIF tag 37510, 0x9286. Comments from user." },
{ "ColorSpace", "ColorSpace", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 40961, 0xA001. Color space information" },
{ "ComponentsConfiguration", "ComponentsConfiguration", "Closed Choice of seq Integer", xmpArray, xmpInternal, "EXIF tag 37121, 0x9101. Configuration of components in data: 4 5 6 0 (if RGB compressed data), 1 2 3 0 (other cases)." },
{ "CompressedBitsPerPixel", "CompressedBitsPerPixel", "Rational", xmpText, xmpInternal, "EXIF tag 37122, 0x9102. Compression mode used for a compressed image is indicated in unit bits per pixel." },
{ "PixelXDimension", "PixelXDimension", "Integer", xmpText, xmpInternal, "EXIF tag 40962, 0xA002. Valid image width, in pixels." },
{ "PixelYDimension", "PixelYDimension", "Integer", xmpText, xmpInternal, "EXIF tag 40963, 0xA003. Valid image height, in pixels." },
{ "UserComment", "UserComment", "Lang Alt", langAlt, xmpExternal, "EXIF tag 37510, 0x9286. Comments from user." },
{ "RelatedSoundFile", "RelatedSoundFile", "Text", xmpText, xmpInternal, "EXIF tag 40964, 0xA004. An \"8.3\" file name for the related sound file." },
{ "DateTimeOriginal", "DateTimeOriginal", "Date", xmpText, xmpInternal, "EXIF tags 36867, 0x9003 (primary) and 37521, 0x9291 (subseconds). Date and time when original image was generated, in ISO 8601 format. Includes the EXIF SubSecTimeOriginal data." },
{ "DateTimeDigitized", "DateTimeDigitized", "Date", xmpText, xmpInternal, "EXIF tag 36868, 0x9004 (primary) and 37522, 0x9292 (subseconds). Date and time when "
"image was stored as digital data, can be the same as DateTimeOriginal if originally "
"stored in digital form. Stored in ISO 8601 format. Includes the EXIF SubSecTimeDigitized data." },
{ "ExposureTime", "ExposureTime", "Rational", unsignedRational, xmpInternal, "EXIF tag 33434, 0x829A. Exposure time in seconds." },
{ "FNumber", "FNumber", "Rational", unsignedRational, xmpInternal, "EXIF tag 33437, 0x829D. F number." },
{ "ExposureProgram", "ExposureProgram", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 34850, 0x8822. Class of program used for exposure." },
{ "ExposureTime", "ExposureTime", "Rational", xmpText, xmpInternal, "EXIF tag 33434, 0x829A. Exposure time in seconds." },
{ "FNumber", "FNumber", "Rational", xmpText, xmpInternal, "EXIF tag 33437, 0x829D. F number." },
{ "ExposureProgram", "ExposureProgram", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 34850, 0x8822. Class of program used for exposure." },
{ "SpectralSensitivity", "SpectralSensitivity", "Text", xmpText, xmpInternal, "EXIF tag 34852, 0x8824. Spectral sensitivity of each channel." },
{ "ISOSpeedRatings", "ISOSpeedRatings", "seq Integer", unsignedShort, xmpInternal, "EXIF tag 34855, 0x8827. ISO Speed and ISO Latitude of the input device as specified in ISO 12232." },
{ "ISOSpeedRatings", "ISOSpeedRatings", "seq Integer", xmpArray, xmpInternal, "EXIF tag 34855, 0x8827. ISO Speed and ISO Latitude of the input device as specified in ISO 12232." },
{ "OECF", "OECF", "OECF/SFR", xmpText, xmpInternal, "EXIF tag 34856, 0x8828. Opto-Electoric Conversion Function as specified in ISO 14524." },
{ "ShutterSpeedValue", "ShutterSpeedValue", "Rational", signedRational, xmpInternal, "EXIF tag 37377, 0x9201. Shutter speed, unit is APEX. See Annex C of the EXIF specification." },
{ "ApertureValue", "ApertureValue", "Rational", unsignedRational, xmpInternal, "EXIF tag 37378, 0x9202. Lens aperture, unit is APEX." },
{ "BrightnessValue", "BrightnessValue", "Rational", signedRational, xmpInternal, "EXIF tag 37379, 0x9203. Brightness, unit is APEX." },
{ "ExposureBiasValue", "ExposureBiasValue", "Rational", signedRational, xmpInternal, "EXIF tag 37380, 0x9204. Exposure bias, unit is APEX." },
{ "MaxApertureValue", "MaxApertureValue", "Rational", unsignedRational, xmpInternal, "EXIF tag 37381, 0x9205. Smallest F number of lens, in APEX." },
{ "SubjectDistance", "SubjectDistance", "Rational", unsignedRational, xmpInternal, "EXIF tag 37382, 0x9206. Distance to subject, in meters." },
{ "MeteringMode", "MeteringMode", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 37383, 0x9207. Metering mode." },
{ "LightSource", "LightSource", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 37384, 0x9208. Light source." },
{ "ShutterSpeedValue", "ShutterSpeedValue", "Rational", xmpText, xmpInternal, "EXIF tag 37377, 0x9201. Shutter speed, unit is APEX. See Annex C of the EXIF specification." },
{ "ApertureValue", "ApertureValue", "Rational", xmpText, xmpInternal, "EXIF tag 37378, 0x9202. Lens aperture, unit is APEX." },
{ "BrightnessValue", "BrightnessValue", "Rational", xmpText, xmpInternal, "EXIF tag 37379, 0x9203. Brightness, unit is APEX." },
{ "ExposureBiasValue", "ExposureBiasValue", "Rational", xmpText, xmpInternal, "EXIF tag 37380, 0x9204. Exposure bias, unit is APEX." },
{ "MaxApertureValue", "MaxApertureValue", "Rational", xmpText, xmpInternal, "EXIF tag 37381, 0x9205. Smallest F number of lens, in APEX." },
{ "SubjectDistance", "SubjectDistance", "Rational", xmpText, xmpInternal, "EXIF tag 37382, 0x9206. Distance to subject, in meters." },
{ "MeteringMode", "MeteringMode", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 37383, 0x9207. Metering mode." },
{ "LightSource", "LightSource", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 37384, 0x9208. Light source." },
{ "Flash", "Flash", "Flash", xmpText, xmpInternal, "EXIF tag 37385, 0x9209. Strobe light (flash) source data." },
{ "FocalLength", "FocalLength", "Rational", unsignedRational, xmpInternal, "EXIF tag 37386, 0x920A. Focal length of the lens, in millimeters." },
{ "SubjectArea", "SubjectArea", "seq Integer", unsignedShort, xmpInternal, "EXIF tag 37396, 0x9214. The location and area of the main subject in the overall scene." },
{ "FlashEnergy", "FlashEnergy", "Rational", unsignedRational, xmpInternal, "EXIF tag 41483, 0xA20B. Strobe energy during image capture." },
{ "FocalLength", "FocalLength", "Rational", xmpText, xmpInternal, "EXIF tag 37386, 0x920A. Focal length of the lens, in millimeters." },
{ "SubjectArea", "SubjectArea", "seq Integer", xmpArray, xmpInternal, "EXIF tag 37396, 0x9214. The location and area of the main subject in the overall scene." },
{ "FlashEnergy", "FlashEnergy", "Rational", xmpText, xmpInternal, "EXIF tag 41483, 0xA20B. Strobe energy during image capture." },
{ "SpatialFrequencyResponse", "SpatialFrequencyResponse", "OECF/SFR", xmpText, xmpInternal, "EXIF tag 41484, 0xA20C. Input device spatial frequency table and SFR values as specified in ISO 12233." },
{ "FocalPlaneXResolution", "FocalPlaneXResolution", "Rational", unsignedRational, xmpInternal, "EXIF tag 41486, 0xA20E. Horizontal focal resolution, measured pixels per unit." },
{ "FocalPlaneYResolution", "FocalPlaneYResolution", "Rational", unsignedRational, xmpInternal, "EXIF tag 41487, 0xA20F. Vertical focal resolution, measured in pixels per unit." },
{ "FocalPlaneResolutionUnit", "FocalPlaneResolutionUnit", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41488, 0xA210. Unit used for FocalPlaneXResolution and FocalPlaneYResolution." },
{ "SubjectLocation", "SubjectLocation", "seq Integer", unsignedShort, xmpInternal, "EXIF tag 41492, 0xA214. Location of the main subject of the scene. The first value is the "
{ "FocalPlaneXResolution", "FocalPlaneXResolution", "Rational", xmpText, xmpInternal, "EXIF tag 41486, 0xA20E. Horizontal focal resolution, measured pixels per unit." },
{ "FocalPlaneYResolution", "FocalPlaneYResolution", "Rational", xmpText, xmpInternal, "EXIF tag 41487, 0xA20F. Vertical focal resolution, measured in pixels per unit." },
{ "FocalPlaneResolutionUnit", "FocalPlaneResolutionUnit", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41488, 0xA210. Unit used for FocalPlaneXResolution and FocalPlaneYResolution." },
{ "SubjectLocation", "SubjectLocation", "seq Integer", xmpArray, xmpInternal, "EXIF tag 41492, 0xA214. Location of the main subject of the scene. The first value is the "
"horizontal pixel and the second value is the vertical pixel at which the main subject appears." },
{ "ExposureIndex", "ExposureIndex", "Rational", unsignedRational, xmpInternal, "EXIF tag 41493, 0xA215. Exposure index of input device." },
{ "SensingMethod", "SensingMethod", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41495, 0xA217. Image sensor type on input device." },
{ "FileSource", "FileSource", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41728, 0xA300. Indicates image source." },
{ "SceneType", "SceneType", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41729, 0xA301. Indicates the type of scene." },
{ "ExposureIndex", "ExposureIndex", "Rational", xmpText, xmpInternal, "EXIF tag 41493, 0xA215. Exposure index of input device." },
{ "SensingMethod", "SensingMethod", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41495, 0xA217. Image sensor type on input device." },
{ "FileSource", "FileSource", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41728, 0xA300. Indicates image source." },
{ "SceneType", "SceneType", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41729, 0xA301. Indicates the type of scene." },
{ "CFAPattern", "CFAPattern", "CFAPattern", xmpText, xmpInternal, "EXIF tag 41730, 0xA302. Color filter array geometric pattern of the image sense." },
{ "CustomRendered", "CustomRendered", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41985, 0xA401. Indicates the use of special processing on image data." },
{ "ExposureMode", "ExposureMode", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41986, 0xA402. Indicates the exposure mode set when the image was shot." },
{ "WhiteBalance", "WhiteBalance", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41987, 0xA403. Indicates the white balance mode set when the image was shot." },
{ "DigitalZoomRatio", "DigitalZoomRatio", "Rational", unsignedRational, xmpInternal, "EXIF tag 41988, 0xA404. Indicates the digital zoom ratio when the image was shot." },
{ "FocalLengthIn35mmFilm", "FocalLengthIn35mmFilm", "Integer", unsignedShort, xmpInternal, "EXIF tag 41989, 0xA405. Indicates the equivalent focal length assuming a 35mm film "
{ "CustomRendered", "CustomRendered", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41985, 0xA401. Indicates the use of special processing on image data." },
{ "ExposureMode", "ExposureMode", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41986, 0xA402. Indicates the exposure mode set when the image was shot." },
{ "WhiteBalance", "WhiteBalance", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41987, 0xA403. Indicates the white balance mode set when the image was shot." },
{ "DigitalZoomRatio", "DigitalZoomRatio", "Rational", xmpText, xmpInternal, "EXIF tag 41988, 0xA404. Indicates the digital zoom ratio when the image was shot." },
{ "FocalLengthIn35mmFilm", "FocalLengthIn35mmFilm", "Integer", xmpText, xmpInternal, "EXIF tag 41989, 0xA405. Indicates the equivalent focal length assuming a 35mm film "
"camera, in mm. A value of 0 means the focal length is unknown. Note that this tag differs from the FocalLength tag." },
{ "SceneCaptureType", "SceneCaptureType", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41990, 0xA406. Indicates the type of scene that was shot." },
{ "GainControl", "GainControl", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41991, 0xA407. Indicates the degree of overall image gain adjustment." },
{ "Contrast", "Contrast", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41992, 0xA408. Indicates the direction of contrast processing applied by the camera." },
{ "Saturation", "Saturation", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41993, 0xA409. Indicates the direction of saturation processing applied by the camera." },
{ "Sharpness", "Sharpness", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41994, 0xA40A. Indicates the direction of sharpness processing applied by the camera." },
{ "SceneCaptureType", "SceneCaptureType", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41990, 0xA406. Indicates the type of scene that was shot." },
{ "GainControl", "GainControl", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41991, 0xA407. Indicates the degree of overall image gain adjustment." },
{ "Contrast", "Contrast", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41992, 0xA408. Indicates the direction of contrast processing applied by the camera." },
{ "Saturation", "Saturation", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41993, 0xA409. Indicates the direction of saturation processing applied by the camera." },
{ "Sharpness", "Sharpness", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41994, 0xA40A. Indicates the direction of sharpness processing applied by the camera." },
{ "DeviceSettingDescription", "DeviceSettingDescription", "DeviceSettings", xmpText, xmpInternal, "EXIF tag 41995, 0xA40B. Indicates information on the picture-taking conditions of a particular camera model." },
{ "SubjectDistanceRange", "SubjectDistanceRange", "Closed Choice of Integer", unsignedShort, xmpInternal, "EXIF tag 41996, 0xA40C. Indicates the distance to the subject." },
{ "SubjectDistanceRange", "SubjectDistanceRange", "Closed Choice of Integer", xmpText, xmpInternal, "EXIF tag 41996, 0xA40C. Indicates the distance to the subject." },
{ "ImageUniqueID", "ImageUniqueID", "Text", xmpText, xmpInternal, "EXIF tag 42016, 0xA420. An identifier assigned uniquely to each image. It is recorded as a 32 "
"character ASCII string, equivalent to hexadecimal notation and 128-bit fixed length." },
{ "GPSVersionID", "GPSVersionID", "Text", xmpText, xmpInternal, "GPS tag 0, 0x00. A decimal encoding of each of the four EXIF bytes with period separators. The current value is \"2.0.0.0\"." },
{ "GPSLatitude", "GPSLatitude", "GPSCoordinate", xmpText, xmpInternal, "GPS tag 2, 0x02 (position) and 1, 0x01 (North/South). Indicates latitude." },
{ "GPSLongitude", "GPSLongitude", "GPSCoordinate", xmpText, xmpInternal, "GPS tag 4, 0x04 (position) and 3, 0x03 (East/West). Indicates longitude." },
{ "GPSAltitudeRef", "GPSAltitudeRef", "Closed Choice of Integer", unsignedByte, xmpInternal, "GPS tag 5, 0x5. Indicates whether the altitude is above or below sea level." },
{ "GPSAltitude", "GPSAltitude", "Rational", unsignedRational, xmpInternal, "GPS tag 6, 0x06. Indicates altitude in meters." },
{ "GPSTimeStamp", "GPSTimeStamp", "Date", xmpText, xmpInternal, "GPS tag 29 (date), 0x1D, and, and GPS tag 7 (time), 0x07. Time stamp of GPS data, in Coordinated Universal Time. "
{ "GPSAltitudeRef", "GPSAltitudeRef", "Closed Choice of Integer", xmpText, xmpInternal, "GPS tag 5, 0x5. Indicates whether the altitude is above or below sea level." },
{ "GPSAltitude", "GPSAltitude", "Rational", xmpText, xmpInternal, "GPS tag 6, 0x06. Indicates altitude in meters." },
{ "GPSTimeStamp", "GPSTimeStamp", "Date", xmpText, xmpInternal, "GPS tag 29 (date), 0x1D, and, and GPS tag 7 (time), 0x07. Time stamp of GPS data, in Coordinated Universal Time. "
"Note: The GPSDateStamp tag is new in EXIF 2.2. The GPS timestamp in EXIF 2.1 does not include a date. If not present, "
"the date component for the XMP should be taken from exif:DateTimeOriginal, or if that is "
"also lacking from exif:DateTimeDigitized. If no date is available, do not write exif:GPSTimeStamp to XMP." },
{ "GPSSatellites", "GPSSatellites", "Text", xmpText, xmpInternal, "GPS tag 8, 0x08. Satellite information, format is unspecified." },
{ "GPSStatus", "GPSStatus", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 9, 0x09. Status of GPS receiver at image creation time." },
{ "GPSMeasureMode", "GPSMeasureMode", "Text", xmpText, xmpInternal, "GPS tag 10, 0x0A. GPS measurement mode, Text type." },
{ "GPSDOP", "GPSDOP", "Rational", unsignedRational, xmpInternal, "GPS tag 11, 0x0B. Degree of precision for GPS data." },
{ "GPSDOP", "GPSDOP", "Rational", xmpText, xmpInternal, "GPS tag 11, 0x0B. Degree of precision for GPS data." },
{ "GPSSpeedRef", "GPSSpeedRef", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 12, 0x0C. Units used to speed measurement." },
{ "GPSSpeed", "GPSSpeed", "Rational", unsignedRational, xmpInternal, "GPS tag 13, 0x0D. Speed of GPS receiver movement." },
{ "GPSSpeed", "GPSSpeed", "Rational", xmpText, xmpInternal, "GPS tag 13, 0x0D. Speed of GPS receiver movement." },
{ "GPSTrackRef", "GPSTrackRef", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 14, 0x0E. Reference for movement direction." },
{ "GPSTrack", "GPSTrack", "Rational", unsignedRational, xmpInternal, "GPS tag 15, 0x0F. Direction of GPS movement, values range from 0 to 359.99." },
{ "GPSTrack", "GPSTrack", "Rational", xmpText, xmpInternal, "GPS tag 15, 0x0F. Direction of GPS movement, values range from 0 to 359.99." },
{ "GPSImgDirectionRef", "GPSImgDirectionRef", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 16, 0x10. Reference for movement direction." },
{ "GPSImgDirection", "GPSImgDirection", "Rational", unsignedRational, xmpInternal, "GPS tag 17, 0x11. Direction of image when captured, values range from 0 to 359.99." },
{ "GPSImgDirection", "GPSImgDirection", "Rational", xmpText, xmpInternal, "GPS tag 17, 0x11. Direction of image when captured, values range from 0 to 359.99." },
{ "GPSMapDatum", "GPSMapDatum", "Text", xmpText, xmpInternal, "GPS tag 18, 0x12. Geodetic survey data." },
{ "GPSDestLatitude", "GPSDestLatitude", "GPSCoordinate", xmpText, xmpInternal, "GPS tag 20, 0x14 (position) and 19, 0x13 (North/South). Indicates destination latitude." },
{ "GPSDestLongitude", "GPSDestLongitude", "GPSCoordinate", xmpText, xmpInternal, "GPS tag 22, 0x16 (position) and 21, 0x15 (East/West). Indicates destination longitude." },
{ "GPSDestBearingRef", "GPSDestBearingRef", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 23, 0x17. Reference for movement direction." },
{ "GPSDestBearing", "GPSDestBearing", "Rational", unsignedRational, xmpInternal, "GPS tag 24, 0x18. Destination bearing, values from 0 to 359.99." },
{ "GPSDestBearing", "GPSDestBearing", "Rational", xmpText, xmpInternal, "GPS tag 24, 0x18. Destination bearing, values from 0 to 359.99." },
{ "GPSDestDistanceRef", "GPSDestDistanceRef", "Closed Choice of Text", xmpText, xmpInternal, "GPS tag 25, 0x19. Units used for speed measurement." },
{ "GPSDestDistance", "GPSDestDistance", "Rational", unsignedRational, xmpInternal, "GPS tag 26, 0x1A. Distance to destination." },
{ "GPSDestDistance", "GPSDestDistance", "Rational", xmpText, xmpInternal, "GPS tag 26, 0x1A. Distance to destination." },
{ "GPSProcessingMethod", "GPSProcessingMethod", "Text", xmpText, xmpInternal, "GPS tag 27, 0x1B. A character string recording the name of the method used for location finding." },
{ "GPSAreaInformation", "GPSAreaInformation", "Text", xmpText, xmpInternal, "GPS tag 28, 0x1C. A character string recording the name of the GPS area." },
{ "GPSDifferential", "GPSDifferential", "Closed Choice of Integer", unsignedShort, xmpInternal, "GPS tag 30, 0x1E. Indicates whether differential correction is applied to the GPS receiver." },
{ "GPSDifferential", "GPSDifferential", "Closed Choice of Integer", xmpText, xmpInternal, "GPS tag 30, 0x1E. Indicates whether differential correction is applied to the GPS receiver." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }
};
@ -751,9 +751,9 @@ namespace Exiv2 {
"of a sublocation to a city or the name of a well known location or (natural) monument "
"outside a city. In the sense of a sublocation to a city this element is at the fourth "
"level of a top-down geographical hierarchy." },
{ "Scene", "IPTC Scene", "bag closed Choice of Text", xmpText, xmpExternal, "Describes the scene of a photo content. Specifies one or more terms from the IPTC "
{ "Scene", "IPTC Scene", "bag closed Choice of Text", xmpArray, xmpExternal, "Describes the scene of a photo content. Specifies one or more terms from the IPTC "
"\"Scene-NewsCodes\". Each Scene is represented as a string of 6 digits in an unordered list." },
{ "SubjectCode", "IPTC Subject Code", "bag closed Choice of Text", xmpText, xmpExternal, "Specifies one or more Subjects from the IPTC \"Subject-NewsCodes\" taxonomy to "
{ "SubjectCode", "IPTC Subject Code", "bag closed Choice of Text", xmpArray, xmpExternal, "Specifies one or more Subjects from the IPTC \"Subject-NewsCodes\" taxonomy to "
"categorize the content. Each Subject is represented as a string of 8 digits in an unordered list." },
// End of list marker
{ 0, 0, 0, invalidTypeId, xmpInternal, 0 }

@ -333,7 +333,7 @@ namespace Exiv2 {
//! Type used to store the data.
typedef std::vector<byte> ValueType;
// DATA
ValueType value_;
ValueType value_; //!< Stores the data value
}; // class DataValue

@ -82,7 +82,6 @@ namespace {
//! Convert Value::XmpArrayType to XMP Toolkit array option bits
XMP_OptionBits xmpOptionBits(Exiv2::XmpValue::XmpArrayType xat);
#define DEBUG
# ifdef DEBUG
//! Print information about a parsed XMP node
void printNode(const std::string& schemaNs,
@ -102,8 +101,7 @@ namespace {
namespace Exiv2 {
//! @cond IGNORE
//! Internal Pimpl structure with private members and data of class Xmpdatum.
//! Internal Pimpl structure of class Xmpdatum.
struct Xmpdatum::Impl {
Impl(const XmpKey& key, const Value* pValue); //!< Constructor
Impl(const Impl& rhs); //!< Copy constructor
@ -249,8 +247,8 @@ namespace Exiv2 {
Xmpdatum& Xmpdatum::operator=(const uint16_t& value)
{
UShortValue::AutoPtr v(new UShortValue);
v->value_.push_back(value);
XmpTextValue::AutoPtr v(new XmpTextValue);
v->read(toString(value));
p_->value_ = v;
return *this;
}
@ -275,10 +273,15 @@ namespace Exiv2 {
void Xmpdatum::setValue(const std::string& value)
{
// Todo: What's the correct default? Adjust doc
if (p_->value_.get() == 0) {
assert(0 != p_->key_.get());
TypeId type = XmpProperties::propertyType(*p_->key_.get());
TypeId type = xmpText;
if (0 != p_->key_.get()) {
try {
type = XmpProperties::propertyType(*p_->key_.get());
}
catch (const AnyError&) {
}
}
p_->value_ = Value::create(type);
}
p_->value_->read(value);
@ -577,10 +580,6 @@ namespace Exiv2 {
meta.SetProperty(ns.c_str(), i->tagName().c_str(), 0, options);
for (int idx = 0; idx < i->count(); ++idx) {
const std::string item = i->tagName() + "[" + toString(idx + 1) + "]";
//-ahu
std::cerr << "Element " << item << " = " << i->toString(idx) << "\n";
meta.SetProperty(ns.c_str(), item.c_str(), i->toString(idx).c_str());
}
}

@ -81,7 +81,7 @@ namespace Exiv2 {
Xmpdatum& operator=(const Xmpdatum& rhs);
/*!
@brief Assign \em value to the %Xmpdatum. The type of the new Value
is set to UShortValue.
is set to XmpTextValue.
*/
Xmpdatum& operator=(const uint16_t& value);
/*!
@ -99,7 +99,8 @@ namespace Exiv2 {
@brief Set the value to the string \em value. Uses Value::read(const
std::string&). If the %Xmpdatum does not have a Value yet,
then a %Value of the correct type for this %Xmpdatum is
created.
created. If the key is unknown, a XmpTextValue is used as
default.
*/
void setValue(const std::string& value);
//@}

@ -21,6 +21,7 @@ try {
Exiv2::DataBuf buf = Exiv2::readFile(filename);
std::string xmpPacket;
xmpPacket.assign(reinterpret_cast<char*>(buf.pData_), buf.size_);
std::cerr << "-----> Decoding XMP data read from " << filename << " <-----\n";
Exiv2::XmpData xmpData;
if (0 != Exiv2::XmpParser::decode(xmpData, xmpPacket)) {
std::string error(argv[1]);
@ -45,13 +46,13 @@ try {
<< std::dec << md->value()
<< std::endl;
}
std::cerr << "-----------------------------------------------\n";
filename += "-new";
std::cerr << "-----> Encoding XMP data to write to " << filename << " <-----\n";
if (0 != Exiv2::XmpParser::encode(xmpPacket, xmpData)) {
std::string error(argv[1]);
error += ": Failed to encode the XMP data";
throw Exiv2::Error(1, error);
}
filename += "-new";
Exiv2::FileIo file(filename);
if (file.open("wb") != 0) {
throw Exiv2::Error(10, filename, "wb", Exiv2::strError());

@ -18,7 +18,7 @@ SHELL = /bin/sh
TESTS = addmoddel.sh bugfixes-test.sh crw-test.sh exifdata-test.sh \
exiv2-test.sh ifd-test.sh imagetest.sh iotest.sh iptctest.sh \
makernote-test.sh modify-test.sh path-test.sh write-test.sh \
write2-test.sh
write2-test.sh xmpparser-test.sh
test:
@list='$(TESTS)'; for p in $$list; do \

@ -0,0 +1,88 @@
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1.2-113">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xap="http://ns.adobe.com/xap/1.0/"
xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
xmlns:exif="http://ns.adobe.com/exif/1.0/"
dc:format="image/jpeg"
xap:CreatorTool="Adobe Photoshop CS2 Macintosh"
xap:CreateDate="2005-09-07T15:07:40-07:00"
xap:ModifyDate="2005-09-07T15:09:51-07:00"
xap:MetadataDate="2006-04-10T13:37:10-07:00"
xapMM:DocumentID="uuid:9A3B7F52214211DAB6308A7391270C13"
xapMM:InstanceID="uuid:B59AC1B3214311DAB6308A7391270C13"
photoshop:ColorMode="3"
photoshop:ICCProfile="sRGB IEC61966-2.1"
tiff:Orientation="1"
tiff:XResolution="720000/10000"
tiff:YResolution="720000/10000"
tiff:ResolutionUnit="2"
tiff:ImageWidth="360"
tiff:ImageLength="216"
tiff:NativeDigest="256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;D0485928256FC8D17D036C26919E106D"
tiff:Make="Nikon"
exif:PixelXDimension="360"
exif:PixelYDimension="216"
exif:ColorSpace="1"
exif:NativeDigest="36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;76DBD9F0A5E7ED8F62B4CE8EFA6478B4">
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="en-US">Blue Square Test File - .jpg</rdf:li>
<rdf:li xml:lang="x-default">Blue Square Test File - .jpg</rdf:li>
<rdf:li xml:lang="de-CH">Blaues Quadrat Test Datei - .jpg</rdf:li>
</rdf:Alt>
</dc:title>
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">XMPFiles BlueSquare test file, created in Photoshop CS2, saved as .psd, .jpg, and .tif.</rdf:li>
</rdf:Alt>
</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>XMP</rdf:li>
<rdf:li>Blue Square</rdf:li>
<rdf:li>test file</rdf:li>
<rdf:li>Photoshop</rdf:li>
<rdf:li>.jpg</rdf:li>
</rdf:Bag>
</dc:subject>
<xapMM:DerivedFrom
stRef:instanceID="uuid:9A3B7F4F214211DAB6308A7391270C13"
stRef:documentID="uuid:9A3B7F4E214211DAB6308A7391270C13"/>
<tiff:BitsPerSample>
<rdf:Seq>
<rdf:li>8</rdf:li>
<rdf:li>8</rdf:li>
<rdf:li>8</rdf:li>
</rdf:Seq>
</tiff:BitsPerSample>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

@ -0,0 +1,192 @@
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1.2-113">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="uuid:0f410644-9396-11d9-bb8e-a67e6693b6e9"
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"
xmlns:exif="http://ns.adobe.com/exif/1.0/"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
xmlns:xap="http://ns.adobe.com/xap/1.0/"
xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xapRights="http://ns.adobe.com/xap/1.0/rights/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wine="http://pixelandink.com/wine/1.0/"
Iptc4xmpCore:IntellectualGenre="Profile"
Iptc4xmpCore:Location="Moore family farm"
Iptc4xmpCore:CountryCode="US"
exif:PixelXDimension="432"
exif:PixelYDimension="293"
exif:ColorSpace="1"
exif:NativeDigest="36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;D9980F58F1A438A8507C7664C7084D77"
photoshop:Credit="Big Newspaper"
photoshop:City="Watseka"
photoshop:State="Illinois"
photoshop:Country="USA"
photoshop:DateCreated="2003-04-03"
photoshop:AuthorsPosition="Staff Photographer"
photoshop:Headline="Farmer planting onions"
photoshop:CaptionWriter="Susan Brown"
photoshop:TransmissionReference="CSA farms"
photoshop:Source="John Doe / Big Newspaper"
photoshop:Instructions="Newspapers Out, Original Artixscan 4000 of color negative file, 160 ISO (frame 35a) is 7.6 x 11.2 at 500ppi, in Colormatch RGB."
photoshop:ICCProfile="sRGB IEC61966-2.1"
photoshop:ColorMode="3"
tiff:XResolution="72/1"
tiff:YResolution="72/1"
tiff:ResolutionUnit="2"
tiff:Orientation="1"
tiff:ImageWidth="432"
tiff:ImageLength="293"
tiff:NativeDigest="256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;24B61B075FA9960B09291337508795BF"
xap:CreateDate="2005-03-13T02:01:44-06:00"
xap:ModifyDate="2005-03-13T02:01:44-06:00"
xap:MetadataDate="2007-01-08T13:25:45+01:00"
xap:CreatorTool="Adobe Photoshop CS Windows"
xapMM:DocumentID="adobe:docid:photoshop:0f410643-9396-11d9-bb8e-a67e6693b6e9"
xapRights:WebStatement="http://www.bignewspaper.com/"
xapRights:Marked="True"
dc:format="image/jpeg"
wine:Recommend="False">
<Iptc4xmpCore:CreatorContactInfo
Iptc4xmpCore:CiAdrExtadr="Big Newspaper, 123 Main Street"
Iptc4xmpCore:CiAdrCity="Boston"
Iptc4xmpCore:CiAdrRegion="Massachusetts"
Iptc4xmpCore:CiAdrPcode="O2134"
Iptc4xmpCore:CiAdrCtry="USA"
Iptc4xmpCore:CiTelWork="+1 (800) 1234567"
Iptc4xmpCore:CiEmailWork="johndoe@bignewspaper.com"
Iptc4xmpCore:CiUrlWork="www.bignewspaper.com"/>
<Iptc4xmpCore:SubjectCode>
<rdf:Bag>
<rdf:li>04001000</rdf:li>
<rdf:li>04001001</rdf:li>
</rdf:Bag>
</Iptc4xmpCore:SubjectCode>
<Iptc4xmpCore:Scene>
<rdf:Bag>
<rdf:li>011900</rdf:li>
</rdf:Bag>
</Iptc4xmpCore:Scene>
<tiff:BitsPerSample>
<rdf:Seq>
<rdf:li>8</rdf:li>
<rdf:li>8</rdf:li>
<rdf:li>8</rdf:li>
</rdf:Seq>
</tiff:BitsPerSample>
<xapMM:DerivedFrom
stRef:instanceID="uuid:0f410640-9396-11d9-bb8e-a67e6693b6e9"
stRef:documentID="adobe:docid:photoshop:e4d002a0-9392-11d9-bb8e-a67e6693b6e9"/>
<xapRights:RightsUsageTerms>
<rdf:Alt>
<rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li>
</rdf:Alt>
</xapRights:RightsUsageTerms>
<xapRights:UsageTerms>
<rdf:Alt>
<rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li>
</rdf:Alt>
</xapRights:UsageTerms>
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">After digging the furrows another ten yards with the tractor, Jim Moore hops off to hand-set more leeks and onions.</rdf:li>
</rdf:Alt>
</dc:description>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">01661gdx</rdf:li>
</rdf:Alt>
</dc:title>
<dc:rights>
<rdf:Alt>
<rdf:li xml:lang="x-default">©2003 Big Newspaper, all rights reserved</rdf:li>
</rdf:Alt>
</dc:rights>
<dc:creator>
<rdf:Seq>
<rdf:li>John Doe</rdf:li>
</rdf:Seq>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>agriculture</rdf:li>
<rdf:li>farm laborer</rdf:li>
<rdf:li>farmer</rdf:li>
<rdf:li>field hand</rdf:li>
<rdf:li>field worker</rdf:li>
<rdf:li>humans</rdf:li>
<rdf:li>occupation</rdf:li>
<rdf:li>people</rdf:li>
<rdf:li>agricultural</rdf:li>
<rdf:li>agronomy</rdf:li>
<rdf:li>crops</rdf:li>
<rdf:li>onions</rdf:li>
<rdf:li>vegetable crops</rdf:li>
<rdf:li>plants</rdf:li>
<rdf:li>vegetables</rdf:li>
<rdf:li>outdoors</rdf:li>
<rdf:li>outside</rdf:li>
<rdf:li>agricultural equipment</rdf:li>
<rdf:li>tractor</rdf:li>
<rdf:li>gender</rdf:li>
<rdf:li>male</rdf:li>
<rdf:li>men</rdf:li>
</rdf:Bag>
</dc:subject>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

@ -0,0 +1,281 @@
-----> Decoding XMP data read from BlueSquare.xmp <-----
Xmp.dc.format XmpText 10 image/jpeg
Xmp.dc.title LangAlt 3 lang="de-CH" Blaues Quadrat Test Datei - .jpg, lang="en-US" Blue Square Test File - .jpg, lang="x-default" Blue Square Test File - .jpg
Xmp.dc.description LangAlt 1 lang="x-default" XMPFiles BlueSquare test file, created in Photoshop CS2, saved as .psd, .jpg, and .tif.
Xmp.dc.subject XmpArray 5 XMP, Blue Square, test file, Photoshop, .jpg
Xmp.xmp.CreatorTool XmpText 29 Adobe Photoshop CS2 Macintosh
Xmp.xmp.CreateDate XmpText 25 2005-09-07T15:07:40-07:00
Xmp.xmp.ModifyDate XmpText 25 2005-09-07T15:09:51-07:00
Xmp.xmp.MetadataDate XmpText 25 2006-04-10T13:37:10-07:00
Xmp.xmpMM.DocumentID XmpText 37 uuid:9A3B7F52214211DAB6308A7391270C13
Xmp.xmpMM.InstanceID XmpText 37 uuid:B59AC1B3214311DAB6308A7391270C13
Xmp.xmpMM.DerivedFrom XmpText 0
Xmp.xmpMM.DerivedFrom/stRef:instanceID XmpText 37 uuid:9A3B7F4F214211DAB6308A7391270C13
Xmp.xmpMM.DerivedFrom/stRef:documentID XmpText 37 uuid:9A3B7F4E214211DAB6308A7391270C13
Xmp.photoshop.ColorMode XmpText 1 3
Xmp.photoshop.ICCProfile XmpText 17 sRGB IEC61966-2.1
Xmp.tiff.Orientation XmpText 1 1
Xmp.tiff.XResolution XmpText 12 720000/10000
Xmp.tiff.YResolution XmpText 12 720000/10000
Xmp.tiff.ResolutionUnit XmpText 1 2
Xmp.tiff.ImageWidth XmpText 3 360
Xmp.tiff.ImageLength XmpText 3 216
Xmp.tiff.NativeDigest XmpText 134 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;D0485928256FC8D17D036C26919E106D
Xmp.tiff.Make XmpText 5 Nikon
Xmp.tiff.BitsPerSample XmpArray 3 8, 8, 8
Xmp.exif.PixelXDimension XmpText 3 360
Xmp.exif.PixelYDimension XmpText 3 216
Xmp.exif.ColorSpace XmpText 1 1
Xmp.exif.NativeDigest XmpText 414 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;76DBD9F0A5E7ED8F62B4CE8EFA6478B4
-----> Encoding XMP data to write to BlueSquare.xmp-new <-----
2c2
< <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1.2-113">
---
> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.1.1">
35d34
< <rdf:li xml:lang="en-US">Blue Square Test File - .jpg</rdf:li>
36a36
> <rdf:li xml:lang="en-US">Blue Square Test File - .jpg</rdf:li>
-----> Decoding XMP data read from StaffPhotographer-Example.xmp <-----
Xmp.iptc.IntellectualGenre XmpText 7 Profile
Xmp.iptc.Location XmpText 17 Moore family farm
Xmp.iptc.CountryCode XmpText 2 US
Xmp.iptc.CreatorContactInfo XmpText 0
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrExtadr XmpText 30 Big Newspaper, 123 Main Street
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrCity XmpText 6 Boston
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrRegion XmpText 13 Massachusetts
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrPcode XmpText 5 O2134
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrCtry XmpText 3 USA
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiTelWork XmpText 16 +1 (800) 1234567
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiEmailWork XmpText 24 johndoe@bignewspaper.com
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiUrlWork XmpText 20 www.bignewspaper.com
Xmp.iptc.SubjectCode XmpArray 2 04001000, 04001001
Xmp.iptc.Scene XmpArray 1 011900
Xmp.exif.PixelXDimension XmpText 3 432
Xmp.exif.PixelYDimension XmpText 3 293
Xmp.exif.ColorSpace XmpText 1 1
Xmp.exif.NativeDigest XmpText 414 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;D9980F58F1A438A8507C7664C7084D77
Xmp.photoshop.Credit XmpText 13 Big Newspaper
Xmp.photoshop.City XmpText 7 Watseka
Xmp.photoshop.State XmpText 8 Illinois
Xmp.photoshop.Country XmpText 3 USA
Xmp.photoshop.DateCreated XmpText 10 2003-04-03
Xmp.photoshop.AuthorsPosition XmpText 18 Staff Photographer
Xmp.photoshop.Headline XmpText 22 Farmer planting onions
Xmp.photoshop.CaptionWriter XmpText 11 Susan Brown
Xmp.photoshop.TransmissionReference XmpText 9 CSA farms
Xmp.photoshop.Source XmpText 24 John Doe / Big Newspaper
Xmp.photoshop.Instructions XmpText 127 Newspapers Out, Original Artixscan 4000 of color negative file, 160 ISO (frame 35a) is 7.6 x 11.2 at 500ppi, in Colormatch RGB.
Xmp.photoshop.ICCProfile XmpText 17 sRGB IEC61966-2.1
Xmp.photoshop.ColorMode XmpText 1 3
Xmp.tiff.XResolution XmpText 4 72/1
Xmp.tiff.YResolution XmpText 4 72/1
Xmp.tiff.ResolutionUnit XmpText 1 2
Xmp.tiff.Orientation XmpText 1 1
Xmp.tiff.ImageWidth XmpText 3 432
Xmp.tiff.ImageLength XmpText 3 293
Xmp.tiff.NativeDigest XmpText 134 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;24B61B075FA9960B09291337508795BF
Xmp.tiff.BitsPerSample XmpArray 3 8, 8, 8
Xmp.xmp.CreateDate XmpText 25 2005-03-13T02:01:44-06:00
Xmp.xmp.ModifyDate XmpText 25 2005-03-13T02:01:44-06:00
Xmp.xmp.MetadataDate XmpText 25 2007-01-08T13:25:45+01:00
Xmp.xmp.CreatorTool XmpText 26 Adobe Photoshop CS Windows
Xmp.xmpMM.DocumentID XmpText 58 adobe:docid:photoshop:0f410643-9396-11d9-bb8e-a67e6693b6e9
Xmp.xmpMM.DerivedFrom XmpText 0
Xmp.xmpMM.DerivedFrom/stRef:instanceID XmpText 41 uuid:0f410640-9396-11d9-bb8e-a67e6693b6e9
Xmp.xmpMM.DerivedFrom/stRef:documentID XmpText 58 adobe:docid:photoshop:e4d002a0-9392-11d9-bb8e-a67e6693b6e9
Xmp.xmpMM.InstanceID XmpText 41 uuid:0f410644-9396-11d9-bb8e-a67e6693b6e9
Xmp.xmpRights.WebStatement XmpText 28 http://www.bignewspaper.com/
Xmp.xmpRights.Marked XmpText 4 True
Xmp.xmpRights.RightsUsageTerms LangAlt 1 lang="x-default" For consideration only, no reproduction without prior permission
Xmp.xmpRights.UsageTerms LangAlt 1 lang="x-default" For consideration only, no reproduction without prior permission
Xmp.dc.format XmpText 10 image/jpeg
Xmp.dc.description LangAlt 1 lang="x-default" After digging the furrows another ten yards with the tractor, Jim Moore hops off to hand-set more leeks and onions.
Xmp.dc.title LangAlt 1 lang="x-default" 01661gdx
Xmp.dc.rights LangAlt 1 lang="x-default" ©2003 Big Newspaper, all rights reserved
Xmp.dc.creator XmpArray 1 John Doe
Xmp.dc.subject XmpArray 22 agriculture, farm laborer, farmer, field hand, field worker, humans, occupation, people, agricultural, agronomy, crops, onions, vegetable crops, plants, vegetables, outdoors, outside, agricultural equipment, tractor, gender, male, men
Xmp.wine.Recommend XmpText 5 False
-----> Encoding XMP data to write to StaffPhotographer-Example.xmp-new <-----
2c2
< <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1.2-113">
---
> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.1.1">
4c4
< <rdf:Description rdf:about="uuid:0f410644-9396-11d9-bb8e-a67e6693b6e9"
---
> <rdf:Description rdf:about=""
46a47
> xapMM:InstanceID="uuid:0f410644-9396-11d9-bb8e-a67e6693b6e9"
160,191c161
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
---
>
-----> Decoding XMP data read from xmpsdk.xmp <-----
Xmp.ns1.SimpleProp1 XmpText 13 Simple1 value
Xmp.ns1.SimpleProp2 XmpText 13 Simple2 value
Xmp.ns1.SimpleProp2/?xml:lang XmpText 9 x-default
Xmp.ns1.ArrayProp1 XmpArray 2 Item1.1 value, Item1.2 value
Xmp.ns1.ArrayProp2 LangAlt 2 lang="x-one" Item2.1 value, lang="x-two" Item2.2 value
Xmp.ns1.StructProp XmpText 0
Xmp.ns1.StructProp/ns2:Field1 XmpText 12 Field1 value
Xmp.ns1.StructProp/ns2:Field2 XmpText 12 Field2 value
Xmp.ns1.QualProp1 XmpText 10 Prop value
Xmp.ns1.QualProp1/?ns2:Qual XmpText 10 Qual value
Xmp.ns1.QualProp2 XmpText 10 Prop value
Xmp.ns1.QualProp2/?xml:lang XmpText 9 x-default
Xmp.ns1.QualProp2/?ns2:Qual XmpText 10 Qual value
Xmp.ns1.NestedStructProp XmpText 0
Xmp.ns1.NestedStructProp/ns2:Outer XmpText 0
Xmp.ns1.NestedStructProp/ns2:Outer/ns2:Middle XmpText 0
Xmp.ns1.NestedStructProp/ns2:Outer/ns2:Middle/ns2:Inner XmpText 0
Xmp.ns1.NestedStructProp/ns2:Outer/ns2:Middle/ns2:Inner/ns2:Field1 XmpText 12 Field1 value
Xmp.ns1.NestedStructProp/ns2:Outer/ns2:Middle/ns2:Inner/ns2:Field2 XmpText 12 Field2 value
-----> Encoding XMP data to write to xmpsdk.xmp-new <-----
1,48c1,65
< <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
< <rdf:Description rdf:about='' xmlns:ns1='ns:test1/' xmlns:ns2='ns:test2/'>
<
< <ns1:SimpleProp1>Simple1 value</ns1:SimpleProp1>
< <ns1:SimpleProp2 xml:lang='x-default'>Simple2 value</ns1:SimpleProp2>
<
< <ns1:ArrayProp1>
< <rdf:Bag>
< <rdf:li>Item1.1 value</rdf:li>
< <rdf:li>Item1.2 value</rdf:li>
< </rdf:Bag>
< </ns1:ArrayProp1>
<
< <ns1:ArrayProp2>
< <rdf:Alt>
< <rdf:li xml:lang='x-one'>Item2.1 value</rdf:li>
< <rdf:li xml:lang='x-two'>Item2.2 value</rdf:li>
< </rdf:Alt>
< </ns1:ArrayProp2>
<
< <ns1:StructProp rdf:parseType='Resource'>
< <ns2:Field1>Field1 value</ns2:Field1>
< <ns2:Field2>Field2 value</ns2:Field2>
< </ns1:StructProp>
<
< <ns1:QualProp1 rdf:parseType='Resource'>
< <rdf:value>Prop value</rdf:value>
< <ns2:Qual>Qual value</ns2:Qual>
< </ns1:QualProp1>
<
< <ns1:QualProp2 rdf:parseType='Resource'>
< <rdf:value xml:lang='x-default'>Prop value</rdf:value>
< <ns2:Qual>Qual value</ns2:Qual>
< </ns1:QualProp2>
<
< <ns1:NestedStructProp rdf:parseType='Resource'>
< <ns2:Outer rdf:parseType='Resource'>
< <ns2:Middle rdf:parseType='Resource'>
< <ns2:Inner rdf:parseType='Resource'>
< <ns2:Field1>Field1 value</ns2:Field1>
< <ns2:Field2>Field2 value</ns2:Field2>
< </ns2:Inner>
< </ns2:Middle>
< </ns2:Outer>
< </ns1:NestedStructProp>
<
< </rdf:Description>
< </rdf:RDF>
---
> <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.1.1">
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
> <rdf:Description rdf:about=""
> xmlns:ns1="ns:test1/"
> xmlns:ns2="ns:test2/"
> ns1:SimpleProp1="Simple1 value">
> <ns1:SimpleProp2 xml:lang="x-default">Simple2 value</ns1:SimpleProp2>
> <ns1:ArrayProp1>
> <rdf:Bag>
> <rdf:li>Item1.1 value</rdf:li>
> <rdf:li>Item1.2 value</rdf:li>
> </rdf:Bag>
> </ns1:ArrayProp1>
> <ns1:ArrayProp2>
> <rdf:Alt>
> <rdf:li xml:lang="x-one">Item2.1 value</rdf:li>
> <rdf:li xml:lang="x-two">Item2.2 value</rdf:li>
> </rdf:Alt>
> </ns1:ArrayProp2>
> <ns1:StructProp
> ns2:Field1="Field1 value"
> ns2:Field2="Field2 value"/>
> <ns1:QualProp1 rdf:parseType="Resource">
> <rdf:value>Prop value</rdf:value>
> <ns2:Qual>Qual value</ns2:Qual>
> </ns1:QualProp1>
> <ns1:QualProp2 xml:lang="x-default" rdf:parseType="Resource">
> <rdf:value>Prop value</rdf:value>
> <ns2:Qual>Qual value</ns2:Qual>
> </ns1:QualProp2>
> <ns1:NestedStructProp rdf:parseType="Resource">
> <ns2:Outer rdf:parseType="Resource">
> <ns2:Middle rdf:parseType="Resource">
> <ns2:Inner
> ns2:Field1="Field1 value"
> ns2:Field2="Field2 value"/>
> </ns2:Middle>
> </ns2:Outer>
> </ns1:NestedStructProp>
> </rdf:Description>
> </rdf:RDF>
> </x:xmpmeta>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> <?xpacket end="w"?>
\ No newline at end of file

@ -0,0 +1,48 @@
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<rdf:Description rdf:about='' xmlns:ns1='ns:test1/' xmlns:ns2='ns:test2/'>
<ns1:SimpleProp1>Simple1 value</ns1:SimpleProp1>
<ns1:SimpleProp2 xml:lang='x-default'>Simple2 value</ns1:SimpleProp2>
<ns1:ArrayProp1>
<rdf:Bag>
<rdf:li>Item1.1 value</rdf:li>
<rdf:li>Item1.2 value</rdf:li>
</rdf:Bag>
</ns1:ArrayProp1>
<ns1:ArrayProp2>
<rdf:Alt>
<rdf:li xml:lang='x-one'>Item2.1 value</rdf:li>
<rdf:li xml:lang='x-two'>Item2.2 value</rdf:li>
</rdf:Alt>
</ns1:ArrayProp2>
<ns1:StructProp rdf:parseType='Resource'>
<ns2:Field1>Field1 value</ns2:Field1>
<ns2:Field2>Field2 value</ns2:Field2>
</ns1:StructProp>
<ns1:QualProp1 rdf:parseType='Resource'>
<rdf:value>Prop value</rdf:value>
<ns2:Qual>Qual value</ns2:Qual>
</ns1:QualProp1>
<ns1:QualProp2 rdf:parseType='Resource'>
<rdf:value xml:lang='x-default'>Prop value</rdf:value>
<ns2:Qual>Qual value</ns2:Qual>
</ns1:QualProp2>
<ns1:NestedStructProp rdf:parseType='Resource'>
<ns2:Outer rdf:parseType='Resource'>
<ns2:Middle rdf:parseType='Resource'>
<ns2:Inner rdf:parseType='Resource'>
<ns2:Field1>Field1 value</ns2:Field1>
<ns2:Field2>Field2 value</ns2:Field2>
</ns2:Inner>
</ns2:Middle>
</ns2:Outer>
</ns1:NestedStructProp>
</rdf:Description>
</rdf:RDF>

@ -0,0 +1,58 @@
#! /bin/sh
# XMP parser test driver
# ----------------------------------------------------------------------
# Setup
results="./tmp/xmpparser-test.out"
good="./data/xmpparser-test.out"
diffargs="--strip-trailing-cr"
tmpfile=tmp/ttt
touch $tmpfile
diff -q $diffargs $tmpfile $tmpfile 2>/dev/null
if [ $? -ne 0 ] ; then
diffargs=""
fi
# ----------------------------------------------------------------------
# Main routine
(
LD_LIBRARY_PATH=../../src:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
binpath="$VALGRIND ../../src"
cd ./tmp
# ----------------------------------------------------------------------
# BlueSquare
testfile=BlueSquare.xmp
cp -f ../data/$testfile .
$binpath/xmpparser-test $testfile
diff $testfile ${testfile}-new
# ----------------------------------------------------------------------
# StaffPhotographer-Example
testfile=StaffPhotographer-Example.xmp
cp -f ../data/$testfile .
$binpath/xmpparser-test $testfile
diff $testfile ${testfile}-new
# ----------------------------------------------------------------------
# xmpsdk
testfile=xmpsdk.xmp
cp -f ../data/$testfile .
$binpath/xmpparser-test $testfile
diff $testfile ${testfile}-new
$binpath/xmpparse ${testfile} > t1 2>&1
$binpath/xmpparse ${testfile}-new > t2 2>&1
diff t1 t2
) > $results 2>&1
# ----------------------------------------------------------------------
# Evaluate results
diff -q $diffargs $results $good
rc=$?
if [ $rc -eq 0 ] ; then
echo "All testcases passed."
else
diff $diffargs $results $good
fi
Loading…
Cancel
Save