exiftool_vendored 13.57.1 → 13.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 33465 tags, with 21435 unique tag names.
15
+ They contain a total of 33487 tags, with 21437 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -9628,18 +9628,18 @@ These tags are used by the EOS R3, R7, R50 and R6mkII
9628
9628
  169 ColorTempUnknown10? int16s
9629
9629
  170 WB_RGGBLevelsUnknown11? int16s[4]
9630
9630
  174 ColorTempUnknown11? int16s
9631
- 175 WB_RGGBLevelsUnknown11? int16s[4]
9632
- 179 ColorTempUnknown11? int16s
9633
- 180 WB_RGGBLevelsUnknown12? int16s[4]
9634
- 184 ColorTempUnknown12? int16s
9635
- 185 WB_RGGBLevelsUnknown13? int16s[4]
9636
- 189 ColorTempUnknown13? int16s
9637
- 190 WB_RGGBLevelsUnknown14? int16s[4]
9638
- 194 ColorTempUnknown14? int16s
9639
- 195 WB_RGGBLevelsUnknown15? int16s[4]
9640
- 199 ColorTempUnknown15? int16s
9641
- 200 WB_RGGBLevelsUnknown16? int16s[4]
9642
- 204 ColorTempUnknown16? int16s
9631
+ 175 WB_RGGBLevelsUnknown12? int16s[4]
9632
+ 179 ColorTempUnknown12? int16s
9633
+ 180 WB_RGGBLevelsUnknown13? int16s[4]
9634
+ 184 ColorTempUnknown13? int16s
9635
+ 185 WB_RGGBLevelsUnknown14? int16s[4]
9636
+ 189 ColorTempUnknown14? int16s
9637
+ 190 WB_RGGBLevelsUnknown15? int16s[4]
9638
+ 194 ColorTempUnknown15? int16s
9639
+ 195 WB_RGGBLevelsUnknown16? int16s[4]
9640
+ 199 ColorTempUnknown16? int16s
9641
+ 200 WB_RGGBLevelsUnknown17? int16s[4]
9642
+ 204 ColorTempUnknown17? int16s
9643
9643
  205 WB_RGGBLevelsDaylight int16s[4]
9644
9644
  209 ColorTempDaylight int16s
9645
9645
  210 WB_RGGBLevelsShade int16s[4]
@@ -9654,28 +9654,28 @@ These tags are used by the EOS R3, R7, R50 and R6mkII
9654
9654
  234 ColorTempKelvin int16s
9655
9655
  235 WB_RGGBLevelsFlash int16s[4]
9656
9656
  239 ColorTempFlash int16s
9657
- 240 WB_RGGBLevelsUnknown17? int16s[4]
9658
- 244 ColorTempUnknown17? int16s
9659
- 245 WB_RGGBLevelsUnknown18? int16s[4]
9660
- 249 ColorTempUnknown18? int16s
9661
- 250 WB_RGGBLevelsUnknown19? int16s[4]
9662
- 254 ColorTempUnknown19? int16s
9663
- 255 WB_RGGBLevelsUnknown20? int16s[4]
9664
- 259 ColorTempUnknown20? int16s
9665
- 260 WB_RGGBLevelsUnknown21? int16s[4]
9666
- 264 ColorTempUnknown21? int16s
9667
- 265 WB_RGGBLevelsUnknown22? int16s[4]
9668
- 269 ColorTempUnknown22? int16s
9669
- 270 WB_RGGBLevelsUnknown23? int16s[4]
9670
- 274 ColorTempUnknown23? int16s
9671
- 275 WB_RGGBLevelsUnknown24? int16s[4]
9672
- 279 ColorTempUnknown24? int16s
9673
- 280 WB_RGGBLevelsUnknown25? int16s[4]
9674
- 284 ColorTempUnknown25? int16s
9675
- 285 WB_RGGBLevelsUnknown26? int16s[4]
9676
- 289 ColorTempUnknown26? int16s
9677
- 290 WB_RGGBLevelsUnknown27? int16s[4]
9678
- 294 ColorTempUnknown27? int16s
9657
+ 240 WB_RGGBLevelsUnknown18? int16s[4]
9658
+ 244 ColorTempUnknown18? int16s
9659
+ 245 WB_RGGBLevelsUnknown19? int16s[4]
9660
+ 249 ColorTempUnknown19? int16s
9661
+ 250 WB_RGGBLevelsUnknown20? int16s[4]
9662
+ 254 ColorTempUnknown20? int16s
9663
+ 255 WB_RGGBLevelsUnknown21? int16s[4]
9664
+ 259 ColorTempUnknown21? int16s
9665
+ 260 WB_RGGBLevelsUnknown22? int16s[4]
9666
+ 264 ColorTempUnknown22? int16s
9667
+ 265 WB_RGGBLevelsUnknown23? int16s[4]
9668
+ 269 ColorTempUnknown23? int16s
9669
+ 270 WB_RGGBLevelsUnknown24? int16s[4]
9670
+ 274 ColorTempUnknown24? int16s
9671
+ 275 WB_RGGBLevelsUnknown25? int16s[4]
9672
+ 279 ColorTempUnknown25? int16s
9673
+ 280 WB_RGGBLevelsUnknown26? int16s[4]
9674
+ 284 ColorTempUnknown26? int16s
9675
+ 285 WB_RGGBLevelsUnknown27? int16s[4]
9676
+ 289 ColorTempUnknown27? int16s
9677
+ 290 WB_RGGBLevelsUnknown28? int16s[4]
9678
+ 294 ColorTempUnknown28? int16s
9679
9679
  300 ColorCalib? Canon ColorCalib
