exiftool_vendored 13.31.0 → 13.33.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +38 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +47 -46
  7. data/bin/exiftool +81 -56
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
  9. data/bin/lib/Image/ExifTool/Canon.pm +10 -2
  10. data/bin/lib/Image/ExifTool/Exif.pm +5 -3
  11. data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
  12. data/bin/lib/Image/ExifTool/FujiFilm.pm +10 -3
  13. data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
  14. data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
  15. data/bin/lib/Image/ExifTool/LNK.pm +4 -1
  16. data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
  17. data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
  18. data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
  19. data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
  20. data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
  21. data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
  22. data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
  23. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
  24. data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
  25. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Nikon.pm +71 -37
  27. data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
  28. data/bin/lib/Image/ExifTool/Olympus.pm +240 -35
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
  30. data/bin/lib/Image/ExifTool/Pentax.pm +271 -53
  31. data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
  32. data/bin/lib/Image/ExifTool/Sony.pm +5 -2
  33. data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
  34. data/bin/lib/Image/ExifTool/TagLookup.pm +4373 -4264
  35. data/bin/lib/Image/ExifTool/TagNames.pod +249 -17
  36. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
  37. data/bin/lib/Image/ExifTool/Writer.pl +15 -11
  38. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  39. data/bin/lib/Image/ExifTool.pm +11 -4
  40. data/bin/lib/Image/ExifTool.pod +45 -44
  41. data/bin/perl-Image-ExifTool.spec +46 -45
  42. data/lib/exiftool_vendored/version.rb +1 -1
  43. metadata +3 -2
@@ -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 28455 tags, with 17676 unique tag names.
15
+ They contain a total of 28629 tags, with 17828 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
@@ -364,11 +364,11 @@ tags remain.
364
364
 
365
365
  The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
366
366
  other tags which are not part of the EXIF specification, but may co-exist
367
- with EXIF tags in some images. Tags which are part of the EXIF 2.32
367
+ with EXIF tags in some images. Tags which are part of the EXIF 3.0
368
368
  specification have an underlined B<Tag Name> in the HTML version of this
369
369
  documentation. See
370
- L<https://web.archive.org/web/20190624045241if_/http://www.cipa.jp:80/std/documents/e/DC-008-Translation-2019-E.pdf>
371
- for the official EXIF 2.32 specification.
370
+ L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2024-E>
371
+ for the official EXIF 3.0 specification.
372
372
 
373
373
  Tag ID Tag Name Group Writable
374
374
  ------ -------- ----- --------
@@ -1039,6 +1039,8 @@ for the official EXIF 2.32 specification.
1039
1039
  0xc7aa CacheVersion SubIFD2 int32u!
1040
1040
  0xc7b5 DefaultUserCrop SubIFD rational64u[4]!
1041
1041
  0xc7d5 NikonNEFInfo - Nikon NEFInfo
1042
+ 0xc7d7 ZIFMetadata - no
1043
+ 0xc7d8 ZIFAnnotations - no
1042
1044
  0xc7e9 DepthFormat IFD0 int16u!
1043
1045
  0xc7ea DepthNear IFD0 rational64u!
1044
1046
  0xc7eb DepthFar IFD0 rational64u!
@@ -8048,7 +8050,9 @@ boot, not including standby time.
8048
8050
  41 ManualFlashOutput int16s
8049
8051
  42 ColorTone int16s
8050
8052
  46 SRAWQuality int16s
8053
+ 50 FocusBracketing int16s
8051
8054
  51 Clarity int16s
8055
+ 52 HDR-PQ int16s
8052
8056
 
8053
8057
  =head3 Canon FocalLength Tags
8054
8058
 
@@ -12185,6 +12189,9 @@ Tags extracted from FLIR Public image Format (FPF) files.
12185
12189
  0x1446 FlickerReduction int32u
12186
12190
  0x1447 FujiModel string
12187
12191
  0x1448 FujiModel2 string
12192
+ 0x144a WBRed int16u
12193
+ 0x144b WBGreen int16u
12194
+ 0x144c WBBlue int16u
12188
12195
  0x144d RollAngle rational64s
12189
12196
  0x3803 VideoRecordingMode int32u
12190
12197
  0x3804 PeripheralLighting int16u
@@ -15992,13 +15999,11 @@ These tags are used by the Z8 firmware 2.00 and 2.10.
15992
15999
  1812 NonCPULens1MaxAperture? int32u~
15993
16000
  1816 NonCPULens2MaxAperture? int32u~
15994
16001
  1820 NonCPULens3MaxAperture? int32u~
15995
- 1824 HDMIOutputResolution int8u
16002
+ 1824 NonCPULens4MaxAperture? int32u~
15996
16003
  1828 NonCPULens5MaxAperture? int32u~
