exiftool_vendored 10.58.0 → 10.65.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +100 -1
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +39 -38
  7. data/bin/arg_files/exif2iptc.args +3 -0
  8. data/bin/arg_files/iptc2exif.args +3 -0
  9. data/bin/config_files/example.config +16 -14
  10. data/bin/config_files/photoshop_paths.config +10 -0
  11. data/bin/exiftool +71 -65
  12. data/bin/lib/Image/ExifTool/APE.pm +5 -0
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -15
  14. data/bin/lib/Image/ExifTool/Canon.pm +18 -4
  15. data/bin/lib/Image/ExifTool/CanonCustom.pm +3 -0
  16. data/bin/lib/Image/ExifTool/Charset/DOSLatin1.pm +49 -0
  17. data/bin/lib/Image/ExifTool/Charset/DOSLatinUS.pm +49 -0
  18. data/bin/lib/Image/ExifTool/Charset.pm +8 -5
  19. data/bin/lib/Image/ExifTool/Exif.pm +37 -18
  20. data/bin/lib/Image/ExifTool/FLAC.pm +47 -37
  21. data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
  22. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
  23. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  24. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  25. data/bin/lib/Image/ExifTool/H264.pm +2 -0
  26. data/bin/lib/Image/ExifTool/ID3.pm +8 -3
  27. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  28. data/bin/lib/Image/ExifTool/Import.pm +4 -1
  29. data/bin/lib/Image/ExifTool/InDesign.pm +11 -7
  30. data/bin/lib/Image/ExifTool/Kodak.pm +4 -1
  31. data/bin/lib/Image/ExifTool/Lang/de.pm +31 -31
  32. data/bin/lib/Image/ExifTool/MWG.pm +12 -4
  33. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  34. data/bin/lib/Image/ExifTool/Matroska.pm +2 -1
  35. data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
  36. data/bin/lib/Image/ExifTool/Minolta.pm +71 -61
  37. data/bin/lib/Image/ExifTool/Nikon.pm +286 -43
  38. data/bin/lib/Image/ExifTool/NikonCustom.pm +1049 -0
  39. data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
  40. data/bin/lib/Image/ExifTool/PNG.pm +4 -7
  41. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +24 -1
  42. data/bin/lib/Image/ExifTool/Pentax.pm +20 -6
  43. data/bin/lib/Image/ExifTool/Photoshop.pm +24 -3
  44. data/bin/lib/Image/ExifTool/QuickTime.pm +545 -14
  45. data/bin/lib/Image/ExifTool/README +16 -9
  46. data/bin/lib/Image/ExifTool/RIFF.pm +8 -1
  47. data/bin/lib/Image/ExifTool/Samsung.pm +5 -4
  48. data/bin/lib/Image/ExifTool/Sigma.pm +9 -1
  49. data/bin/lib/Image/ExifTool/Sony.pm +327 -153
  50. data/bin/lib/Image/ExifTool/TagLookup.pm +3273 -3220
  51. data/bin/lib/Image/ExifTool/TagNames.pod +317 -38
  52. data/bin/lib/Image/ExifTool/Validate.pm +15 -1
  53. data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
  54. data/bin/lib/Image/ExifTool/WriteIPTC.pl +23 -1
  55. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -2
  56. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -0
  57. data/bin/lib/Image/ExifTool/Writer.pl +96 -18
  58. data/bin/lib/Image/ExifTool/XMP.pm +20 -11
  59. data/bin/lib/Image/ExifTool/XMP2.pl +634 -583
  60. data/bin/lib/Image/ExifTool.pm +124 -17
  61. data/bin/lib/Image/ExifTool.pod +86 -82
  62. data/bin/perl-Image-ExifTool.spec +38 -37
  63. data/lib/exiftool_vendored/version.rb +1 -1
  64. metadata +4 -2
@@ -23,360 +23,6 @@ use strict;
23
23
  use Image::ExifTool qw(:Utils);
24
24
  use Image::ExifTool::XMP;
25
25
 