9680
9680
  363 PerChannelBlackLevel int16u[4]
9681
9681
  640 NormalWhiteLevel int16u
@@ -11157,6 +11157,7 @@ for a given protocol should be considered to have the default value of 0.
11157
11157
  'dvtm_AVATA2_1-1-10' Model no
11158
11158
  'dvtm_AVATA2_2-2-3-1' SerialNumber2 no
11159
11159
  'dvtm_AVATA2_2-3' FrameInfo DJI FrameInfo
11160
+ 'dvtm_AVATA2_3-1-1' FrameNumber no
11160
11161
  'dvtm_AVATA2_3-1-2' TimeStamp no
11161
11162
  'dvtm_AVATA2_3-2-2-1' ISO no
11162
11163
  'dvtm_AVATA2_3-2-4-1' ShutterSpeed no
@@ -11168,6 +11169,7 @@ for a given protocol should be considered to have the default value of 0.
11168
11169
  'dvtm_AVATA2_3-4-5-1' RelativeAltitude no
11169
11170
  'dvtm_Air3_1-1-5' SerialNumber no
11170
11171
  'dvtm_Air3_2-3' FrameInfo DJI FrameInfo
11172
+ 'dvtm_Air3_3-1-1' FrameNumber no
11171
11173
  'dvtm_Air3_3-1-2' TimeStamp no
11172
11174
  'dvtm_Air3_3-2-7-1' ISO no
11173
11175
  'dvtm_Air3_3-2-10-1' ShutterSpeed no
@@ -11180,6 +11182,7 @@ for a given protocol should be considered to have the default value of 0.
11180
11182
  'dvtm_Air3_3-4-3' GimbalInfo DJI GimbalInfo
11181
11183
  'dvtm_Air3s_1-1-5' SerialNumber no
11182
11184
  'dvtm_Air3s_2-3' FrameInfo DJI FrameInfo
11185
+ 'dvtm_Air3s_3-1-1' FrameNumber no
11183
11186
  'dvtm_Air3s_3-1-2' TimeStamp no
11184
11187
  'dvtm_Air3s_3-2-7-1' ISO no
11185
11188
  'dvtm_Air3s_3-2-10-1' ShutterSpeed no
@@ -11193,6 +11196,7 @@ for a given protocol should be considered to have the default value of 0.
11193
11196
  'dvtm_Mavic4_1-1-5' SerialNumber no
11194
11197
  'dvtm_Mavic4_1-1-10' Model no
11195
11198
  'dvtm_Mavic4_2-3' FrameInfo DJI FrameInfo
11199
+ 'dvtm_Mavic4_3-1-1' FrameNumber no
11196
11200
  'dvtm_Mavic4_3-1-2' TimeStamp no
11197
11201
  'dvtm_Mavic4_3-2-9-1' ISO no
11198
11202
  'dvtm_Mavic4_3-2-10-1' ShutterSpeed no
@@ -11205,6 +11209,7 @@ for a given protocol should be considered to have the default value of 0.
11205
11209
  'dvtm_Mini4_Pro_1-1-5' SerialNumber no
11206
11210
  'dvtm_Mini4_Pro_1-1-10' Model no
11207
11211
  'dvtm_Mini4_Pro_2-3' FrameInfo DJI FrameInfo
11212
+ 'dvtm_Mini4_Pro_3-1-1' FrameNumber no
11208
11213
  'dvtm_Mini4_Pro_3-2-7-1' ISO no
11209
11214
  'dvtm_Mini4_Pro_3-3-3' DroneInfo DJI DroneInfo
11210
11215
  'dvtm_Mini4_Pro_3-3-4-1' GPSInfo DJI GPSInfo
@@ -11213,6 +11218,7 @@ for a given protocol should be considered to have the default value of 0.
11213
11218
  'dvtm_Mini4_Pro_3-4-3' GimbalInfo DJI GimbalInfo
11214
11219
  'dvtm_Mini5Pro_1-1-5' SerialNumber no
11215
11220
  'dvtm_Mini5Pro_1-1-10' Model no
11221
+ 'dvtm_Mini5Pro_3-1-1' FrameNumber no
11216
11222
  'dvtm_Mini5Pro_3-2-37-1' Temperature no
11217
11223
  'dvtm_Mini5Pro_3-3-4-1' GPSInfo DJI GPSInfo
11218
11224
  'dvtm_Mini5Pro_3-3-4-2' AbsoluteAltitude no