15997
16004
  1832 NonCPULens6MaxAperture? int32u~
15998
16005
  1836 NonCPULens7MaxAperture? int32u~
15999
16006
  1840 NonCPULens8MaxAperture? int32u~
16000
- 1842 AirplaneMode? int8u
16001
- 1843 EmptySlotRelease? int8u
16002
16007
  1844 NonCPULens9MaxAperture? int32u~
16003
16008
  1848 NonCPULens10MaxAperture? int32u~
16004
16009
  1852 NonCPULens11MaxAperture? int32u~
@@ -16008,12 +16013,15 @@ These tags are used by the Z8 firmware 2.00 and 2.10.
16008
16013
  1868 NonCPULens15MaxAperture? int32u~
16009
16014
  1872 NonCPULens16MaxAperture? int32u~
16010
16015
  1876 NonCPULens17MaxAperture? int32u~
16011
- 1878 EnergySavingMode? int8u
16012
16016
  1880 NonCPULens18MaxAperture? int32u~
16013
16017
  1884 NonCPULens19MaxAperture? int32u~
16014
16018
  1888 NonCPULens20MaxAperture? int32u~
16015
- 1906 USBPowerDelivery? int8u
16016
- 1915 SensorShield? int8u
16019
+ 1904 HDMIOutputResolution int8u
16020
+ 1922 AirplaneMode? int8u
16021
+ 1923 EmptySlotRelease? int8u
16022
+ 1958 EnergySavingMode? int8u
16023
+ 1986 USBPowerDelivery? int8u
16024
+ 1995 SensorShield? int8u
16017
16025
  2046 PixelShiftShooting int8u
16018
16026
  2048 PixelShiftNumberShots int8u
16019
16027
  2050 PixelShiftDelay int8u
@@ -16024,6 +16032,9 @@ These tags are used by the Z8 firmware 2.00 and 2.10.
16024
16032
  2060 LensFunc2ButtonPlaybackMode int8u
16025
16033
  2062 PlaybackButtonPlaybackMode int8u
16026
16034
  2064 BracketButtonPlaybackMode int8u
16035
+ 2206 MaximumApertureLV? int8u
16036
+ 2208 ReleaseModeButton int8u
16037
+ 2216 ReleaseModeButtonPlaybackMode int8u
16027
16038
 
16028
16039
  =head3 Nikon ShotInfoZ9 Tags
16029
16040
 
@@ -16833,7 +16844,7 @@ Z6, Z6ii, Z7, Z7ii, Z50 and Zfc.
16833
16844
  =head3 Nikon AFInfo2V0400 Tags
16834
16845
 
16835
16846
  AF information for Nikon cameras with the Expeed 7 processor: The Zf, Z6_3,
16836
- Z8, Z9 and Z50_3.
16847
+ Z8, Z9, Z50_2 and Z5_2.
16837
16848
 
16838
16849
  Index1 Tag Name Writable
16839
16850
  ------ -------- --------
@@ -18557,6 +18568,7 @@ Custom settings for the Z8.
18557
18568
  263 AutoFocusModeRestrictions? int8u
18558
18569
  267 CHModeShootingSpeed int8u
18559
18570
  273 FlashBurstPriority? int8u
18571
+ 281 Func3Button int8u
18560
18572
  335 LimitAF-AreaModeSelDynamic_S? int8u
18561
18573
  336 LimitAF-AreaModeSelDynamic_M? int8u
18562
18574
  337 LimitAF-AreaModeSelDynamic_L? int8u
@@ -18578,7 +18590,6 @@ Custom settings for the Z8.
18578
18590
  465 SubCommandDialVideoPlaybackMode? int8u
18579
18591
  467 FocusPointLock? int8u
18580
18592
  469 ControlRingResponse int8u
18581
- 515 MovieAFAreaMode? int8u
18582
18593
  529 ZebraPatternToneRange? int8u
18583
18594
  531 MovieZebraPattern? int8u
18584
18595
  533 MovieHighlightDisplayThreshold? int8u
@@ -18878,7 +18889,6 @@ Custom settings for the Z9.
18878
18889
  493 ControlRingResponse int8u
18879
18890
  505 VerticalMovieFuncButton? int8u
18880
18891
  529 VerticalMovieAFOnButton? int8u
18881
- 539 MovieAFAreaMode? int8u
18882
18892
  551 HDMIViewAssist? int8u
18883
18893
  553 ZebraPatternToneRange? int8u
18884
18894
  555 MovieZebraPattern? int8u
@@ -19340,6 +19350,8 @@ any information found here will be extracted, even if the tag is not listed.
19340
19350
  0x0307 AFFineTuneAdj int16s[3]
19341
19351
  0x0308 FocusBracketStepSize int8u