26
- #------------------------------------------------------------------------------
27
- # IPTC Extensions version 1.3 (+ proposed video extensions)
28
-
29
- # IPTC Extension 1.0 structures
30
- my %sLocationDetails = (
31
- STRUCT_NAME => 'LocationDetails',
32
- NAMESPACE => 'Iptc4xmpExt',
33
- GROUPS => { 2 => 'Location' },
34
- Identifier => { List => 'Bag', Namespace => 'xmp' },
35
- City => { },
36
- CountryCode => { },
37
- CountryName => { },
38
- ProvinceState => { },
39
- Sublocation => { },
40
- WorldRegion => { },
41
- LocationId => { List => 'Bag' },
42
- LocationName => { Writable => 'lang-alt' },
43
- GPSLatitude => { Namespace => 'exif', %latConv },
44
- GPSLongitude => { Namespace => 'exif', %longConv },
45
- GPSAltitude => {
46
- Namespace => 'exif',
47
- Writable => 'rational',
48
- PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
49
- PrintConvInv => '$val=~s/\s*m$//;$val',
50
- },
51
- );
52
- my %sCVTermDetails = (
53
- STRUCT_NAME => 'CVTermDetails',
54
- NAMESPACE => 'Iptc4xmpExt',
55
- CvTermId => { },
56
- CvTermName => { Writable => 'lang-alt' },
57
- CvId => { },
58
- CvTermRefinedAbout => { },
59
- );
60
-
61
- # IPTC video extensions
62
- my %sPublicationEvent = (
63
- STRUCT_NAME => 'PublicationEvent',
64
- NAMESPACE => 'Iptc4xmpExt',
65
- Date => { Groups => { 2 => 'Time' }, %dateTimeInfo },
66
- Name => { },
67
- Identifier => { },
68
- );
69
- my %sEntity = (
70
- STRUCT_NAME => 'Entity',
71
- NAMESPACE => 'Iptc4xmpExt',
72
- Identifier => { List => 'Bag', Namespace => 'xmp' },
73
- Name => { Writable => 'lang-alt' },
74
- );
75
- my %sEntityWithRole = (
76
- STRUCT_NAME => 'EntityWithRole',
77
- NAMESPACE => 'Iptc4xmpExt',
78
- Identifier => { List => 'Bag', Namespace => 'xmp' },
79
- Name => { Writable => 'lang-alt' },
80
- Role => { List => 'Bag' },
81
- );
82
- my %sFrameSize = (
83
- STRUCT_NAME => 'FrameSize',
84
- NAMESPACE => 'Iptc4xmpExt',
85
- WidthPixels => { Writable => 'integer' },
86
- HeightPixels => { Writable => 'integer' },
87
- );
88
- my %sRating = (
89
- STRUCT_NAME => 'Rating',
90
- NAMESPACE => 'Iptc4xmpExt',
91
- RatingValue => { FlatName => 'Value' },
92
- RatingSourceLink => { FlatName => 'SourceLink' },
93
- RatingScaleMinValue => { FlatName => 'ScaleMinValue' },
94
- RatingScaleMaxValue => { FlatName => 'ScaleMaxValue' },
95
- RatingValueLogoLink => { FlatName => 'ValueLogoLink' },
96
- RatingRegion => {
97
- FlatName => 'RatingRegion',
98
- Struct => \%sLocationDetails,
99
- List => 'Bag',
100
- },
101
- );
102
- my %sEpisode = (
103
- STRUCT_NAME => 'EpisodeOrSeason',
104
- NAMESPACE => 'Iptc4xmpExt',
105
- Name => { },
106
- Number => { },
107
- Identifier => { },
108
- );
109
- my %sSeries = (
110
- STRUCT_NAME => 'Series',
111
- NAMESPACE => 'Iptc4xmpExt',
112
- Name => { },
113
- Identifier => { },
114
- );
115
- my %sTemporalCoverage = (
116
- STRUCT_NAME => 'TemporalCoverage',
117
- NAMESPACE => 'Iptc4xmpExt',
118
- tempCoverageFrom => { FlatName => 'From', %dateTimeInfo, Groups => { 2 => 'Time' } },
119
- tempCoverageTo => { FlatName => 'To', %dateTimeInfo, Groups => { 2 => 'Time' } },
120
- );
121
- my %sQualifiedLink = (
122
- STRUCT_NAME => 'QualifiedLink',
123
- NAMESPACE => 'Iptc4xmpExt',
124
- Link => { },
125
- LinkQualifier => { },
126
- );
127
- my %sTextRegion = (
128
- STRUCT_NAME => 'TextRegion',
129
- NAMESPACE => 'Iptc4xmpExt',
130
- RegionText => { },
131
- Region => { Struct => \%Image::ExifTool::XMP::sArea },
132
- );
133
-
134
- # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
135
- %Image::ExifTool::XMP::iptcExt = (
136
- %xmpTableDefaults,
137
- GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
138
- NAMESPACE => 'Iptc4xmpExt',
139
- TABLE_DESC => 'XMP IPTC Extension',
140
- NOTES => q{
141
- IPTC Extension namespace tags. The actual namespace prefix is
142
- "Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (see
143
- L<http://www.iptc.org/IPTC4XMP/>)
144
- },
145
- AboutCvTerm => {
146
- Struct => \%sCVTermDetails,
147
- List => 'Bag',
148
- },
149
- AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' },
150
- AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' },
151
- AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' },
152
- AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' },
153
- AddlModelInfo => { Name => 'AdditionalModelInformation' },
154
- ArtworkOrObject => {
155
- Struct => {
156
- STRUCT_NAME => 'ArtworkOrObjectDetails',
157
- NAMESPACE => 'Iptc4xmpExt',
158
- AOCopyrightNotice => { },
159
- AOCreator => { List => 'Seq' },
160
- AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo },
161
- AOSource => { },
162
- AOSourceInvNo=> { },
163
- AOTitle => { Writable => 'lang-alt' },
164
- AOCurrentCopyrightOwnerName => { },
165
- AOCurrentCopyrightOwnerId => { },
166
- AOCurrentLicensorName => { },
167
- AOCurrentLicensorId => { },
168
- AOCreatorId => { List => 'Seq' },
169
- AOCircaDateCreated => { Groups => { 2 => 'Time' } },
170
- AOStylePeriod => { List => 'Bag' },
171
- AOSourceInvURL => { },
172
- AOContentDescription => { Writable => 'lang-alt' },
173
- AOContributionDescription => { Writable => 'lang-alt' },
174
- AOPhysicalDescription => { Writable => 'lang-alt' },
175
- },
176
- List => 'Bag',
177
- },
178
- ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' },
179
- ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' },
180
- ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' },
181
- ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' },
182
- ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' },
183
- ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' },
184
- ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' },
185
- ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' },
186
- ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' },
187
- ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' },
188
- ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' },
189
- ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' },
190
- ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' },
191
- ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' },
192
- ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkContentDescription' },
193
- ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' },
194
- ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' },
195
- CVterm => {
196
- Name => 'ControlledVocabularyTerm',
197
- List => 'Bag',
198
- Notes => 'deprecated by version 1.2',
199
- },
200
- DigImageGUID => { Name => 'DigitalImageGUID' },
201
- DigitalSourcefileType => {
202
- Name => 'DigitalSourceFileType',
203
- Notes => 'now deprecated -- replaced by DigitalSourceType',
204
- },
205
- DigitalSourceType => { Name => 'DigitalSourceType' },
206
- EmbdEncRightsExpr => {
207
- Struct => {
208
- STRUCT_NAME => 'EEREDetails',
209
- NAMESPACE => 'Iptc4xmpExt',
210
- EncRightsExpr => { },
211
- RightsExprEncType => { },
212
- RightsExprLangId => { },
213
- },
214
- List => 'Bag',
215
- },
216
- EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' },
217
- EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' },
218
- EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' },
219
- Event => { Writable => 'lang-alt' },
220
- IptcLastEdited => {
221
- Name => 'IPTCLastEdited',
222
- Groups => { 2 => 'Time' },
223
- %dateTimeInfo,
224
- },
225
- LinkedEncRightsExpr => {
226
- Struct => {
227
- STRUCT_NAME => 'LEREDetails',
228
- NAMESPACE => 'Iptc4xmpExt',
229
- LinkedRightsExpr => { },
230
- RightsExprEncType => { },
231
- RightsExprLangId => { },
232
- },
233
- List => 'Bag',
234
- },
235
- LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' },
236
- LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' },
237
- LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' },
238
- LocationCreated => {
239
- Struct => \%sLocationDetails,
240
- Groups => { 2 => 'Location' },
241
- List => 'Bag',
242
- },
243
- LocationShown => {
244
- Struct => \%sLocationDetails,
245
- Groups => { 2 => 'Location' },
246
- List => 'Bag',
247
- },
248
- MaxAvailHeight => { Writable => 'integer' },
249
- MaxAvailWidth => { Writable => 'integer' },
250
- ModelAge => { List => 'Bag', Writable => 'integer' },
251
- OrganisationInImageCode => { List => 'Bag' },
252
- OrganisationInImageName => { List => 'Bag' },
253
- PersonInImage => { List => 'Bag' },
254
- PersonInImageWDetails => {
255
- Struct => {
256
- STRUCT_NAME => 'PersonDetails',
257
- NAMESPACE => 'Iptc4xmpExt',
258
- PersonId => { List => 'Bag' },
259
- PersonName => { Writable => 'lang-alt' },
260
- PersonCharacteristic => {
261
- Struct => \%sCVTermDetails,
262
- List => 'Bag',
263
- },
264
- PersonDescription => { Writable => 'lang-alt' },
265
- },
266
- List => 'Bag',
267
- },
268
- PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' },
269
- PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' },
270
- PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' },
271
- PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' },
272
- PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' },
273
- PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' },
274
- PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' },
275
- PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' },
276
- ProductInImage => {
277
- Struct => {
278
- STRUCT_NAME => 'ProductDetails',
279
- NAMESPACE => 'Iptc4xmpExt',
280
- ProductName => { Writable => 'lang-alt' },
281
- ProductGTIN => { },
282
- ProductDescription => { Writable => 'lang-alt' },
283
- },
284
- List => 'Bag',
285
- },
286
- ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' },
287
- ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' },
288
- ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' },
289
- RegistryId => {
290
- Name => 'RegistryID',
291
- Struct => {
292
- STRUCT_NAME => 'RegistryEntryDetails',
293
- NAMESPACE => 'Iptc4xmpExt',
294
- RegItemId => { },
295
- RegOrgId => { },
296
- RegEntryRole=> { }, # (new in 1.3)
297
- },
298
- List => 'Bag',
299
- },
300
- RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' },
301
- RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' },
302
- RegistryIdRegEntryRole => { Flat => 1, Name => 'RegistryEntryRole' },
303
-
304
- # new Extension 1.3 properties
305
- Genre => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sCVTermDetails },
306
-
307
- # new video properties (Oct 2016, ref Michael Steidl)
308
- # (see http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.0.html)
309
- CircaDateCreated=> { Groups => { 2 => 'Time' } },
310
- Episode => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
311
- ExternalMetadataLink => { Groups => { 2 => 'Other' }, List => 'Bag' },
312
- FeedIdentifier => { Groups => { 2 => 'Video' } },
313
- PublicationEvent=> { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sPublicationEvent },
314
- Rating => {
315
- Groups => { 2 => 'Other' },
316
- Struct => \%sRating,
317
- List => 'Bag',
318
- },
319
- ReleaseReady => { Groups => { 2 => 'Other' }, Writable => 'boolean' },
320
- Season => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
321
- Series => { Groups => { 2 => 'Video' }, Struct => \%sSeries },
322
- StorylineIdentifier => { Groups => { 2 => 'Video' }, List => 'Bag' },
323
- StylePeriod => { Groups => { 2 => 'Video' } },
324
- TemporalCoverage=> { Groups => { 2 => 'Video' }, Struct => \%sTemporalCoverage },
325
- WorkflowTag => { Groups => { 2 => 'Video' }, Struct => \%sCVTermDetails },
326
- DataOnScreen => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sTextRegion },
327
- Dopesheet => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
328
- DopesheetLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
329
- Headline => { Groups => { 2 => 'Video' }, Writable => 'lang-alt', Avoid => 1 },
330
- PersonHeard => { Groups => { 2 => 'Audio' }, List => 'Bag', Struct => \%sEntity },
331
- VideoShotType => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity },
332
- EventExt => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity, Name => 'ShownEvent' },
333
- Transcript => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
334
- TranscriptLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
335
- VisualColour => {
336
- Name => 'VisualColor',
337
- Groups => { 2 => 'Video' },
338
- PrintConv => {
339
- 'bw-monochrome' => 'Monochrome',
340
- 'colour' => 'Color',
341
- },
342
- },
343
- Contributor => { List => 'Bag', Struct => \%sEntityWithRole },
344
- CopyrightYear => { Groups => { 2 => 'Time' }, Writable => 'integer' },
345
- Creator => { List => 'Bag', Struct => \%sEntityWithRole },
346
- SupplyChainSource => { Groups => { 2 => 'Other' }, List => 'Bag', Struct => \%sEntity },
347
- audioBitRate => { Groups => { 2 => 'Audio' }, Writable => 'integer', Name => 'AudioBitrate' },
348
- audioBitRateMode=> {
349
- Name => 'AudioBitrateMode',
350
- Groups => { 2 => 'Audio' },
351
- PrintConv => {
352
- fixed => 'Fixed',
353
- variable => 'Variable',
354
- },
355
- },
356
- audioChannelCount => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
357
- videoDisplayAspectRatio => { Groups => { 2 => 'Audio' }, Writable => 'rational' },
358
- ContainerFormat => { Groups => { 2 => 'Video' }, Struct => \%sEntity },
359
- StreamReady => {
360
- Groups => { 2 => 'Video' },
361
- PrintConv => {
362
- true => 'True',
363
- false => 'False',
364
- unknown => 'Unknown',
365
- },
366
- },
367
- videoBitRate => { Groups => { 2 => 'Video' }, Writable => 'integer', Name => 'VideoBitrate' },
368
- videoBitRateMode => {
369
- Name => 'VideoBitrateMode',
370
- Groups => { 2 => 'Video' },
371
- PrintConv => {
372
- fixed => 'Fixed',
373
- variable => 'Variable',
374
- },
375
- },
376
- videoEncodingProfile => { Groups => { 2 => 'Video' } },
377
- videoStreamsCount => { Groups => { 2 => 'Video' }, Writable => 'integer' },
378
- );
379
-
380
26
  #------------------------------------------------------------------------------