@@ -11223,6 +11229,7 @@ for a given protocol should be considered to have the default value of 0.
11223
11229
  'dvtm_PP-101_1-1-5' SerialNumber no
11224
11230
  'dvtm_PP-101_1-1-10' Model no
11225
11231
  'dvtm_PP-101_2-3' FrameInfo DJI FrameInfo
11232
+ 'dvtm_PP-101_3-1-1' FrameNumber no
11226
11233
  'dvtm_PP-101_3-1-2' TimeStamp no
11227
11234
  'dvtm_PP-101_3-2-9-1' ISO no
11228
11235
  'dvtm_PP-101_3-2-10-1' ShutterSpeed no
@@ -11230,7 +11237,8 @@ for a given protocol should be considered to have the default value of 0.
11230
11237
  'dvtm_ac203_1-1-5' SerialNumber no
11231
11238
  'dvtm_ac203_1-1-10' Model no
11232
11239
  'dvtm_ac203_2-3' FrameInfo DJI FrameInfo
11233
- 'dvtm_ac203_3-2-2-1' ISO no
11240
+ 'dvtm_ac203_3-1-1' FrameNumber no
11241
+ 'dvtm_ac203_3-2-3-1' ISO no
11234
11242
  'dvtm_ac203_3-2-4-1' ShutterSpeed no
11235
11243
  'dvtm_ac203_3-2-6-1' ColorTemperature no
11236
11244
  'dvtm_ac203_3-2-10-2' AccelerometerX no
@@ -11242,6 +11250,8 @@ for a given protocol should be considered to have the default value of 0.
11242
11250
  'dvtm_ac204_1-1-5' SerialNumber no
11243
11251
  'dvtm_ac204_1-1-10' Model no
11244
11252
  'dvtm_ac204_2-3' FrameInfo DJI FrameInfo
11253
+ 'dvtm_ac204_3-1-1' FrameNumber no
11254
+ 'dvtm_ac204_3-2-3-1' ISO no
11245
11255
  'dvtm_ac204_3-2-4-1' ShutterSpeed no
11246
11256
  'dvtm_ac204_3-2-6-1' ColorTemperature no
11247
11257
  'dvtm_ac204_3-2-10-2' AccelerometerX no
@@ -11253,6 +11263,8 @@ for a given protocol should be considered to have the default value of 0.
11253
11263
  'dvtm_ac206_1-1-5' SerialNumber no
11254
11264
  'dvtm_ac206_1-1-10' Model no
11255
11265
  'dvtm_ac206_2-3' FrameInfo DJI FrameInfo
11266
+ 'dvtm_ac206_3-1-1' FrameNumber no
11267
+ 'dvtm_ac206_3-2-3-1' ISO no
11256
11268
  'dvtm_ac206_3-2-4-1' ShutterSpeed no
11257
11269
  'dvtm_ac206_3-2-6-1' ColorTemperature no
11258
11270
  'dvtm_ac206_3-2-10-2' AccelerometerX no
@@ -11265,6 +11277,7 @@ for a given protocol should be considered to have the default value of 0.
11265
11277
  'dvtm_dji_neo_1-1-10' Model no
11266
11278
  'dvtm_dji_neo_2-2-3-1' SerialNumber2 no
11267
11279
  'dvtm_dji_neo_2-3' FrameInfo DJI FrameInfo
11280
+ 'dvtm_dji_neo_3-1-1' FrameNumber no
11268
11281
  'dvtm_dji_neo_3-1-2' TimeStamp no
11269
11282
  'dvtm_dji_neo_3-2-2-1' ISO no
11270
11283
  'dvtm_dji_neo_3-2-4-1' ShutterSpeed no
@@ -11276,6 +11289,7 @@ for a given protocol should be considered to have the default value of 0.
11276
11289
  'dvtm_oq101_1-1-5' SerialNumber no
11277
11290
  'dvtm_oq101_1-1-10' Model no
11278
11291
  'dvtm_oq101_1-14-1' FNumber no
11292
+ 'dvtm_oq101_3-1-1' FrameNumber no
11279
11293
  'dvtm_oq101_3-1-2' TimeStamp no
11280
11294
  'dvtm_oq101_3-2-3-1' ISO no
11281
11295
  'dvtm_oq101_3-2-4-1' ShutterSpeed no
@@ -11289,6 +11303,7 @@ for a given protocol should be considered to have the default value of 0.
11289
11303
  'dvtm_pm320_1-1-5' SerialNumber no
11290
11304
  'dvtm_pm320_1-1-10' Model no
11291
11305
  'dvtm_pm320_2-2' FrameInfo DJI FrameInfo
11306
+ 'dvtm_pm320_3-1-1' FrameNumber no
11292
11307
  'dvtm_pm320_3-2-2-1' ISO no
11293
11308
  'dvtm_pm320_3-2-3-1' ShutterSpeed no
11294
11309
  'dvtm_pm320_3-2-4-1' FNumber no