19342
19352
  0x0309 AISubjectTrackingMode int16u
19353
+ 0x030a AFTargetInfo Olympus AFTargetInfo
19354
+ 0x030b SubjectDetectInfo Olympus SubjectDetectInfo
19343
19355
  0x0400 FlashMode int16u
19344
19356
  0x0401 FlashExposureComp rational64s
19345
19357
  0x0403 FlashRemoteControl int16u
@@ -19384,6 +19396,7 @@ any information found here will be extracted, even if the tag is not listed.
19384
19396
  0x0603 ImageQuality2 int16u
19385
19397
  0x0604 ImageStabilization int32u
19386
19398
  0x0804 StackedImage int32u[2]
19399
+ 0x0821 ISOAutoSettings int16u[2]
19387
19400
  0x0900 ManometerPressure int16u
19388
19401
  0x0901 ManometerReading int32s[2]
19389
19402
  0x0902 ExtendedWBDetect int16u
@@ -19391,6 +19404,25 @@ any information found here will be extracted, even if the tag is not listed.
19391
19404
  0x0904 PitchAngle int16s[2]
19392
19405
  0x0908 DateTimeUTC string
19393
19406
 
19407
+ =head3 Olympus AFTargetInfo Tags
19408
+
19409
+ Index2 Tag Name Writable
19410
+ ------ -------- --------
19411
+ 0 AFFrameSize int16u[2]
19412
+ 2 AFFocusArea int16u[4]
19413
+ 6 AFSelectedArea int16u[4]
19414
+
19415
+ =head3 Olympus SubjectDetectInfo Tags
19416
+
19417
+ Subject Detection for OM cameras.
19418
+
19419
+ Index2 Tag Name Writable
19420
+ ------ -------- --------
19421
+ 0 SubjectDetectFrameSize int16u[2]
19422
+ 2 SubjectDetectArea int16u[4]
19423
+ 6 SubjectDetectDetail int16u[4]
19424
+ 10 SubjectDetectStatus int16u
19425
+
19394
19426
  =head3 Olympus RawDevelopment Tags
19395
19427
 
19396
19428
  Tag ID Tag Name Writable
@@ -19438,6 +19470,13 @@ any information found here will be extracted, even if the tag is not listed.
19438
19470
  0x0119 RawDevAutoGradation int16u
19439
19471
  0x0120 RawDevPMNoiseFilter int16u
19440
19472
  0x0121 RawDevArtFilter int16u[4]
19473
+ 0x8000 RawDevSubIFD Olympus RawDevSubIFD
19474
+
19475
+ =head3 Olympus RawDevSubIFD Tags
19476
+
19477
+ Tag ID Tag Name Writable
19478
+ ------ -------- --------
19479
+ [no tags known]
19441
19480
 
19442
19481
  =head3 Olympus ImageProcessing Tags
19443
19482
 
@@ -19506,6 +19545,7 @@ any information found here will be extracted, even if the tag is not listed.
19506
19545
  0x1900 KeystoneCompensation int8u[2]
19507
19546
  0x1901 KeystoneDirection int8u[2]
19508
19547
  0x1906 KeystoneValue int16s[3]
19548
+ 0x2110 GNDFilterType int8u
19509
19549
 
19510
19550
  =head3 Olympus FocusInfo Tags
19511
19551
 
@@ -19534,12 +19574,13 @@ any information found here will be extracted, even if the tag is not listed.
19534
19574
  0x120a MacroLED int16u
19535
19575
  0x1500 SensorTemperature int16s
19536
19576
  0x1600 ImageStabilization undef~
19577
+ 0x2100 AntiShockWaitingTime yes
19537
19578
 
19538
19579
  =head3 Olympus AFInfo Tags
19539
19580
 
19540
19581
  Index1 Tag Name Writable
19541
19582
  ------ -------- --------
19542
- [no tags known]
19583
+ 1580 CAFSensitivity no
19543
19584
 
19544
19585
  =head3 Olympus FE Tags
19545
19586
 
@@ -20360,6 +20401,8 @@ These tags are used in Pentax/Asahi cameras.
20360
20401
  0x0402 ToneCurve yes~
20361
20402
  0x0403 ToneCurves yes~
20362
20403
  0x0405 UnknownBlock? undef
20404
+ 0x040b FaceInfoK3III Pentax FaceInfoK3III
20405
+ 0x040c AFInfoK3III Pentax AFInfoK3III
20363
20406
  0x0e00 PrintIM PrintIM
20364
20407
 
20365
20408
  =head3 Pentax LensRec Tags
@@ -20677,8 +20720,8 @@ Flash information tags for the K10D, K20D and K200D.
20677
20720
  7 AFIntegrationTime int8u
20678
20721
  11 AFPointsInFocus int8u
20679
20722
  20 AFPointValues? no