381
27
 
382
28
  # xmpDM structure definitions
@@ -426,7 +72,7 @@ my %sTimecode = (
426
72
  },
427
73
  },
428
74
  timeValue => { },
429
- value => { Writable => 'integer' },
75
+ value => { Writable => 'integer', Notes => 'only in XMP 2008 spec; an error?' },
430
76
  );
431
77
 
432
78
  # XMP Dynamic Media namespace properties (xmpDM)
@@ -449,218 +95,586 @@ my %sTimecode = (
449
95
  '24Int' => '24-bit integer',
450
96
  '32Int' => '32-bit integer',
451
97
  '32Float' => '32-bit float',
452
- 'Compressed' => 'Compressed',
453
- 'Packed' => 'Packed',
98
+ 'Compressed' => 'Compressed',
99
+ 'Packed' => 'Packed',
100
+ 'Other' => 'Other',
101
+ },
102
+ },
103
+ audioChannelType => {
104
+ PrintConv => {
105
+ 'Mono' => 'Mono',
106
+ 'Stereo' => 'Stereo',
107
+ '5.1' => '5.1',
108
+ '7.1' => '7.1',
109
+ '16 Channel' => '16 Channel',
110
+ 'Other' => 'Other',
111
+ },
112
+ },
113
+ audioCompressor => { },
114
+ beatSpliceParams => {
115
+ Struct => {
116
+ STRUCT_NAME => 'BeatSpliceStretch',
117
+ NAMESPACE => 'xmpDM',
118
+ riseInDecibel => { Writable => 'real' },
119
+ riseInTimeDuration => { Struct => \%sTime },
120
+ useFileBeatsMarker => { Writable => 'boolean' },
121
+ },
122
+ },
123
+ cameraAngle => { },
124
+ cameraLabel => { },
125
+ cameraModel => { },
126
+ cameraMove => { },
127
+ client => { },
128
+ comment => { Name => 'DMComment' },
129
+ composer => { Groups => { 2 => 'Author' } },
130
+ contributedMedia => {
131
+ Struct => {
132
+ STRUCT_NAME => 'Media',
133
+ NAMESPACE => 'xmpDM',
134
+ duration => { Struct => \%sTime },
135
+ managed => { Writable => 'boolean' },
136
+ path => { },
137
+ startTime => { Struct => \%sTime },
138
+ track => { },
139
+ webStatement=> { },
140
+ },
141
+ List => 'Bag',
142
+ },
143
+ copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated)
144
+ director => { },
145
+ directorPhotography => { },
146
+ discNumber => { }, #12
147
+ duration => { Struct => \%sTime },
148
+ engineer => { },
149
+ fileDataRate => { Writable => 'rational' },
150
+ genre => { },
151
+ good => { Writable => 'boolean' },
152
+ instrument => { },
153
+ introTime => { Struct => \%sTime },
154
+ key => {
155
+ PrintConvColumns => 3,
156
+ PrintConv => {
157
+ 'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#',
158
+ 'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G',
159
+ 'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B',
160
+ },
161
+ },
162
+ logComment => { },
163
+ loop => { Writable => 'boolean' },
164
+ lyrics => { }, #12
165
+ numberOfBeats => { Writable => 'real' },
166
+ markers => { Struct => \%sMarker, List => 'Seq' },
167
+ metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
168
+ outCue => { Struct => \%sTime },
169
+ partOfCompilation=>{ Writable => 'boolean' }, #12
170
+ projectName => { },
171
+ projectRef => {
172
+ Struct => {
173
+ STRUCT_NAME => 'ProjectLink',
174
+ NAMESPACE => 'xmpDM',
175
+ path => { },
176
+ type => {
177
+ PrintConv => {
178
+ movie => 'Movie',
179
+ still => 'Still Image',
180
+ audio => 'Audio',
181
+ custom => 'Custom',
182
+ },
183
+ },
184
+ },
185
+ },
186
+ pullDown => {
187
+ PrintConvColumns => 2,
188
+ PrintConv => {
189
+ 'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW',
190
+ 'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS',
191
+ 'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW',
192
+ 'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW',
193
+ 'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS',
194
+ },
195
+ },
196
+ relativePeakAudioFilePath => { },
197
+ relativeTimestamp => { Struct => \%sTime },
198
+ releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
199
+ resampleParams => {
200
+ Struct => {
201
+ STRUCT_NAME => 'ResampleStretch',
202
+ NAMESPACE => 'xmpDM',
203
+ quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
204
+ },
205
+ },
206
+ scaleType => {
207
+ PrintConv => {
208
+ Major => 'Major',
209
+ Minor => 'Minor',
210
+ Both => 'Both',
211
+ Neither => 'Neither',
212
+ },
213
+ },
214
+ scene => { Avoid => 1 },
215
+ shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
216
+ shotDay => { },
217
+ shotLocation => { },
218
+ shotName => { },
219
+ shotNumber => { },
220
+ shotSize => { },
221
+ speakerPlacement=> { },
222
+ startTimecode => { Struct => \%sTimecode },
223
+ startTimeSampleSize => { Writable => 'integer' }, #PH
224
+ startTimeScale => { }, #PH (real?)
225
+ stretchMode => {
226
+ PrintConv => {
227
+ 'Fixed length' => 'Fixed length',
228
+ 'Time-Scale' => 'Time-Scale',
229
+ 'Resample' => 'Resample',
230
+ 'Beat Splice' => 'Beat Splice',
231
+ 'Hybrid' => 'Hybrid',
232
+ },
233
+ },
234
+ takeNumber => { Writable => 'integer' },
235
+ tapeName => { },
236
+ tempo => { Writable => 'real' },
237
+ timeScaleParams => {
238
+ Struct => {
239
+ STRUCT_NAME => 'TimeScaleStretch',
240
+ NAMESPACE => 'xmpDM',
241
+ frameOverlappingPercentage => { Writable => 'real' },
242
+ frameSize => { Writable => 'real' },
243
+ quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
244
+ },
245
+ },
246
+ timeSignature => {
247
+ PrintConvColumns => 3,
248
+ PrintConv => {
249
+ '2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4',
250
+ '5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8',
251
+ '9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other',
252
+ },
253
+ },
254
+ trackNumber => { Writable => 'integer' },
255
+ Tracks => {
256
+ Struct => {
257
+ STRUCT_NAME => 'Track',
258
+ NAMESPACE => 'xmpDM',
259
+ frameRate => { },
260
+ markers => { Struct => \%sMarker, List => 'Seq' },
261
+ trackName => { },
262
+ trackType => { },
263
+ },
264
+ List => 'Bag',
265
+ },
266
+ videoAlphaMode => {
267
+ PrintConv => {
268
+ 'straight' => 'Straight',
269
+ 'pre-multiplied', => 'Pre-multiplied',
270
+ 'none' => 'None',
271
+ },
272
+ },
273
+ videoAlphaPremultipleColor => { Struct => \%sColorant },
274
+ videoAlphaUnityIsTransparent => { Writable => 'boolean' },
275
+ videoColorSpace => {
276
+ PrintConv => {
277
+ 'sRGB' => 'sRGB',
278
+ 'CCIR-601' => 'CCIR-601',
279
+ 'CCIR-709' => 'CCIR-709',
280
+ },
281
+ },
282
+ videoCompressor => { },
283
+ videoFieldOrder => {
284
+ PrintConv => {
285
+ Upper => 'Upper',
286
+ Lower => 'Lower',
287
+ Progressive => 'Progressive',
288
+ },
289
+ },
290
+ videoFrameRate => { Writable => 'real' },
291
+ videoFrameSize => { Struct => \%sDimensions },
292
+ videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
293
+ videoPixelAspectRatio => { Writable => 'rational' },
294
+ videoPixelDepth => {
295
+ PrintConv => {
296
+ '8Int' => '8-bit integer',
297
+ '16Int' => '16-bit integer',
298
+ '24Int' => '24-bit integer',
299
+ '32Int' => '32-bit integer',
300
+ '32Float' => '32-bit float',
454
301
  'Other' => 'Other',
455
302
  },
456
303
  },