@@ -11301,6 +11316,7 @@ for a given protocol should be considered to have the default value of 0.
11301
11316
  'dvtm_wa345e_1-1-5' SerialNumber no
11302
11317
  'dvtm_wa345e_1-1-10' Model no
11303
11318
  'dvtm_wa345e_2-2' FrameInfo DJI FrameInfo
11319
+ 'dvtm_wa345e_3-1-1' FrameNumber no
11304
11320
  'dvtm_wa345e_3-1-2' TimeStamp no
11305
11321
  'dvtm_wa345e_3-3-3' DroneInfo DJI DroneInfo
11306
11322
  'dvtm_wa345e_3-3-4-1' GPSInfo DJI GPSInfo
@@ -11311,6 +11327,7 @@ for a given protocol should be considered to have the default value of 0.
11311
11327
  'dvtm_wm261_1-1-5' SerialNumber no
11312
11328
  'dvtm_wm261_1-1-10' Model no
11313
11329
  'dvtm_wm261_2-3' FrameInfo DJI FrameInfo
11330
+ 'dvtm_wm261_3-1-1' FrameNumber no
11314
11331
  'dvtm_wm261_3-1-2' TimeStamp no
11315
11332
  'dvtm_wm261_3-2-9-1' ISO no
11316
11333
  'dvtm_wm261_3-2-10-1' ShutterSpeed no
@@ -11324,6 +11341,7 @@ for a given protocol should be considered to have the default value of 0.
11324
11341
  'dvtm_wm265e_1-1-5' SerialNumber no
11325
11342
  'dvtm_wm265e_1-1-10' Model no
11326
11343
  'dvtm_wm265e_2-2' FrameInfo DJI FrameInfo
11344
+ 'dvtm_wm265e_3-1-1' FrameNumber no
11327
11345
  'dvtm_wm265e_3-2-2-1' ISO no
11328
11346
  'dvtm_wm265e_3-2-3-1' ShutterSpeed no
11329
11347
  'dvtm_wm265e_3-2-6-1' DigitalZoom no
@@ -12001,7 +12019,7 @@ Tags extracted from the header of RAF images.
12001
12019
 
12002
12020
  Index1 Tag Name Writable
12003
12021
  ------ -------- --------
12004
- 60 RAFVersion no
12022
+ 60 FirmwareVersion no
12005
12023
  108 RAFCompression no
12006
12024
 
12007
12025
  =head3 FujiFilm RAF Tags
@@ -12032,6 +12050,7 @@ RAF-format information.
12032
12050
  0x2310 WB_GRGBLevelsWarmWhiteFluor no
12033
12051
  0x2311 WB_GRGBLevelsLivingRoomWarmWhiteFluor no
12034
12052
  0x2400 WB_GRGBLevelsTungsten no
12053
+ 0x2410 WB_GRGBLevelsFlash no
12035
12054
  0x2ff0 WB_GRGBLevels no
12036
12055
  0x9200 RelativeExposure no
12037
12056
  0x9650 RawExposureBias no
@@ -20650,6 +20669,7 @@ These tags are used in Pentax/Asahi/Ricoh cameras.
20650
20669
  0x0095 SkinToneCorrection int8s[2]
20651
20670
  SkinToneCorrection int8s[3]
20652
20671
  0x0096 ClarityControl int8s[2]
20672
+ 0x009e HDF int8u
20653
20673
  0x0200 BlackPoint int16u[4]
20654
20674
  0x0201 WhitePoint int16u[4]
20655
20675
  0x0203 ColorMatrixA int16s[9]
@@ -23708,8 +23728,8 @@ Valid from July 2020 for ILCE-1/7SM3, ILME-FX3.
23708
23728
 
23709
23729
  =head3 Sony Tag9050d Tags
23710
23730
 
23711
- Valid for ILCE-6700/7CM2/7CR/ZV-E1. Also for ILCE-1M2/7M5 when using mechanical
23712
- shutter.
23731
+ Valid for ILCE-6700/7CM2/7CR/ZV-E1. Also for ILCE-1M2/7M5/7RM6 when using
23732
+ mechanical shutter.
23713
23733
 
23714
23734
  Index1 Tag Name Writable
23715
23735
  ------ -------- --------
@@ -24125,8 +24145,8 @@ E-mount models.
24125
24145
 
24126
24146
  =head3 Sony Tag9416 Tags
24127
24147
 
24128
- Valid for the ILCE-1/6700/7CM2/7CR/7M4/7M5/7RM5/7SM3/9M3, ILME-FX2/FX3/FX30,
24129
- ZV-E1/E10M2, but ILCE-7M5 has different offsets.
24148
+ Valid for the ILCE-1/6700/7CM2/7CR/7M4/7M5/7RM5/7RM6/7SM3/9M3,
24149
+ ILME-FX2/FX3/FX30, ZV-E1/E10M2, but ILCE-7M5 has different offsets.
24130
24150
 
24131
24151
  Index1 Tag Name Writable
24132
24152
  ------ -------- --------