20680
- 298 AFPointsSelected int8u[41]~
20681
- 399 AFPointsUnknown? int8u[41]~
20723
+ 298 AFPointsSelected int8u[101]~
20724
+ 399 AFPointsUnknown? int8u[101]~
20682
20725
  506 LiveView int8u
20683
20726
  509 AFHold int8u
20684
20727
 
@@ -20934,6 +20977,90 @@ sensors are located in the camera.
20934
20977
  ------ -------- --------
20935
20978
  [no tags known]
20936
20979
 
20980
+ =head3 Pentax FaceInfoK3III Tags
20981
+
20982
+ Index4 Tag Name Writable
20983
+ ------ -------- --------
20984
+ 0 FaceImageSize int32u[2]
20985
+ 0.1 FaceInfoK3III? int32u[$size/4]
20986
+ 2 CAFArea int32u[4]
20987
+ 6 FacesDetectedA int32u
20988
+ 8 FacesDetectedB int32u
20989
+ 10 Face1AArea int32u[4]
20990
+ 14 Face1AEye1 int32u[4]
20991
+ 18 Face1AEye2 int32u[4]
20992
+ 30 Face2AArea int32u[4]
20993
+ 34 Face2AEye1 int32u[4]
20994
+ 38 Face2AEye2 int32u[4]
20995
+ 50 Face3AArea int32u[4]
20996
+ 54 Face3AEye1 int32u[4]
20997
+ 58 Face3AEye2 int32u[4]
20998
+ 70 Face4AArea int32u[4]
20999
+ 74 Face4AEye1 int32u[4]
21000
+ 78 Face4AEye2 int32u[4]
21001
+ 90 Face5AArea int32u[4]
21002
+ 94 Face5AEye1 int32u[4]
21003
+ 98 Face5AEye2 int32u[4]
21004
+ 110 Face6AArea int32u[4]
21005
+ 114 Face6AEye1 int32u[4]
21006
+ 118 Face6AEye2 int32u[4]
21007
+ 130 Face7AArea int32u[4]
21008
+ 134 Face7AEye1 int32u[4]
21009
+ 138 Face7AEye2 int32u[4]
21010
+ 150 Face8AArea int32u[4]
21011
+ 154 Face8AEye1 int32u[4]
21012
+ 158 Face8AEye2 int32u[4]
21013
+ 170 Face9AArea int32u[4]
21014
+ 174 Face9AEye1 int32u[4]
21015
+ 178 Face9AEye2 int32u[4]
21016
+ 190 Face10AArea int32u[4]
21017
+ 194 Face10AEye1 int32u[4]
21018
+ 198 Face10AEye2 int32u[4]
21019
+ 210 Face1BArea int32u[4]
21020
+ 214 Face1BEye1 int32u[4]
21021
+ 218 Face1BEye2 int32u[4]
21022
+ 230 Face2BArea int32u[4]
21023
+ 234 Face2BEye1 int32u[4]
21024
+ 238 Face2BEye2 int32u[4]
21025
+ 250 Face3BArea int32u[4]
21026
+ 254 Face3BEye1 int32u[4]
21027
+ 258 Face3BEye2 int32u[4]
21028
+ 270 Face4BArea int32u[4]
21029
+ 274 Face4BEye1 int32u[4]
21030
+ 278 Face4BEye2 int32u[4]
21031
+ 290 Face5BArea int32u[4]
21032
+ 294 Face5BEye1 int32u[4]
21033
+ 298 Face5BEye2 int32u[4]
21034
+ 310 Face6BArea int32u[4]
21035
+ 314 Face6BEye1 int32u[4]
21036
+ 318 Face6BEye2 int32u[4]
21037
+ 330 Face7BArea int32u[4]
21038
+ 334 Face7BEye1 int32u[4]
21039
+ 338 Face7BEye2 int32u[4]
21040
+ 350 Face8BArea int32u[4]
21041
+ 354 Face8BEye1 int32u[4]
21042
+ 358 Face8BEye2 int32u[4]
21043
+ 370 Face9BArea int32u[4]
21044
+ 374 Face9BEye1 int32u[4]
21045
+ 378 Face9BEye2 int32u[4]
21046
+ 390 Face10BArea int32u[4]
21047
+ 394 Face10BEye1 int32u[4]
21048
+ 398 Face10BEye2 int32u[4]
21049
+
21050
+ =head3 Pentax AFInfoK3III Tags
21051
+
21052
+ AF tags written by the K-3 Mark III, GR III and GR IIIx.
21053
+
21054
+ Index2 Tag Name Writable
21055
+ ------ -------- --------
21056
+ 0 AFInfo? int16u[$size/2]
21057
+ 0.1 AFMode int16u
21058
+ 1 AFSelectionMode int16u
21059
+ 3 NumAFPoints int16u
21060
+ 7 AFFrameSize no
21061
+ 7.1 AFAreas no+
21062
+ 11 AFAreaSize no
21063
+
20937
21064
  =head3 Pentax Type2 Tags