457
- audioChannelType => {
458
- PrintConv => {
459
- 'Mono' => 'Mono',
460
- 'Stereo' => 'Stereo',
461
- '5.1' => '5.1',
462
- '7.1' => '7.1',
463
- '16 Channel' => '16 Channel',
464
- 'Other' => 'Other',
465
- },
304
+ );
305
+
306
+ #------------------------------------------------------------------------------
307
+ # IPTC Extensions version 1.3 (+ proposed video extensions)
308
+
309
+ # IPTC Extension 1.0 structures
310
+ my %sLocationDetails = (
311
+ STRUCT_NAME => 'LocationDetails',
312
+ NAMESPACE => 'Iptc4xmpExt',
313
+ GROUPS => { 2 => 'Location' },
314
+ Identifier => { List => 'Bag', Namespace => 'xmp' },
315
+ City => { },
316
+ CountryCode => { },
317
+ CountryName => { },
318
+ ProvinceState => { },
319
+ Sublocation => { },
320
+ WorldRegion => { },
321
+ LocationId => { List => 'Bag' },
322
+ LocationName => { Writable => 'lang-alt' },
323
+ GPSLatitude => { Namespace => 'exif', %latConv },
324
+ GPSLongitude => { Namespace => 'exif', %longConv },
325
+ GPSAltitude => {
326
+ Namespace => 'exif',
327
+ Writable => 'rational',
328
+ PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
329
+ PrintConvInv => '$val=~s/\s*m$//;$val',
466
330
  },
467
- audioCompressor => { },
468
- beatSpliceParams => {
469
- Struct => {
470
- STRUCT_NAME => 'BeatSpliceStretch',
471
- NAMESPACE => 'xmpDM',
472
- riseInDecibel => { Writable => 'real' },
473
- riseInTimeDuration => { Struct => \%sTime },
474
- useFileBeatsMarker => { Writable => 'boolean' },
475
- },
331
+ );
332
+ my %sCVTermDetails = (
333
+ STRUCT_NAME => 'CVTermDetails',
334
+ NAMESPACE => 'Iptc4xmpExt',
335
+ CvTermId => { },
336
+ CvTermName => { Writable => 'lang-alt' },
337
+ CvId => { },
338
+ CvTermRefinedAbout => { },
339
+ );
340
+
341
+ # IPTC video extensions
342
+ my %sPublicationEvent = (
343
+ STRUCT_NAME => 'PublicationEvent',
344
+ NAMESPACE => 'Iptc4xmpExt',
345
+ Date => { Groups => { 2 => 'Time' }, %dateTimeInfo },
346
+ Name => { },
347
+ Identifier => { },
348
+ );
349
+ my %sEntity = (
350
+ STRUCT_NAME => 'Entity',
351
+ NAMESPACE => 'Iptc4xmpExt',
352
+ Identifier => { List => 'Bag', Namespace => 'xmp' },
353
+ Name => { Writable => 'lang-alt' },
354
+ );
355
+ my %sEntityWithRole = (
356
+ STRUCT_NAME => 'EntityWithRole',
357
+ NAMESPACE => 'Iptc4xmpExt',
358
+ Identifier => { List => 'Bag', Namespace => 'xmp' },
359
+ Name => { Writable => 'lang-alt' },
360
+ Role => { List => 'Bag' },
361
+ );
362
+ my %sFrameSize = (
363
+ STRUCT_NAME => 'FrameSize',
364
+ NAMESPACE => 'Iptc4xmpExt',
365
+ WidthPixels => { Writable => 'integer' },
366
+ HeightPixels => { Writable => 'integer' },
367
+ );
368
+ my %sRating = (
369
+ STRUCT_NAME => 'Rating',
370
+ NAMESPACE => 'Iptc4xmpExt',
371
+ RatingValue => { FlatName => 'Value' },
372
+ RatingSourceLink => { FlatName => 'SourceLink' },
373
+ RatingScaleMinValue => { FlatName => 'ScaleMinValue' },
374
+ RatingScaleMaxValue => { FlatName => 'ScaleMaxValue' },
375
+ RatingValueLogoLink => { FlatName => 'ValueLogoLink' },
376
+ RatingRegion => {
377
+ FlatName => 'RatingRegion',
378
+ Struct => \%sLocationDetails,
379
+ List => 'Bag',
476
380
  },
477
- cameraAngle => { },
478
- cameraLabel => { },
479
- cameraModel => { },
480
- cameraMove => { },
481
- client => { },
482
- comment => { Name => 'DMComment' },
483
- composer => { Groups => { 2 => 'Author' } },
484
- contributedMedia => {
381
+ );
382
+ my %sEpisode = (
383
+ STRUCT_NAME => 'EpisodeOrSeason',
384
+ NAMESPACE => 'Iptc4xmpExt',
385
+ Name => { },
386
+ Number => { },
387
+ Identifier => { },
388
+ );
389
+ my %sSeries = (
390
+ STRUCT_NAME => 'Series',
391
+ NAMESPACE => 'Iptc4xmpExt',
392
+ Name => { },
393
+ Identifier => { },
394
+ );
395
+ my %sTemporalCoverage = (
396
+ STRUCT_NAME => 'TemporalCoverage',
397
+ NAMESPACE => 'Iptc4xmpExt',
398
+ tempCoverageFrom => { FlatName => 'From', %dateTimeInfo, Groups => { 2 => 'Time' } },
399
+ tempCoverageTo => { FlatName => 'To', %dateTimeInfo, Groups => { 2 => 'Time' } },
400
+ );
401
+ my %sQualifiedLink = (
402
+ STRUCT_NAME => 'QualifiedLink',
403
+ NAMESPACE => 'Iptc4xmpExt',
404
+ Link => { },
405
+ LinkQualifier => { },
406
+ );
407
+ my %sTextRegion = (
408
+ STRUCT_NAME => 'TextRegion',
409
+ NAMESPACE => 'Iptc4xmpExt',
410
+ RegionText => { },
411
+ Region => { Struct => \%Image::ExifTool::XMP::sArea },
412
+ );
413
+ my %sLinkedImage = (
414
+ STRUCT_NAME => 'LinkedImage',
415
+ NAMESPACE => 'Iptc4xmpExt',
416
+ Link => { },
417
+ LinkQualifier => { List => 'Bag' },
418
+ ImageRole => { },
419
+ 'format' => { Namespace => 'dc' },
420
+ WidthPixels => { Writable => 'integer' },
421
+ HeightPixels=> { Writable => 'integer' },
422
+ UsedVideoFrame => { Struct => \%sTimecode },
423
+ );
424
+
425
+ # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
426
+ %Image::ExifTool::XMP::iptcExt = (
427
+ %xmpTableDefaults,
428
+ GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
429
+ NAMESPACE => 'Iptc4xmpExt',
430
+ TABLE_DESC => 'XMP IPTC Extension',
431
+ NOTES => q{
432
+ IPTC Extension namespace tags. The actual namespace prefix is
433
+ "Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (see
434
+ L<http://www.iptc.org/IPTC4XMP/>)
435
+ },
436
+ AboutCvTerm => {
437
+ Struct => \%sCVTermDetails,
438
+ List => 'Bag',
439
+ },
440
+ AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' },
441
+ AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' },
442
+ AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' },
443
+ AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' },
444
+ AddlModelInfo => { Name => 'AdditionalModelInformation' },
445
+ ArtworkOrObject => {
485
446
  Struct => {
486
- STRUCT_NAME => 'Media',
487
- NAMESPACE => 'xmpDM',
488
- duration => { Struct => \%sTime },
489
- managed => { Writable => 'boolean' },
490
- path => { },
491
- startTime => { Struct => \%sTime },
492
- track => { },
493
- webStatement=> { },
447
+ STRUCT_NAME => 'ArtworkOrObjectDetails',
448
+ NAMESPACE => 'Iptc4xmpExt',
449
+ AOCopyrightNotice => { },
450
+ AOCreator => { List => 'Seq' },
451
+ AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo },
452
+ AOSource => { },
453
+ AOSourceInvNo=> { },
454
+ AOTitle => { Writable => 'lang-alt' },
455
+ AOCurrentCopyrightOwnerName => { },
456
+ AOCurrentCopyrightOwnerId => { },
457
+ AOCurrentLicensorName => { },
458
+ AOCurrentLicensorId => { },
459
+ AOCreatorId => { List => 'Seq' },
460
+ AOCircaDateCreated => { Groups => { 2 => 'Time' } },
461
+ AOStylePeriod => { List => 'Bag' },
462
+ AOSourceInvURL => { },
463
+ AOContentDescription => { Writable => 'lang-alt' },
464
+ AOContributionDescription => { Writable => 'lang-alt' },
465
+ AOPhysicalDescription => { Writable => 'lang-alt' },
494
466
  },
495
467
  List => 'Bag',
496
468
  },
497
- copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated)
498
- director => { },
499
- directorPhotography => { },
500
- discNumber => { }, #12
501
- duration => { Struct => \%sTime },
502
- engineer => { },
503
- fileDataRate => { Writable => 'rational' },
504
- genre => { },
505
- good => { Writable => 'boolean' },
506
- instrument => { },
507
- introTime => { Struct => \%sTime },
508
- key => {
509
- PrintConvColumns => 3,
510
- PrintConv => {
511
- 'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#',
512
- 'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G',
513
- 'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B',
514
- },
469
+ ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' },
470
+ ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' },
471
+ ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' },
472
+ ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' },
473
+ ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' },
474
+ ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' },
475
+ ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' },
476
+ ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' },
477
+ ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' },
478
+ ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' },
479
+ ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' },
480
+ ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' },
481
+ ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' },
482
+ ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' },
483
+ ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkContentDescription' },
484
+ ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' },
485
+ ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' },
486
+ CVterm => {
487
+ Name => 'ControlledVocabularyTerm',
488
+ List => 'Bag',
489
+ Notes => 'deprecated by version 1.2',
515
490
  },
516
- logComment => { },
517
- loop => { Writable => 'boolean' },
518
- lyrics => { }, #12
519
- numberOfBeats => { Writable => 'real' },
520
- markers => { Struct => \%sMarker, List => 'Seq' },
521
- metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
522
- outCue => { Struct => \%sTime },
523
- partOfCompilation=>{ Writable => 'boolean' }, #12
524
- projectName => { },
525
- projectRef => {
526
- Struct => {
527
- STRUCT_NAME => 'ProjectLink',
528
- NAMESPACE => 'xmpDM',
529
- path => { },
530
- type => {
531
- PrintConv => {
532
- movie => 'Movie',
533
- still => 'Still Image',
534
- audio => 'Audio',
535
- custom => 'Custom',
536
- },
537
- },
491
+ DigImageGUID => { Name => 'DigitalImageGUID' },
492
+ DigitalSourcefileType => {
493
+ Name => 'DigitalSourceFileType',
494
+ Notes => 'now deprecated -- replaced by DigitalSourceType',
495
+ },
496
+ DigitalSourceType => { Name => 'DigitalSourceType' },
497
+ EmbdEncRightsExpr => {
498
+ Struct => {
499
+ STRUCT_NAME => 'EEREDetails',
500
+ NAMESPACE => 'Iptc4xmpExt',
501
+ EncRightsExpr => { },
502
+ RightsExprEncType => { },
503
+ RightsExprLangId => { },
538
504
  },
505
+ List => 'Bag',
539
506
  },
540
- pullDown => {
541
- PrintConvColumns => 2,
542
- PrintConv => {
543
- 'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW',
544
- 'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS',
545
- 'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW',
546
- 'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW',
547
- 'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS',
548
- },
507
+ EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' },
508
+ EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' },
509
+ EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' },
510
+ Event => { Writable => 'lang-alt' },
511
+ IptcLastEdited => {
512
+ Name => 'IPTCLastEdited',
513
+ Groups => { 2 => 'Time' },
514
+ %dateTimeInfo,
549
515
  },
550
- relativePeakAudioFilePath => { },
551
- relativeTimestamp => { Struct => \%sTime },
552
- releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
553
- resampleParams => {
516
+ LinkedEncRightsExpr => {
554
517
  Struct => {
555
- STRUCT_NAME => 'ResampleStretch',
556
- NAMESPACE => 'xmpDM',
557
- quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
518
+ STRUCT_NAME => 'LEREDetails',
519
+ NAMESPACE => 'Iptc4xmpExt',
520
+ LinkedRightsExpr => { },
521
+ RightsExprEncType => { },
522
+ RightsExprLangId => { },
558
523
  },
524
+ List => 'Bag',
559
525
  },
560
- scaleType => {
561
- PrintConv => {
562
- Major => 'Major',
563
- Minor => 'Minor',
564
- Both => 'Both',
565
- Neither => 'Neither',
566
- },
526
+ LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' },
527
+ LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' },
528
+ LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' },
529
+ LocationCreated => {
530
+ Struct => \%sLocationDetails,
531
+ Groups => { 2 => 'Location' },
532
+ List => 'Bag',
567
533
  },
568
- scene => { Avoid => 1 },
569
- shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
570
- shotDay => { },
571
- shotLocation => { },
572
- shotName => { },
573
- shotNumber => { },
574
- shotSize => { },
575
- speakerPlacement=> { },
576
- startTimecode => { Struct => \%sTimecode },
577
- startTimeSampleSize => { Writable => 'integer' }, #PH
578
- startTimeScale => { }, #PH (real?)
579
- stretchMode => {
580
- PrintConv => {
581
- 'Fixed length' => 'Fixed length',
582
- 'Time-Scale' => 'Time-Scale',
583
- 'Resample' => 'Resample',
584
- 'Beat Splice' => 'Beat Splice',
585
- 'Hybrid' => 'Hybrid',
586
- },
534
+ LocationShown => {
535
+ Struct => \%sLocationDetails,
536
+ Groups => { 2 => 'Location' },
537
+ List => 'Bag',
587
538
  },
588
- takeNumber => { Writable => 'integer' },
589
- tapeName => { },
590
- tempo => { Writable => 'real' },
591
- timeScaleParams => {
539
+ MaxAvailHeight => { Writable => 'integer' },
540
+ MaxAvailWidth => { Writable => 'integer' },
541
+ ModelAge => { List => 'Bag', Writable => 'integer' },
542
+ OrganisationInImageCode => { List => 'Bag' },
543
+ OrganisationInImageName => { List => 'Bag' },
544
+ PersonInImage => { List => 'Bag' },
545
+ PersonInImageWDetails => {
592
546
  Struct => {
593
- STRUCT_NAME => 'TimeScaleStretch',
594
- NAMESPACE => 'xmpDM',
595
- frameOverlappingPercentage => { Writable => 'real' },
596
- frameSize => { Writable => 'real' },
597
- quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
547
+ STRUCT_NAME => 'PersonDetails',
548
+ NAMESPACE => 'Iptc4xmpExt',
549
+ PersonId => { List => 'Bag' },
550
+ PersonName => { Writable => 'lang-alt' },
551
+ PersonCharacteristic => {
552
+ Struct => \%sCVTermDetails,
553
+ List => 'Bag',
554
+ },
555
+ PersonDescription => { Writable => 'lang-alt' },
598
556
  },
557
+ List => 'Bag',
599
558
  },
600
- timeSignature => {
601
- PrintConvColumns => 3,
602
- PrintConv => {
603
- '2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4',
604
- '5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8',
605
- '9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other',
559
+ PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' },
560
+ PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' },
561
+ PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' },
562
+ PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' },
563
+ PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' },
564
+ PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' },
565
+ PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' },
566
+ PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' },
567
+ ProductInImage => {
568
+ Struct => {
569
+ STRUCT_NAME => 'ProductDetails',
570
+ NAMESPACE => 'Iptc4xmpExt',
571
+ ProductName => { Writable => 'lang-alt' },
572
+ ProductGTIN => { },
573
+ ProductDescription => { Writable => 'lang-alt' },
606
574
  },
575
+ List => 'Bag',
607
576
  },
608
- trackNumber => { Writable => 'integer' },
609
- Tracks => {
577
+ ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' },
578
+ ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' },
579
+ ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' },
580
+ RegistryId => {
581
+ Name => 'RegistryID',
610
582
  Struct => {
611
- STRUCT_NAME => 'Track',
612
- NAMESPACE => 'xmpDM',
613
- frameRate => { },
614
- markers => { Struct => \%sMarker, List => 'Seq' },
615
- trackName => { },
616
- trackType => { },
583
+ STRUCT_NAME => 'RegistryEntryDetails',
584
+ NAMESPACE => 'Iptc4xmpExt',
585
+ RegItemId => { },
586
+ RegOrgId => { },
587
+ RegEntryRole=> { }, # (new in 1.3)
617
588
  },
618
589
  List => 'Bag',
619
590
  },
620
- videoAlphaMode => {
591
+ RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' },
592
+ RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' },
593
+ RegistryIdRegEntryRole => { Flat => 1, Name => 'RegistryEntryRole' },
594
+
595
+ # new Extension 1.3 properties
596
+ Genre => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sCVTermDetails },
597
+
598
+ # new video properties (Oct 2016, ref Michael Steidl)
599
+ # (see http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.0.html)
600
+ CircaDateCreated=> { Groups => { 2 => 'Time' } },
601
+ Episode => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
602
+ ExternalMetadataLink => { Groups => { 2 => 'Other' }, List => 'Bag' },
603
+ FeedIdentifier => { Groups => { 2 => 'Video' } },
604
+ PublicationEvent=> { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sPublicationEvent },
605
+ Rating => {
606
+ Groups => { 2 => 'Other' },
607
+ Struct => \%sRating,
608
+ List => 'Bag',
609
+ },
610
+ ReleaseReady => { Groups => { 2 => 'Other' }, Writable => 'boolean' },
611
+ Season => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
612
+ Series => { Groups => { 2 => 'Video' }, Struct => \%sSeries },
613
+ StorylineIdentifier => { Groups => { 2 => 'Video' }, List => 'Bag' },
614
+ StylePeriod => { Groups => { 2 => 'Video' } },
615
+ TemporalCoverage=> { Groups => { 2 => 'Video' }, Struct => \%sTemporalCoverage },
616
+ WorkflowTag => { Groups => { 2 => 'Video' }, Struct => \%sCVTermDetails },
617
+ DataOnScreen => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sTextRegion },
618
+ Dopesheet => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
619
+ DopesheetLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
620
+ Headline => { Groups => { 2 => 'Video' }, Writable => 'lang-alt', Avoid => 1 },
621
+ PersonHeard => { Groups => { 2 => 'Audio' }, List => 'Bag', Struct => \%sEntity },
622
+ VideoShotType => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity },
623
+ EventExt => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity, Name => 'ShownEvent' },
624
+ Transcript => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
625
+ TranscriptLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
626
+ VisualColour => {
627
+ Name => 'VisualColor',
628
+ Groups => { 2 => 'Video' },
621
629
  PrintConv => {
622
- 'straight' => 'Straight',
623
- 'pre-multiplied', => 'Pre-multiplied',
624
- 'none' => 'None',
630
+ 'bw-monochrome' => 'Monochrome',
631
+ 'colour' => 'Color',
625
632
  },
626
633
  },
627
- videoAlphaPremultipleColor => { Struct => \%sColorant },
628
- videoAlphaUnityIsTransparent => { Writable => 'boolean' },
629
- videoColorSpace => {
634
+ Contributor => { List => 'Bag', Struct => \%sEntityWithRole },
635
+ CopyrightYear => { Groups => { 2 => 'Time' }, Writable => 'integer' },
636
+ Creator => { List => 'Bag', Struct => \%sEntityWithRole },
637
+ SupplyChainSource => { Groups => { 2 => 'Other' }, List => 'Bag', Struct => \%sEntity },
638
+ audioBitRate => { Groups => { 2 => 'Audio' }, Writable => 'integer', Name => 'AudioBitrate' },
639
+ audioBitRateMode=> {
640
+ Name => 'AudioBitrateMode',
641
+ Groups => { 2 => 'Audio' },
630
642
  PrintConv => {
631
- 'sRGB' => 'sRGB',
632
- 'CCIR-601' => 'CCIR-601',
633
- 'CCIR-709' => 'CCIR-709',
643
+ fixed => 'Fixed',
644
+ variable => 'Variable',
634
645
  },
635
646
  },
636
- videoCompressor => { },
637
- videoFieldOrder => {
647
+ audioChannelCount => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
648
+ videoDisplayAspectRatio => { Groups => { 2 => 'Audio' }, Writable => 'rational' },
649
+ ContainerFormat => { Groups => { 2 => 'Video' }, Struct => \%sEntity },
650
+ StreamReady => {
651
+ Groups => { 2 => 'Video' },
638
652
  PrintConv => {
639
- Upper => 'Upper',
640
- Lower => 'Lower',
641
- Progressive => 'Progressive',
653
+ true => 'True',
654
+ false => 'False',
655
+ unknown => 'Unknown',
642
656
  },
643
657
  },
644
- videoFrameRate => { Writable => 'real' },
645
- videoFrameSize => { Struct => \%sDimensions },
646
- videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
647
- videoPixelAspectRatio => { Writable => 'rational' },
648
- videoPixelDepth => {
658
+ videoBitRate => { Groups => { 2 => 'Video' }, Writable => 'integer', Name => 'VideoBitrate' },
659
+ videoBitRateMode => {
660
+ Name => 'VideoBitrateMode',
661
+ Groups => { 2 => 'Video' },
649
662
  PrintConv => {
650
- '8Int' => '8-bit integer',
651
- '16Int' => '16-bit integer',
652
- '24Int' => '24-bit integer',
653
- '32Int' => '32-bit integer',
654
- '32Float' => '32-bit float',
655
- 'Other' => 'Other',
663
+ fixed => 'Fixed',
664
+ variable => 'Variable',
656
665
  },
657
666
  },
667
+ videoEncodingProfile => { Groups => { 2 => 'Video' } },
668
+ videoStreamsCount => { Groups => { 2 => 'Video' }, Writable => 'integer' },
669
+ # new IPTC video metadata 1.1 properties
670
+ # (ref https://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.1.html)
671
+ SnapshotLink => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sLinkedImage, Name => 'Snapshot' },
658
672
  );
659
673
 
660
674
  #------------------------------------------------------------------------------
661
675
  # PRISM
662
676
  #
663
- # NOTE: The "Avoid" flag is set for all PRISM tags
677
+ # NOTE: The "Avoid" flag is set for all PRISM tags (via tag table AVOID flag)
664
678
 
665
679
  # my %obsolete = (
666
680
  # Notes => 'obsolete in 2.0',
@@ -687,6 +701,7 @@ my %prismPublicationDate = (
687
701
  %xmpTableDefaults,
688
702
  GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' },
689
703
  NAMESPACE => 'prism',
704
+ AVOID => 1,
690
705
  NOTES => q{
691
706
  Publishing Requirements for Industry Standard Metadata 3.0 namespace
692
707
  tags. (see L<http://www.prismstandard.org/>)
@@ -904,6 +919,7 @@ my %prismPublicationDate = (
904
919
  %xmpTableDefaults,
905
920
  GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' },
906
921
  NAMESPACE => 'prl',
922
+ AVOID => 1,
907
923
  NOTES => q{
908
924
  PRISM Rights Language 2.1 namespace tags. These tags have been deprecated
909
925
  since the release of the PRISM Usage Rights 3.0. (see
@@ -919,6 +935,7 @@ my %prismPublicationDate = (
919
935
  %xmpTableDefaults,
920
936
  GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' },
921
937
  NAMESPACE => 'pur',
938
+ AVOID => 1,
922
939
  NOTES => q{
923
940
  PRISM Usage Rights 3.0 namespace tags. (see
924
941
  L<http://www.prismstandard.org/>)
@@ -950,6 +967,7 @@ my %prismPublicationDate = (
950
967
  %xmpTableDefaults,
951
968
  GROUPS => { 0 => 'XMP', 1 => 'XMP-pmi', 2 => 'Image' },
952
969
  NAMESPACE => 'pmi',
970
+ AVOID => 1,
953
971
  NOTES => q{
954
972
  PRISM Metadata for Images 3.0 namespace tags. (see
955
973
  L<http://www.prismstandard.org/>)
@@ -1016,6 +1034,7 @@ my %prismPublicationDate = (
1016
1034
  %xmpTableDefaults,
1017
1035
  GROUPS => { 0 => 'XMP', 1 => 'XMP-prm', 2 => 'Document' },
1018
1036
  NAMESPACE => 'prm',
1037
+ AVOID => 1,
1019
1038
  NOTES => q{
1020
1039
  PRISM Recipe Metadata 3.0 namespace tags. (see
1021
1040
  L<http://www.prismstandard.org/>)
@@ -1079,17 +1098,18 @@ my %prismPublicationDate = (
1079
1098
  %Image::ExifTool::XMP::PixelLive = (
1080
1099
  GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' },
1081
1100
  NAMESPACE => 'PixelLive',
1101
+ AVOID => 1,
1082
1102
  NOTES => q{
1083
1103
  PixelLive namespace tags. These tags are not writable becase they are very
1084
1104
  uncommon and I haven't been able to locate a reference which gives the
1085
1105
  namespace URI.
1086
1106
  },
1087
- AUTHOR => { Name => 'Author', Avoid => 1, Groups => { 2 => 'Author' } },
1088
- COMMENTS => { Name => 'Comments', Avoid => 1 },
1089
- COPYRIGHT => { Name => 'Copyright',Avoid => 1, Groups => { 2 => 'Author' } },
1090
- DATE => { Name => 'Date', Avoid => 1, Groups => { 2 => 'Time' } },
1091
- GENRE => { Name => 'Genre', Avoid => 1 },
1092
- TITLE => { Name => 'Title', Avoid => 1 },
1107
+ AUTHOR => { Name => 'Author', Groups => { 2 => 'Author' } },
1108
+ COMMENTS => { Name => 'Comments' },
1109
+ COPYRIGHT => { Name => 'Copyright', Groups => { 2 => 'Author' } },
1110
+ DATE => { Name => 'Date', Groups => { 2 => 'Time' } },
1111
+ GENRE => { Name => 'Genre' },
1112
+ TITLE => { Name => 'Title' },
1093
1113
  );
1094
1114
 
1095
1115
  # Extensis Portfolio tags (extensis) (ref 11)
@@ -1171,6 +1191,7 @@ my %sSubVersion = (
1171
1191
  %xmpTableDefaults,
1172
1192
  GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' },
1173
1193
  NAMESPACE => 'acdsee',
1194
+ AVOID => 1,
1174
1195
  NOTES => q{
1175
1196
  ACD Systems ACDSee namespace tags.
1176
1197
 
@@ -1180,15 +1201,15 @@ my %sSubVersion = (
1180
1201
  mumble to themselves instead of speaking out for the rest of the world to
1181
1202
  hear.)
1182
1203
  },
1183
- author => { Avoid => 1, Groups => { 2 => 'Author' } },
1184
- caption => { Avoid => 1 },
1185
- categories => { Avoid => 1 },
1186
- collections=> { Avoid => 1 },
1187
- datetime => { Name => 'DateTime', Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo },
1188
- keywords => { Avoid => 1, List => 'Bag' },
1189
- notes => { Avoid => 1 },
1190
- rating => { Avoid => 1, Writable => 'real' }, # integer?
1191
- tagged => { Avoid => 1, Writable => 'boolean' },
1204
+ author => { Groups => { 2 => 'Author' } },
1205
+ caption => { },
1206
+ categories => { },
1207
+ collections=> { },
1208
+ datetime => { Name => 'DateTime', Groups => { 2 => 'Time' }, %dateTimeInfo },
1209
+ keywords => { List => 'Bag' },
1210
+ notes => { },
1211
+ rating => { Writable => 'real' }, # integer?
1212
+ tagged => { Writable => 'boolean' },
1192
1213
  rawrppused => { Writable => 'boolean' },
1193
1214
  rpp => {
1194
1215
  Name => 'RPP',
@@ -1203,13 +1224,13 @@ my %sSubVersion = (
1203
1224
  Binary => 1,
1204
1225
  },
1205
1226
  # more tags (ref forum6840)
1206
- FixtureIdentifier => { Avoid => 1 },
1207
- EditStatus => { Avoid => 1 },
1208
- ReleaseDate => { Avoid => 1 },
1209
- ReleaseTime => { Avoid => 1 },
1210
- OriginatingProgram => { Avoid => 1 },
1211
- ObjectCycle => { Avoid => 1 },
1212
- Snapshots => { Avoid => 1, List => 'Bag', Binary => 1 },
1227
+ FixtureIdentifier => { },
1228
+ EditStatus => { },
1229
+ ReleaseDate => { },
1230
+ ReleaseTime => { },
1231
+ OriginatingProgram => { },
1232
+ ObjectCycle => { },
1233
+ Snapshots => { List => 'Bag', Binary => 1 },
1213
1234
  );
1214
1235
 
1215
1236
  # Picture Licensing Universal System namespace properties (xmpPLUS)
@@ -1217,13 +1238,14 @@ my %sSubVersion = (
1217
1238
  %xmpTableDefaults,
1218
1239
  GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' },
1219
1240
  NAMESPACE => 'xmpPLUS',
1241
+ AVOID => 1,
1220
1242
  NOTES => q{
1221
1243
  XMP Picture Licensing Universal System (PLUS) tags as written by some older
1222
1244
  Adobe applications. See L<PLUS XMP Tags|Image::ExifTool::TagNames/PLUS XMP Tags>
1223
1245
  for the current PLUS tags.
1224
1246
  },
1225
- CreditLineReq => { Writable => 'boolean', Avoid => 1 },
1226
- ReuseAllowed => { Writable => 'boolean', Avoid => 1 },
1247
+ CreditLineReq => { Writable => 'boolean' },
1248
+ ReuseAllowed => { Writable => 'boolean' },
1227
1249
  );
1228
1250
 
1229
1251
  # Creative Commons namespace properties (cc) (ref 5)
@@ -1340,14 +1362,15 @@ my %sSubVersion = (
1340
1362
  %xmpTableDefaults,
1341
1363
  GROUPS => { 1 => 'XMP-expressionmedia', 2 => 'Image' },
1342
1364
  NAMESPACE => 'expressionmedia',
1365
+ AVOID => 1,
1343
1366
  NOTES => q{
1344
1367
  Microsoft Expression Media namespace tags. These tags are avoided when
1345
1368
  writing due to name conflicts with tags in other schemas.
1346
1369
  },
1347
- Event => { Avoid => 1 },
1348
- Status => { Avoid => 1 },
1349
- People => { Avoid => 1, List => 'Bag' },
1350
- CatalogSets => { Avoid => 1, List => 'Bag' },
1370
+ Event => { },
1371
+ Status => { },
1372
+ People => { List => 'Bag' },
1373
+ CatalogSets => { List => 'Bag' },
1351
1374
  );
1352
1375
 
1353
1376
  # DigiKam namespace tags (ref PH)
@@ -1570,6 +1593,7 @@ my %sSubVersion = (
1570
1593
  %xmpTableDefaults,
1571
1594
  GROUPS => { 1 => 'XMP-GSpherical', 2 => 'Image' },
1572
1595
  NAMESPACE => 'GSpherical',
1596
+ AVOID => 1,
1573
1597
  NOTES => q{
1574
1598
  Not actually XMP. These RDF/XML tags are used in Google spherical MP4
1575
1599
  videos. See
@@ -1577,32 +1601,74 @@ my %sSubVersion = (
1577
1601
  for the specification.
1578
1602
  },
1579
1603
  # (avoid due to conflicts with XMP-GPano tags)
1580
- Spherical => { Avoid => 1, Writable => 'boolean' },
1581
- Stitched => { Avoid => 1, Writable => 'boolean' },
1582
- StitchingSoftware => { Avoid => 1 },
1583
- ProjectionType => { Avoid => 1 },
1584
- StereoMode => { Avoid => 1 },
1585
- SourceCount => { Avoid => 1, Writable => 'integer' },
1586
- InitialViewHeadingDegrees => { Avoid => 1, Writable => 'real' },
1587
- InitialViewPitchDegrees => { Avoid => 1, Writable => 'real' },
1588
- InitialViewRollDegrees => { Avoid => 1, Writable => 'real' },
1604
+ Spherical => { Writable => 'boolean' },
1605
+ Stitched => { Writable => 'boolean' },
1606
+ StitchingSoftware => { },
1607
+ ProjectionType => { },
1608
+ StereoMode => { },
1609
+ SourceCount => { Writable => 'integer' },
1610
+ InitialViewHeadingDegrees => { Writable => 'real' },
1611
+ InitialViewPitchDegrees => { Writable => 'real' },
1612
+ InitialViewRollDegrees => { Writable => 'real' },
1589
1613
  Timestamp => {
1590
1614
  Name => 'TimeStamp',
1591
1615
  Groups => { 2 => 'Time' },
1592
- Avoid => 1,
1593
- Writable => 'date',
1616
+ Writable => 'integer',
1594
1617
  Shift => 'Time',
1595
1618
  ValueConv => 'ConvertUnixTime($val)', #(NC)
1596
1619
  ValueConvInv => 'GetUnixTime($val)',
1597
1620
  PrintConv => '$self->ConvertDateTime($val)',
1598
1621
  PrintConvInv => '$self->InverseDateTime($val)',
1599
1622
  },
1600
- FullPanoWidthPixels => { Avoid => 1, Writable => 'integer' },
1601
- FullPanoHeightPixels => { Avoid => 1, Writable => 'integer' },
1602
- CroppedAreaImageWidthPixels => { Avoid => 1, Writable => 'integer' },
1603
- CroppedAreaImageHeightPixels=> { Avoid => 1, Writable => 'integer' },
1604
- CroppedAreaLeftPixels => { Avoid => 1, Writable => 'integer' },
1605
- CroppedAreaTopPixels => { Avoid => 1, Writable => 'integer' },
1623
+ FullPanoWidthPixels => { Writable => 'integer' },
1624
+ FullPanoHeightPixels => { Writable => 'integer' },
1625
+ CroppedAreaImageWidthPixels => { Writable => 'integer' },
1626
+ CroppedAreaImageHeightPixels=> { Writable => 'integer' },
1627
+ CroppedAreaLeftPixels => { Writable => 'integer' },
1628
+ CroppedAreaTopPixels => { Writable => 'integer' },
1629
+ );
1630
+
1631
+ # Google depthmap information (ref https://developers.google.com/depthmap-metadata/reference)
1632
+ %Image::ExifTool::XMP::GDepth = (
1633
+ GROUPS => { 0 => 'XMP', 1 => 'XMP-GDepth', 2 => 'Image' },
1634
+ NAMESPACE => { 'GDepth' => 'http://ns.google.com/photos/1.0/depthmap/' },
1635
+ AVOID => 1, # (too potential tag name conflicts)
1636
+ NOTES => q{
1637
+ Google depthmap information. See
1638
+ L<https://developers.google.com/depthmap-metadata/> for the specification.
1639
+ },
1640
+ WRITABLE => 'string', # (default to string-type tags)
1641
+ PRIORITY => 0,
1642
+ Format => {
1643
+ PrintConv => {
1644
+ RangeInverse => 'RangeInverse',
1645
+ RangeLinear => 'RangeLinear',
1646
+ },
1647
+ },
1648
+ Near => { Writable => 'real' },
1649
+ Far => { Writable => 'real' },
1650
+ Mime => { },
1651
+ Data => {
1652
+ ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
1653
+ ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
1654
+ },
1655
+ Units => { },
1656
+ MeasureType => {
1657
+ PrintConv => {
1658
+ OpticalAxis => 'OpticalAxis',
1659
+ OpticalRay => 'OpticalRay',
1660
+ },
1661
+ },
1662
+ ConfidenceMime => { },
1663
+ Confidence => {
1664
+ ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
1665
+ ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
1666
+ },
1667
+ Manufacturer=> { },
1668
+ Model => { },
1669
+ Software => { },
1670
+ ImageWidth => { Writable => 'real' },
1671
+ ImageHeight => { Writable => 'real' },
1606
1672
  );
1607
1673
 
1608
1674
  # Getty Images namespace (ref PH)
@@ -1670,21 +1736,6 @@ my %sSubVersion = (
1670
1736
  NAMESPACE => undef, # variable namespace
1671
1737
  );
1672
1738
 
1673
- # set "Avoid" flag for all PRISM tags
1674
- my ($table, $key);
1675
- foreach $table (
1676
- \%Image::ExifTool::XMP::prism,
1677
- \%Image::ExifTool::XMP::prl,
1678
- \%Image::ExifTool::XMP::pur,
1679
- \%Image::ExifTool::XMP::pmi,
1680
- \%Image::ExifTool::XMP::prm)
1681
- {
1682
- foreach $key (TagTableKeys($table)) {
1683
- $$table{$key}{Avoid} = 1;
1684
- }
1685
- }
1686
-
1687
-
1688
1739
  1; #end
1689
1740
 
1690
1741
  __END__