@@ -24151,8 +24171,11 @@ ZV-E1/E10M2, but ILCE-7M5 has different offsets.
24151
24171
  115 MinFocalLength no
24152
24172
  117 MaxFocalLength no
24153
24173
  1794 VignettingCorrParams no
24174
+ 1800 VignettingCorrParams no
24154
24175
  1866 APS-CSizeCapture no
24176
+ 1871 APS-CSizeCapture no
24155
24177
  2107 ChromaticAberrationCorrParams no
24178
+ 2115 ChromaticAberrationCorrParams no
24156
24179
  2191 VignettingCorrParams no
24157
24180
  2193 VignettingCorrParams no
24158
24181
  2205 VignettingCorrParams no
@@ -31050,7 +31073,7 @@ for the official QuickTime specification.
31050
31073
  The tags below are extracted from timed metadata in QuickTime and other
31051
31074
  formats of video files when the ExtractEmbedded option is used. Although
31052
31075
  most of these tags are combined into the single table below, ExifTool
31053
- currently reads 123 different types of timed GPS metadata.
31076
+ currently reads 124 different types of timed GPS metadata.
31054
31077
 
31055
31078
  Tag ID Tag Name Writable
31056
31079
  ------ -------- --------
@@ -43114,15 +43137,17 @@ L<XMP DICOM Tags|Image::ExifTool::TagNames/XMP DICOM Tags>.
43114
43137
  =head3 Garmin FIT Tags
43115
43138
 
43116
43139
  Information extracted from Garmin FIT (Flexible and Interoperable data
43117
- Transfer) files. By default, only timestamps and GPS-related FIT messages
43118
- are decoded, and the rest are marked as Unknown to be extracted only if the
43119
- Unknown (-u) option is used. And unless the ExtractEmbedded (-ee) option is
43120
- used, only the first FIT message of each type is extracted. When both of
43121
- these options are used, a significant amount of information may be
43122
- extracted, and processing times may be lengthy. The family 1 group names of
43123
- the extracted tags correspond to the FIT message names. The first table
43124
- below lists the FIT messages, and subsequent tables list the extracted tags.
43125
- See L<https://developer.garmin.com/fit/> for the specification.
43140
+ Transfer) files. The main reason for adding FIT support was to allow
43141
+ geotagging directly from FIT files using the -geotag option. For this
43142
+ reason, only timestamps and GPS-related FIT messages are decoded by default,
43143
+ and the rest are marked as Unknown to be extracted only if the Unknown
43144
+ (-u) option is used. And unless the ExtractEmbedded (-ee) option is used,
43145
+ only the first FIT message of each type is extracted. When both of these
43146
+ options are used, a significant amount of information may be extracted, and
43147
+ processing times may be lengthy. The family 1 group names of the extracted
43148
+ tags correspond to the FIT message names. The first table below lists the
43149
+ FIT messages, and subsequent tables list the extracted tags. See
43150
+ L<https://developer.garmin.com/fit/> for the specification.
43126
43151
 
43127
43152
  Tag ID Tag Name Writable
43128
43153
  ------ -------- --------
@@ -47589,6 +47614,7 @@ FileName.
47589
47614
  MakerNoteByteOrder File no
47590
47615
  MaxVal File no
47591
47616
  NewGUID ExifTool no
47617
+ NewUUID ExifTool no
47592
47618
  Now ExifTool no
47593
47619
  NumPlanes File no
47594
47620
  OtherImage File no
@@ -47600,8 +47626,6 @@ FileName.
47600
47626
  PreviewTIFF File no
47601
47627
  PreviewWMF File no
47602
47628
  ProcessingTime ExifTool no
47603
- RAFCompression File no
47604
- RAFVersion File no
47605
47629
  ResourceForkSize System no
47606
47630
  SphericalVideoXML GSpherical yes!
47607
47631
  SymLink - yes!
@@ -47913,14 +47937,14 @@ values, may created via the ExifTool configuration file.
47913
47937
  SegWidth
47914
47938
  SegHeight
47915
47939
  SubSecCreateDate EXIF:CreateDate yes
47916
- SubSecTimeDigitized
47917
- OffsetTimeDigitized
47940
+ EXIF:SubSecTimeDigitized
47941
+ EXIF:OffsetTimeDigitized
47918
47942
  SubSecDateTimeOriginal EXIF:DateTimeOriginal yes
47919
- SubSecTimeOriginal
47920
- OffsetTimeOriginal
47943
+ EXIF:SubSecTimeOriginal
47944
+ EXIF:OffsetTimeOriginal
47921
47945
  SubSecModifyDate EXIF:ModifyDate yes
47922
- SubSecTime
47923
- OffsetTime
47946
+ EXIF:SubSecTime
47947
+ EXIF:OffsetTime
47924
47948
  ThumbnailImage ThumbnailOffset yes
47925
47949
  ThumbnailLength
47926
47950
  ThumbnailTIFF SubfileType no
@@ -33,6 +33,9 @@ my %extendedRes = (
33
33
  'crss' => 1,
34
34
  );
35
35
 