20938
21065
 
20939
21066
  These tags are used by the Pentax Optio 330 and 430, and are similar to the
@@ -31672,7 +31799,8 @@ the config file.
31672
31799
  'RMKN' RicohRMKN EXIF
31673
31800
  'RTHU' PreviewImage no
31674
31801
  'SDLN' PlayMode string
31675
- 'SIGM' PreviewImage no
31802
+ 'SIGM' SigmaEXIF EXIF
31803
+ PreviewImage string
31676
31804
  'SNum' SerialNumber string/
31677
31805
  'SelO' PlaySelection int8u
31678
31806
  'TAGS' FujiFilmTags FujiFilm MOV
@@ -36383,6 +36511,110 @@ Tags with index 54 and greater are conditional based on the StreamType.
36383
36511
  58 AudioSampleRate no
36384
36512
  ImageHeight no
36385
36513
 
36514
+ =head2 TNEF Tags
36515
+
36516
+ Information extracted from Transport Neutral Encapsulation Format (TNEF)
36517
+ files (eg. winmail.dat). But note that the exiftool application doesn't
36518
+ process files with a .DAT extension by default when a directory name is
36519
+ given, so in this case either specify the .DAT file(s) by name or add
36520
+ C<-ext+ dat> to the command.
36521
+
36522
+ Tag ID Tag Name Writable
36523
+ ------ -------- --------
36524
+ 0x8000 From no
36525
+ 0x18004 Subject no
36526
+ 0x18009 MessageID no
36527
+ 0x18010 AttachTitle no
36528
+ 0x2800c MessageBody no
36529
+ 0x30006 StartDate no
36530
+ 0x30007 EndDate no
36531
+ 0x38005 SentDate no
36532
+ 0x38006 ReceivedDate no
36533
+ 0x38012 AttachCreateDate no
36534
+ 0x38013 AttachModifyDate no
36535
+ 0x38020 MessageModifyDate no
36536
+ 0x40009 ResponseRequested no
36537
+ 0x4800d Priority no
36538
+ 0x50008 OwnerAppointmentID no
36539
+ 0x60000 Owner no
36540
+ 0x60001 SentFor no
36541
+ 0x60002 Delegate no
36542
+ 0x68007 MessageStatus no
36543
+ 0x6800f AttachData no
36544
+ 0x68011 AttachMetaFile no
36545
+ 0x69001 AttachTransportFilename no
36546
+ 0x69002 AttachRenderingData no
36547
+ 0x69003 MessageProps TNEF MsgProps
36548
+ 0x69004 RecipientTable no
36549
+ 0x69005 AttachInfo TNEF AttachInfo
36550
+ 0x69007 CodePage no
36551
+ 0x70600 OriginalMessageClass no
36552
+ 0x78008 MessageClass no
36553
+ 0x89006 TNEFVersion no
36554
+
36555
+ =head3 TNEF MsgProps Tags
36556
+
36557
+ Tag ID Tag Name Writable
36558
+ ------ -------- --------
36559
+ 0x0002 AlternateRecipientAllowed no
36560
+ 0x0039 ClientSubmitTime no
36561
+ 0x0040 ReceivedByName no
36562
+ 0x0044 ReceivedRepresentingName no
36563
+ 0x004d OriginalAuthorName no
36564
+ 0x0055 OriginalDeliveryTime no
36565
+ 0x0070 Subject no
36566
+ 0x0075 ReceivedByAddressType no
36567
+ 0x0076 ReceivedByEmailAddress no
36568
+ 0x0077 ReceivedRepresentingAddressType no
36569
+ 0x0078 ReceivedRepresentingEmailAddress no
36570
+ 0x007f CorrelationKey no
36571
+ 0x0c1a SenderName no
36572
+ 0x0c1d SenderSearchKey no
36573
+ 0x0e06 MessageDeliveryTime no
36574
+ 0x0e1d NormalizedSubject no
36575
+ 0x0e28 PrimarySendAccount no
36576
+ 0x0e29 NextSendAccount no
36577
+ 0x0f02 DeliveryOrRenewTime no
36578
+ 0x1000 MessageBodyText no
36579
+ 0x1007 SyncBodyCount no
36580
+ 0x1008 SyncBodyData no
36581
+ 0x1009 MessageBodyRTF no
36582
+ 0x1013 MessageBodyHTML no
36583
+ 0x1035 InternetMessageID no
36584
+ 0x10f4 Hidden no
36585
+ 0x10f6 ReadOnly no
36586
+ 0x3007 CreateDate no
36587
+ 0x3008 ModifyDate no
36588
+ 0x3fde InternetCodePage no
36589
+ 0x3ff1 LocalUserID no
36590
+ 0x3ff8 CreatorName no
36591
+ 0x3ffa LastModifierName no
36592
+ 0x3ffd MessageCodePage no
36593
+ 0x4076 SpamConfidenceLevel no
36594
+ '00020329_Author' Author no
36595
+ '00020329_LastAuthor' LastAuthor no
36596
+ '00062004_0000801A' HomeAddress no
36597
+ '00062004_000080DA' HomeAddressCountryCode no
36598
+ '00062008_00008554' AppVersion no
36599
+
36600
+ =head3 TNEF AttachInfo Tags
36601
+
36602
+ Tag ID Tag Name Writable
36603
+ ------ -------- --------
36604
+ 0x0e20 AttachSize no
36605
+ 0x0e21 AttachNum no
36606
+ 0x0ff8 MappingSignature? no
36607
+ 0x3001 AttachFileName no
36608
+ 0x3701 AttachBinary no
36609
+ 0x3703 AttachFileExtension no
36610
+ 0x3705 AttachMethod no
36611
+ 0x3707 AttachLongFileName no
36612
+ 0x3708 AttachPathName no
36613
+ 0x370d AttachLongPathName no
36614
+ 0x370e AttachMIMEType no
36615
+ 0x7ffb ExceptionStartTime? no
36616
+ 0x7ffc ExceptionEndTime? no
36617
+
36386
36618
  =head2 WTV Tags
36387
36619
 
36388
36620
  Tags found in Windows recorded TV (WTV) videos.
@@ -49,7 +49,7 @@ my %mandatory = (
49
49
  0x0000 => '2 3 0 0',# GPSVersionID
50
50
  },
51
51
  InteropIFD => {
52
- 0x0002 => '0100', # InteropVersion
52
+ 0x0002 => '0100', # InteropVersion (from the DCF spec, not the EXIF spec)
53
53
  },
54
54
  );
55
55
 
@@ -2529,17 +2529,19 @@ NoOverwrite: next if $isNew > 0;
2529
2529
  }
2530
2530
  if ($$tagInfo{Name} eq 'PreviewImageStart') {
2531
2531
  if ($$et{FILE_TYPE} eq 'JPEG' and not $$tagInfo{MakerPreview}) {
2532
- # hold onto the PreviewImage until we can determine if it fits
2533
- $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
2534
- Data => $buff,
2535
- Fixup => Image::ExifTool::Fixup->new,
2536
- };
2537
- if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '2') {
2538
- $$et{PREVIEW_INFO}{NoBaseShift} = 1;
2539
- }
2540
- if ($offset >= 0 and $offset+$size <= $dataLen) {
2541
- # set flag indicating this preview wasn't in a trailer
2542
- $$et{PREVIEW_INFO}{WasContained} = 1;
2532
+ if ($size) {
2533
+ # hold onto the PreviewImage until we can determine if it fits
2534
+ $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
2535
+ Data => $buff,
2536
+ Fixup => Image::ExifTool::Fixup->new,
2537
+ };
2538
+ if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '2') {
2539
+ $$et{PREVIEW_INFO}{NoBaseShift} = 1;
2540
+ }
2541
+ if ($offset >= 0 and $offset+$size <= $dataLen) {
2542
+ # set flag indicating this preview wasn't in a trailer
2543
+ $$et{PREVIEW_INFO}{WasContained} = 1;
2544
+ }
2543
2545
  }
2544
2546
  $buff = '';