36
+ # namespaces to validate more completely when Validate option is used
37
+ my %validateNS = ( tiff => 1, exif => 1, exifEX => 1 );
38
+
36
39
  my $rdfDesc = 'rdf:Description';
37
40
  #
38
41
  # packet/xmp/rdf headers and trailers
@@ -118,6 +121,12 @@ sub ValidateProperty($$;$)
118
121
  }
119
122
  }
120
123
  }
124
+ if ($$propList[-1] =~ /^(\w+):(\w+)/ and $validateNS{$1} or
125
+ $$propList[-1] eq 'rdf:li' and $$propList[-3] =~ /^(\w+):(\w+)/ and $validateNS{$1})
126
+ {
127
+ my $tbl = GetTagTable("Image::ExifTool::XMP::$1");
128
+ $et->Warn("Non-standard XMP property: $1:$2") if $tbl and not $$tbl{$2};
129
+ }
121
130
  my $xmpValidate = $$et{XmpValidate};
122
131
  my $path = join('/', @$propList[3..$#$propList]);
123
132
  if (defined $$xmpValidate{$path}) {
@@ -4929,6 +4929,18 @@ sub NewGUID()
4929
4929
  $$ & 0xffff, rand(0x10000), rand(0x10000), rand(0x10000));
4930
4930
  }
4931
4931
 
4932
+ #------------------------------------------------------------------------------
4933
+ # Generate a version 4 ("random"), variant 1 UUID (RFC 9562, Section 5.4) (github #421)
4934
+ # Inputs: <none>
4935
+ # Returns: UUID string
4936
+ sub NewUUID()
4937
+ {
4938
+ my @rnd = map {int(rand(256))} 1 .. 16;
4939
+ $rnd[6] = ($rnd[6] & 0x0f) | 0x40;
4940
+ $rnd[8] = ($rnd[8] & 0x3f) | 0x80;
4941
+ return uc scalar unpack('H32', join '', map {chr} @rnd);
4942
+ }
4943
+
4932
4944
  #------------------------------------------------------------------------------
4933
4945
  # Make TIFF header for raw data
4934
4946
  # Inputs: 0) width, 1) height, 2) num colour components, 3) bits, 4) resolution
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.78';
53
+ $VERSION = '3.79';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3661,7 +3661,7 @@ NoLoop:
3661
3661
  my $v = UnescapeXML(substr($val, 0, $p - length($1) - 12)) . $1;
3662
3662
  while ($val =~ /<!\[CDATA\[(.*?)\]\]>/sg) {
3663
3663
  my $p1 = pos $val;
3664
- $v .= UnescapeXML(substr($val, $p, $p1 - length($1) - 12)) . $1;
3664
+ $v .= UnescapeXML(substr($val, $p, $p1 - $p - length($1) - 12)) . $1;
3665
3665
  $p = $p1;
3666
3666
  }
3667
3667
  $val = $v . UnescapeXML(substr($val, $p));
@@ -3774,6 +3774,7 @@ sub ParseXMPElement($$$;$$$$)
3774
3774
  my $isSVG = $$et{XMP_IS_SVG};
3775
3775
  my $saveNS; # save xlatNS lookup if changed for the scope of this element
3776
3776
  my (%definedNS, %usedNS); # namespaces defined and used in this scope
3777
+ my $err;
3777
3778
 
3778
3779
  # get our parse procs
3779
3780
  my ($attrProc, $foundProc);
@@ -3803,11 +3804,16 @@ sub ParseXMPElement($$$;$$$$)
3803
3804
  last if pos($$dataPt) > $end - 4;
3804
3805
  # reset nodeID before processing each element
3805
3806
  my $nodeID = $$blankInfo{NodeID} = $oldNodeID;
3806
- # get next element
3807
- last if $$dataPt !~ m{<([?/]?)([-\w:.\x80-\xff]+|!--)([^>]*)>}sg or pos($$dataPt) > $end;
3807
+ # find start of next element, skipping over "<![CDATA[xxx]]>" sections
3808
+ last if $$dataPt !~ m{<([?/]?)([-\w:.\x80-\xff]+|!--)([^>]*)>|(<!\[CDATA\[)}sg or pos($$dataPt) > $end;
3808
3809
  # (the only reason we match '<[?/]' is to keep from scanning past the
3809
3810
  # "<?xpacket end..." terminator or other closing token, so
3810
3811
  next if $1;
3812
+ if ($4) { # skip CDATA
3813
+ next if $$dataPt =~ /\]\]>/sg and pos($$dataPt) <= $end;
3814
+ $err = "Missing CDATA terminator";
3815
+ last Element;
3816
+ }
3811
3817
  my ($prop, $attrs) = ($2, $3);
3812
3818
  # skip comments
3813
3819
  if ($prop eq '!--') {
@@ -3815,7 +3821,7 @@ sub ParseXMPElement($$$;$$$$)
3815
3821
  last;
3816
3822
  }
3817
3823
  my $valStart = pos($$dataPt);
3818
- my $valEnd;
3824
+ my ($valEnd, $wasComment);
3819
3825
  # only look for closing token if this is not an empty element
3820
3826
  # (empty elements end with '/', eg. <a:b/>)
3821
3827
  if ($attrs !~ s/\/$//) {
@@ -3827,12 +3833,23 @@ sub ParseXMPElement($$$;$$$$)
3827
3833
  # my $val2 = $1;
3828
3834
  # find next matching closing token, or the next opening token
3829
3835
  # of a nested same-named element
3830
- if ($$dataPt !~ m{<(/?)$prop([-\w:.\x80-\xff]*)(.*?(/?))>}sg or
3836
+ if ($$dataPt !~ m{<(?:(/?)\Q$prop\E([-\w:.\x80-\xff]*)(.*?(/?))>|(!\[CDATA\[|!--))}sg or
3831
3837
  pos($$dataPt) > $end)
3832
3838
  {
3833
- $et->Warn("XMP format error (no closing tag for $prop)");
3839
+ $err = "XMP format error (no closing tag for $prop)";
3834
3840
  last Element;
3835
3841
  }
3842
+ if ($5) { # find end of CDATA or comment section
3843
+ if ($5 eq '![CDATA[') {
3844
+ next if $$dataPt =~ /\]\]>/sg and pos($$dataPt) <= $end;
3845
+ $err = 'Missing CDATA terminator';
3846
+ last Element;
3847
+ } else {
3848
+ $$dataPt =~ /-->/sg and pos($$dataPt) <= $end and $wasComment = 1, next;
3849
+ $err = 'Missing comment terminator';
3850
+ last Element;
3851
+ }
3852
+ }
3836
3853
  next if $2; # ignore opening properties with different names
3837
3854
  if ($1) {
3838
3855
  next if --$nesting;
@@ -4161,6 +4178,8 @@ sub ParseXMPElement($$$;$$$$)
4161
4178
  # remove comments and whitespace from rdf:Description only
4162
4179
  if ($prop eq 'rdf:Description' and $val) {
4163
4180
  $val =~ s/<!--.*?-->//g; $val =~ s/^\s+//; $val =~ s/\s+$//;
4181
+ } elsif ($wasComment and $val) {
4182
+ $val =~ s/<!--.*?-->//g;
4164
4183
  }
4165
4184
  # if element value is empty, take value from RDF 'value' or 'resource' attribute
4166
4185
  # (preferentially) or 'about' attribute (if no 'value' or 'resource')
@@ -4214,6 +4233,8 @@ sub ParseXMPElement($$$;$$$$)
4214
4233
  pos($$dataPt) = $start;
4215
4234
  $$dataPt =~ /\G\s+/gc; # skip white space after closing token
4216
4235
  }
4236
+ # handle any error which aborted processing
4237
+ $isWriting ? $et->Error($err) : $et->Warn($err) if $err;
4217
4238
  #
4218
4239
  # process resources referenced by blank nodeID's
4219
4240
  #
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf $configFile @configFiles $noConfig);
31
31
 
32
- $VERSION = '13.57';
32
+ $VERSION = '13.59';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -121,6 +121,7 @@ sub CopyFileAttrs($$$);
121
121
  sub TimeNow(;$$);
122
122
  sub InverseDateTime($$;$$);
123
123
  sub NewGUID();
124
+ sub NewUUID();
124
125
  sub MakeTiffHeader($$$$;$$);
125
126
 
126
127
  # other subroutine definitions
@@ -1873,8 +1874,6 @@ my %systemTagsNotes = (
1873
1874
  },
1874
1875
  PrintConv => 'sprintf("%.3g s", $val)',
1875
1876
  },
1876
- RAFVersion => { Notes => 'RAF file version number' },
1877
- RAFCompression => { PrintConv => { 0 => 'Uncompressed', 2 => 'Compressed' } }, # 1 maybe lossy?
1878
1877
  JPEGDigest => {
1879
1878
  Notes => q{
1880
1879
  an MD5 digest of the JPEG quantization tables is combined with the component
@@ -1921,6 +1920,15 @@ my %systemTagsNotes = (
1921
1920
  },
1922
1921
  PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val',
1923
1922
  },
1923
+ NewUUID => {
1924
+ Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' },
1925
+ Notes => q{
1926
+ generates a version 4 ("random"), variant 1 UUID as per RFC 9562, Section
1927
+ 5.4. Not generated unless specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll>
1928
+ option is set
1929
+ },
1930
+ PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val',
1931
+ },
1924
1932
  ID3Size => { Notes => 'size of the ID3 data block' },
1925
1933
  Geotag => {
1926
1934
  Writable => 1,
@@ -2771,6 +2779,7 @@ sub ExtractInfo($;@)
2771
2779
  $self->FoundTag('ExifToolVersion', "$VERSION$RELEASE");
2772
2780
  $self->FoundTag('Now', $self->TimeNow()) if $$req{now} or $reqAll;
2773
2781
  $self->FoundTag('NewGUID', NewGUID()) if $$req{newguid} or $reqAll;
2782
+ $self->FoundTag('NewUUID', NewUUID()) if $$req{newuuid} or $reqAll;
2774
2783
  # generate sequence number if necessary
2775
2784
  $self->FoundTag('FileSequence', $$self{FILE_SEQUENCE}) if $$req{filesequence} or $reqAll;
2776
2785
 
@@ -3388,7 +3397,7 @@ sub GetTagList($;$$$)
3388
3397
  $$fileOrder{$a} <=> $$fileOrder{$b} } @$foundTags;
3389
3398
  } elsif ($sort eq 'Descr') {
3390
3399
  my $desc = $self->GetDescriptions($foundTags);
3391
- return sort { $$desc{$a} cmp $$desc{$b} } @$foundTags;
3400
+ return sort { $$desc{$a} cmp $$desc{$b} or $a cmp $b } @$foundTags;
3392
3401
  } else {
3393
3402
  return sort { $$fileOrder{$a} <=> $$fileOrder{$b} } @$foundTags;
3394
3403
  }
@@ -5411,7 +5420,7 @@ sub SetFoundTags($)
5411
5420
  # put entry in return list even without value (value is undef)
5412
5421
  $matches[0] = $byValue ? "$tag #(0)" : "$tag (0)";
5413
5422
  # bogus file order entry to avoid warning if sorting in file order
5414
- $$self{FILE_ORDER}{$matches[0]} = 9999;
5423
+ $$self{FILE_ORDER}{$matches[0]} = 999999999;
5415
5424
  }
5416
5425
  # copy over necessary information for tags from alternate files
5417
5426
  if ($g8) {
@@ -10171,7 +10180,7 @@ sub ProcessBinaryData($$$)
10171
10180
  push @configFiles, $configFile if defined $configFile;
10172
10181
  until ($noConfig) {
10173
10182
  my $config = shift @configFiles;
10174
- my $file;
10183
+ my ($file, $wasConfig);
10175
10184
  if (not defined $config) {
10176
10185
  $config = '.ExifTool_config';
10177
10186
  # get our home directory (HOMEDRIVE and HOMEPATH are used in Windows cmd shell)
@@ -10182,17 +10191,34 @@ until ($noConfig) {
10182
10191
  } else {
10183
10192
  length $config or last; # filename of "" disables configuration
10184
10193
  $file = $config;
10194
+ $wasConfig = 1;
10185
10195
  }
10186
- # also check executable directory unless path is absolute
10187
- $exeDir = ($0 =~ /(.*)[\\\/]/) ? $1 : '.' unless defined $exeDir;
10188
- -r $file or $config =~ /^\// or $file = "$exeDir/$config";
10189
- unless (-r $file) {
10190
- warn("Config file not found\n") if defined $Image::ExifTool::configFile;
10191
- last;
10196
+ if ($file eq '-') {
10197
+ local *FH;
10198
+ if (open(\*FH, '<-')) {
10199
+ my $buff;
10200
+ my $n = read(\*FH, $buff, 100000000);
10201
+ close \*FH;
10202
+ if ($n == 100000000) {
10203
+ warn("Piped config file is too large\n");
10204
+ } elsif ($n) {
10205
+ eval $buff;
10206
+ } else {
10207
+ undef $@;
10208
+ }
10209
+ }
10210
+ } else {
10211
+ # also check executable directory unless path is absolute
10212
+ $exeDir = ($0 =~ /(.*)[\\\/]/) ? $1 : '.' unless defined $exeDir;
10213
+ -r $file or $config =~ /^\// or $file = "$exeDir/$config";
10214
+ unless (-r $file) {
10215
+ warn("Config file not found\n") if $wasConfig;
10216
+ last;
10217
+ }
10218
+ unshift @INC, '.'; # look in current directory first
10219
+ eval { require $file }; # load the config file
10220
+ shift @INC;
10192
10221
  }
10193
- unshift @INC, '.'; # look in current directory first
10194
- eval { require $file }; # load the config file
10195
- shift @INC;
10196
10222
  # print warning (minus "Compilation failed" part)
10197
10223
  $@ and $_=$@, s/Compilation failed.*//s, warn $_;
10198
10224
  last unless @configFiles;
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.57
3
+ Version: 13.59
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('13.57.1')
4
+ VERSION = Gem::Version.new('13.59.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.57.1
4
+ version: 13.59.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -63,6 +63,7 @@ files:
63
63
  - bin/config_files/guano.config
64
64
  - bin/config_files/local_time.config
65
65
  - bin/config_files/nksc.config
66
+ - bin/config_files/novelty.config
66
67
  - bin/config_files/onone.config
67
68
  - bin/config_files/photoshop_paths.config
68
69
  - bin/config_files/picasa_faces.config
@@ -344,7 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
344
345
  - !ruby/object:Gem::Version
345
346
  version: '0'
346
347
  requirements: []
347
- rubygems_version: 4.0.8
348
+ rubygems_version: 4.0.10
348
349
  specification_version: 4
349
350
  summary: Vendored version of exiftool
350
351
  test_files: []