2545
2547
  } elsif ($$et{TIFF_TYPE} eq 'ARW' and $$et{Model} eq 'DSLR-A100') {
@@ -1907,7 +1907,7 @@ sub RestoreNewValues($)
1907
1907
  #------------------------------------------------------------------------------
1908
1908
  # Set alternate file for extracting information
1909
1909
  # Inputs: 0) ExifTool ref, 1) family 8 group name (of the form "File#" where # is any number)
1910
- # 2) alternate file name, or undef to reset
1910
+ # 2) alternate file name (may contain tag names with leading "$"), or undef to reset
1911
1911
  # Returns: 1 on success, or 0 on invalid group name
1912
1912
  sub SetAlternateFile($$$)
1913
1913
  {
@@ -1917,7 +1917,9 @@ sub SetAlternateFile($$$)
1917
1917
  # keep the same file if already initialized (possibly has metadata extracted)
1918
1918
  if (not defined $file) {
1919
1919
  delete $$self{ALT_EXIFTOOL}{$g8};
1920
- } elsif (not ($$self{ALT_EXIFTOOL}{$g8} and $$self{ALT_EXIFTOOL}{$g8}{ALT_FILE} eq $file)) {
1920
+ } elsif (not ($$self{ALT_EXIFTOOL}{$g8} and $file !~ /\$/ and
1921
+ $$self{ALT_EXIFTOOL}{$g8}{ALT_FILE} eq $file))
1922
+ {
1921
1923
  my $altExifTool = Image::ExifTool->new;
1922
1924
  $$altExifTool{ALT_FILE} = $file;
1923
1925
  $$self{ALT_EXIFTOOL}{$g8} = $altExifTool;
@@ -3201,7 +3203,7 @@ sub InsertTagValues($$;$$$$)
3201
3203
  my ($docNum, $tag);
3202
3204
 
3203
3205
  if ($docGrp) {
3204
- $docNum = $docGrp =~ /(\d+)$/ ? $1 : 0;
3206
+ $docNum = $docGrp =~ /(\d+(-\d+)*)$/ ? $1 : 0;
3205
3207
  } else {
3206
3208
  undef $cache; # no cache if no document groups
3207
3209
  }
@@ -3269,25 +3271,25 @@ sub InsertTagValues($$;$$$$)
3269
3271
  # (similar to code in BuildCompositeTags(), but this is case-insensitive)
3270
3272
  my $cacheTag = $$cache{$lcTag};
3271
3273
  unless ($cacheTag) {
3272
- $cacheTag = $$cache{$lcTag} = [ ];
3274
+ $cacheTag = $$cache{$lcTag} = { };
3273
3275
  # find all matching keys, organize into groups, and store in cache
3274
3276
  my $ex = $$self{TAG_EXTRA};
3275
3277
  my @matches = grep /^$tag(\s|$)/i, @$foundTags;
3276
3278
  @matches = $self->GroupMatches($group, \@matches) if defined $group;
3277
3279
  foreach (@matches) {
3278
3280
  my $doc = $$ex{$_}{G3} || 0;
3279
- if (defined $$cacheTag[$doc]) {
3280
- next unless $$cacheTag[$doc] =~ / \((\d+)\)$/;
3281
+ if (defined $$cacheTag{$doc}) {
3282
+ next unless $$cacheTag{$doc} =~ / \((\d+)\)$/;
3281
3283
  my $cur = $1;
3282
3284
  # keep the most recently extracted tag
3283
3285
  next if / \((\d+)\)$/ and $1 < $cur;
3284
3286
  }
3285
- $$cacheTag[$doc] = $_;
3287
+ $$cacheTag{$doc} = $_;
3286
3288
  }
3287
3289
  }
3288
- my $doc = $lcTag =~ /\b(main|doc(\d+)):/ ? ($2 || 0) : $docNum;
3289
- if ($$cacheTag[$doc]) {
3290
- $tag = $$cacheTag[$doc];
3290
+ my $doc = $lcTag =~ /\b(main|doc(\d+(-\d+)*)):/ ? ($2 || 0) : $docNum;
3291
+ if ($$cacheTag{$doc}) {
3292
+ $tag = $$cacheTag{$doc};
3291
3293
  $val = $self->GetValue($tag, $type);
3292
3294
  }
3293
3295
  } else {
@@ -6921,7 +6923,7 @@ sub CheckBinaryData($$$)
6921
6923
  $format = $1;
6922
6924
  $count = $2;
6923
6925
  # can't evaluate $count now because we don't know $size yet
6924
- undef $count if $count =~ /\$size/;
6926
+ $count = -1 if $count =~ /\$size/; # (-1 = any count allowed)
6925
6927
  }
6926
6928
  return CheckValue($valPtr, $format, $count);
6927
6929
  }
@@ -7247,6 +7249,8 @@ sub WriteBinaryData($$$)
7247
7249
  $self->VerboseValue("- $dirName:$$tagInfo{Name}", $val);
7248
7250
  $self->VerboseValue("+ $dirName:$$tagInfo{Name}", $newVal);
7249
7251
  ++$$self{CHANGED};
7252
+ } else {
7253
+ $self->Warn("Error packing $$tagInfo{Name} value");
7250
7254
  }
7251
7255
  }
7252
7256
  # add necessary fixups for any offsets
@@ -86,7 +86,7 @@ sub InflateStruct($$;$)
86
86
  my %struct;
87
87
  for (;;) {
88
88
  last unless $sfmt ? $$obj =~ s/^\s*"(.*?)"\s*://s :
89
- $$obj =~ s/^\s*([-\w:]+#?)\s*=//s;
89
+ $$obj =~ s/^\s*([-\w:.]+#?)\s*=//s;
90
90
  my $tag = $1;
91
91
  my ($v, $w) = InflateStruct($et, $obj, '}');
92
92
  $warn = $w if $w and not $warn;
@@ -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.31';
32
+ $VERSION = '13.33';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -152,8 +152,8 @@ sub ReadValue($$$;$$$);
152
152
  APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime
153
153
  QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly Matroska
154
154
  Matroska::StdTag MOI MXF DV Flash Flash::FLV Real::Media Real::Audio
155
- Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS XISF MIE JSON HTML XMP::SVG
156
- Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
155
+ Real::Metafile Red RIFF AIFF ASF TNEF WTV DICOM FITS XISF MIE JSON HTML
156
+ XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
157
157
  EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF EXE::ELF EXE::AR
158
158
  EXE::CHM LNK PCAP Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor
159
159
  ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF
@@ -200,7 +200,7 @@ $defaultLang = 'en'; # default language
200
200
  RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
201
201
  JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
202
202
  LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS PCAP JSON MP3
203
- DICOM PCD NKA ICO TXT AAC);
203
+ TNEF DICOM PCD NKA ICO TXT AAC);
204
204
 
205
205
  # file types that we can write (edit)
206
206
  my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -536,6 +536,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
536
536
  THMX => [['ZIP','FPX'], 'Office Open XML Theme'],
537
537
  TIF => 'TIFF',
538
538
  TIFF => ['TIFF', 'Tagged Image File Format'],
539
+ TNEF => ['TNEF', 'Transport Neural Encapsulation Format'], # (actual extension is .DAT)
539
540
  TORRENT => ['Torrent', 'BitTorrent description file'],
540
541
  TS => 'M2TS',
541
542
  TTC => ['Font', 'True Type Font Collection'],
@@ -802,6 +803,7 @@ my %fileDescription = (
802
803
  TAR => 'application/x-tar',
803
804
  THMX => 'application/vnd.ms-officetheme',
804
805
  TIFF => 'image/tiff',
806
+ TNEF => 'application/vnd.ms-tnef',
805
807
  Torrent => 'application/x-bittorrent',
806
808
  TTC => 'application/font-ttf',
807
809
  TTF => 'application/font-ttf',
@@ -1012,6 +1014,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
1012
1014
  RWZ => 'rawzor',
1013
1015
  SWF => '[FC]WS[^\0]',
1014
1016
  TAR => '.{257}ustar( )?\0', # (this doesn't catch old-style tar files)
1017
+ TNEF => '\x78\x9f\x3e\x22..\x01\x06\x90\x08\0',
1015
1018
  TXT => '(\xff\xfe|(\0\0)?\xfe\xff|(\xef\xbb\xbf)?[\x07-\x0d\x20-\x7e\x80-\xfe]*$)',
1016
1019
  TIFF => '(II|MM)', # don't test magic number (some raw formats are different)
1017
1020
  VCard=> '(?i)BEGIN:(VCARD|VCALENDAR|VNOTE)\r\n',
@@ -4292,6 +4295,7 @@ sub Init($)
4292
4295
  $$self{LOW_PRIORITY_DIR} = { PreviewIFD => 1 }; # names of priority 0 directories
4293
4296
  $$self{TIFF_TYPE} = ''; # type of TIFF data (APP1, TIFF, NEF, etc...)
4294
4297
  $$self{FMT_EXPR} = undef; # current advanced formatting expression
4298
+ $$self{HAS_DOC} = { }; # lookup for all document numbers in this file
4295
4299
  $$self{Make} = ''; # camera make
4296
4300
  $$self{Model} = ''; # camera model
4297
4301
  $$self{CameraType} = ''; # Olympus camera type
@@ -6582,6 +6586,8 @@ sub ConvertDateTime($$)
6582
6586
  }
6583
6587
  $a[5] -= 1900; # strftime year starts from 1900
6584
6588
  $date = POSIX::strftime($fmt, @a); # generate the formatted date/time
6589
+ # apparently strftime can set the UTF-8 flag (argh!), so reset this if necessary
6590
+ $self->Sanitize(\$date) if $fmt =~ /[\x80-\xff]/;
6585
6591
  } elsif ($$self{OPTIONS}{StrictDate}) {
6586
6592
  undef $date;
6587
6593
  }
@@ -9480,6 +9486,7 @@ sub FoundTag($$$;@)
9480
9486
  $$self{TAG_EXTRA}{$tag}{G1} = $grps[1] if $grps[1];
9481
9487
  if ($$self{DOC_NUM}) {
9482
9488
  $$self{TAG_EXTRA}{$tag}{G3} = $$self{DOC_NUM};
9489
+ $$self{HAS_DOC}{$$self{DOC_NUM}} = 1;
9483
9490
  if ($$self{DOC_NUM} =~ /^(\d+)/) {
9484
9491
  # keep track of maximum 1st-level sub-document number
9485
9492
  $$self{DOC_COUNT} = $1 unless $$self{DOC_COUNT} >= $1;