exiftool_vendored 12.76.1 → 12.80.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +79 -4
  3. data/bin/MANIFEST +27 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/config_files/acdsee.config +37 -57
  8. data/bin/config_files/example.config +16 -2
  9. data/bin/exiftool +84 -29
  10. data/bin/lib/Image/ExifTool/Canon.pm +12 -9
  11. data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -1
  12. data/bin/lib/Image/ExifTool/Exif.pm +52 -4
  13. data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -0
  14. data/bin/lib/Image/ExifTool/GPS.pm +5 -3
  15. data/bin/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
  16. data/bin/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
  17. data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
  18. data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
  19. data/bin/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
  20. data/bin/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
  21. data/bin/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
  22. data/bin/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
  23. data/bin/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
  24. data/bin/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
  25. data/bin/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
  26. data/bin/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
  27. data/bin/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
  28. data/bin/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
  29. data/bin/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
  30. data/bin/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
  31. data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
  32. data/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
  33. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  34. data/bin/lib/Image/ExifTool/Geolocation.pm +775 -0
  35. data/bin/lib/Image/ExifTool/Geotag.pm +8 -1
  36. data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
  37. data/bin/lib/Image/ExifTool/Import.pm +5 -2
  38. data/bin/lib/Image/ExifTool/JSON.pm +15 -10
  39. data/bin/lib/Image/ExifTool/MWG.pm +1 -0
  40. data/bin/lib/Image/ExifTool/MacOS.pm +19 -4
  41. data/bin/lib/Image/ExifTool/Nikon.pm +2 -2
  42. data/bin/lib/Image/ExifTool/Ogg.pm +3 -2
  43. data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
  44. data/bin/lib/Image/ExifTool/OpenEXR.pm +17 -17
  45. data/bin/lib/Image/ExifTool/PDF.pm +5 -5
  46. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  47. data/bin/lib/Image/ExifTool/QuickTime.pm +183 -11
  48. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
  49. data/bin/lib/Image/ExifTool/README +6 -5
  50. data/bin/lib/Image/ExifTool/TagLookup.pm +2624 -2520
  51. data/bin/lib/Image/ExifTool/TagNames.pod +184 -4
  52. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +15 -1
  53. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  54. data/bin/lib/Image/ExifTool/Writer.pl +59 -8
  55. data/bin/lib/Image/ExifTool/XMP.pm +17 -2
  56. data/bin/lib/Image/ExifTool/XMP2.pl +64 -0
  57. data/bin/lib/Image/ExifTool.pm +249 -47
  58. data/bin/lib/Image/ExifTool.pod +57 -25
  59. data/bin/perl-Image-ExifTool.spec +2 -2
  60. data/lib/exiftool_vendored/version.rb +1 -1
  61. metadata +22 -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 27474 tags, with 17233 unique tag names.
15
+ They contain a total of 27593 tags, with 17336 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
@@ -376,6 +376,7 @@ for the official EXIF 2.32 specification.
376
376
  0x0110 Model IFD0 string
377
377
  0x0111 StripOffsets - no
378
378
  OtherImageStart - no
379
+ PreviewJXLStart - no
379
380
  StripOffsets - no
380
381
  PreviewImageStart IFD0 int32u*
381
382
  PreviewImageStart All int32u*
@@ -385,6 +386,7 @@ for the official EXIF 2.32 specification.
385
386
  0x0116 RowsPerStrip IFD0 int32u!
386
387
  0x0117 StripByteCounts - no
387
388
  OtherImageLength - no
389
+ PreviewJXLLength - no
388
390
  StripByteCounts - no
389
391
  PreviewImageLength IFD0 int32u*
390
392
  PreviewImageLength All int32u*
@@ -1360,6 +1362,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification.
1360
1362
  --------- --------
1361
1363
  aas XMP aas
1362
1364
  acdsee XMP acdsee
1365
+ acdsee-rs XMP ACDSeeRegions
1363
1366
  album XMP Album
1364
1367
  apple-fi XMP apple_fi
1365
1368
  ast Nikon ast
@@ -1503,6 +1506,66 @@ These tags belong to the ExifTool XMP-acdsee family 1 group.
1503
1506
  Snapshots string/+
1504
1507
  Tagged boolean/
1505
1508
 
1509
+ =head3 XMP ACDSeeRegions Tags
1510
+
1511
+ These tags belong to the ExifTool XMP-acdsee-rs family 1 group.
1512
+
1513
+ Tag Name Writable
1514
+ -------- --------
1515
+ RegionInfoACDSee ACDSeeRegionInfo Struct
1516
+ ACDSeeRegionAppliedToDimensions ACDSeeDimensions Struct_
1517
+ ACDSeeRegionAppliedToDimensionsH real/_
1518
+ ACDSeeRegionAppliedToDimensionsUnit string/_
1519
+ ACDSeeRegionAppliedToDimensionsW real/_
1520
+ ACDSeeRegion ACDSeeRegion Struct_+
1521
+ ACDSeeRegionALGArea ACDSeeArea Struct_+
1522
+ ACDSeeRegionALGAreaH real/_+
1523
+ ACDSeeRegionALGAreaW real/_+
1524
+ ACDSeeRegionALGAreaX real/_+
1525
+ ACDSeeRegionALGAreaY real/_+
1526
+ ACDSeeRegionDLYArea ACDSeeArea Struct_+
1527
+ ACDSeeRegionDLYAreaH real/_+
1528
+ ACDSeeRegionDLYAreaW real/_+
1529
+ ACDSeeRegionDLYAreaX real/_+
1530
+ ACDSeeRegionDLYAreaY real/_+
1531
+ ACDSeeRegionName string/_+
1532
+ ACDSeeRegionNameAssignType string/_+
1533
+ ACDSeeRegionType string/_+
1534
+
1535
+ =head3 XMP ACDSeeRegionInfo Struct
1536
+
1537
+ Field Name Writable
1538
+ ---------- --------
1539
+ AppliedToDimensions ACDSeeDimensions Struct
1540
+ RegionList ACDSeeRegion Struct+
1541
+
1542
+ =head3 XMP ACDSeeDimensions Struct
1543
+
1544
+ Field Name Writable
1545
+ ---------- --------
1546
+ H real
1547
+ Unit string
1548
+ W real
1549
+
1550
+ =head3 XMP ACDSeeRegion Struct
1551
+
1552
+ Field Name Writable
1553
+ ---------- --------
1554
+ ALGArea ACDSeeArea Struct
1555
+ DLYArea ACDSeeArea Struct
1556
+ Name string
1557
+ NameAssignType string
1558
+ Type string
1559
+
1560
+ =head3 XMP ACDSeeArea Struct
1561
+
1562
+ Field Name Writable
1563
+ ---------- --------
1564
+ H real
1565
+ W real
1566
+ X real
1567
+ Y real
1568
+
1506
1569
  =head3 XMP Album Tags
1507
1570
 
1508
1571
  Adobe Album namespace tags.
@@ -5147,6 +5210,7 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
5147
5210
  LocationCreatedCountryCode string_+
5148
5211
  LocationCreatedCountryName string_+
5149
5212
  LocationCreatedGPSAltitude rational_+
5213
+ LocationCreatedGPSAltitudeRef integer_+
5150
5214
  LocationCreatedGPSLatitude string_+
5151
5215
  LocationCreatedGPSLongitude string_+
5152
5216
  LocationCreatedIdentifier string_+
@@ -5160,6 +5224,7 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
5160
5224
  LocationShownCountryCode string_+
5161
5225
  LocationShownCountryName string_+
5162
5226
  LocationShownGPSAltitude rational_+
5227
+ LocationShownGPSAltitudeRef integer_+
5163
5228
  LocationShownGPSLatitude string_+
5164
5229
  LocationShownGPSLongitude string_+
5165
5230
  LocationShownIdentifier string_+
@@ -5213,6 +5278,7 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
5213
5278
  RatingRegionCountryCode string_+
5214
5279
  RatingRegionCountryName string_+
5215
5280
  RatingRegionGPSAltitude rational_+
5281
+ RatingRegionGPSAltitudeRef integer_+
5216
5282
  RatingRegionGPSLatitude string_+
5217
5283
  RatingRegionGPSLongitude string_+
5218
5284
  RatingRegionIdentifier string_+
@@ -5421,6 +5487,7 @@ is to write ImageRegion as a structure with these tags as new fields.
5421
5487
  CountryCode string
5422
5488
  CountryName string
5423
5489
  GPSAltitude rational
5490
+ GPSAltitudeRef integer
5424
5491
  GPSLatitude string
5425
5492
  GPSLongitude string
5426
5493
  Identifier string+
@@ -6258,6 +6325,7 @@ These tags belong to the ExifTool XMP-xmpDM family 1 group.
6258
6325
  OutCueScale rational_
6259
6326
  OutCueValue integer_
6260
6327
  PartOfCompilation boolean
6328
+ Pick integer
6261
6329
  ProjectName string
6262
6330
  ProjectRef ProjectLink Struct
6263
6331
  ProjectRefPath string_
@@ -10115,6 +10183,7 @@ CameraInfo tags for the PowerShot G5 X Mark II.
10115
10183
  Index1 Tag Name Writable
10116
10184
  ------ -------- --------
10117
10185
  659 ShutterCount int32u
10186
+ 2709 ShutterCount int32u
10118
10187
  2849 DirectoryIndex int32u
10119
10188
  2861 FileIndex int32u
10120
10189
 
@@ -12270,6 +12339,11 @@ below by a decimal appended to the tag ID (.0, .1 or .2).
12270
12339
  0x20916 PurpleHSL yes
12271
12340
  0x20917 MagentaHSL yes
12272
12341
  0x20a00 GammaInfo CanonVRD GammaInfo
12342
+ 0x20b10 DPRAWMicroadjustBackFront yes
12343
+ 0x20b12 DPRAWMicroadjustStrength yes
12344
+ 0x20b20 DPRAWBokehShift yes
12345
+ 0x20b21 DPRAWBokehShiftArea yes
12346
+ 0x20b30 DPRAWGhostingReductionArea yes
12273
12347
  0x30101 CropAspectRatio yes
12274
12348
  0x30102 CropAspectRatioCustom yes
12275
12349
  0xf0100 CropInfo CanonVRD CropInfo
@@ -13091,6 +13165,8 @@ Tags extracted from FLIR Public image Format (FPF) files.
13091
13165
  0x104d CropMode int16u
13092
13166
  0x104e ColorChromeFXBlue int32s
13093
13167
  0x1050 ShutterType int16u
13168
+ 0x1051 CropTopLeft int32u
13169
+ 0x1052 CropCenter int32u
13094
13170
  0x1100 AutoBracketing int16u
13095
13171
  0x1101 SequenceNumber int16u
13096
13172
  0x1103 DriveSettings FujiFilm DriveSettings
@@ -29253,6 +29329,7 @@ for the official specification.
29253
29329
  ThumbnailImage no
29254
29330
  Free? no
29255
29331
  'ftyp' FileType QuickTime FileType
29332
+ 'gdat' GPSData QuickTime Stream
29256
29333
  'gps0' GPSTrack QuickTime Stream
29257
29334
  'gsen' GSensor QuickTime Stream
29258
29335
  'junk' Junk? no
@@ -29264,6 +29341,7 @@ for the official specification.
29264
29341
  'moof' MovieFragment QuickTime MovieFragment
29265
29342
  'moov' Movie QuickTime Movie
29266
29343
  'mpvd' MotionPhotoVideo yes
29344
+ 'nbmt' NextbaseMeta QuickTime Stream
29267
29345
  'pict' PreviewPICT no
29268
29346
  'pnot' Preview QuickTime Preview
29269
29347
  'prrt' ARDroneTelemetry no
@@ -29283,10 +29361,11 @@ for the official specification.
29283
29361
  UUID-Flip QuickTime Flip
29284
29362
  UUID-Canon2 Canon uuid2
29285
29363
  SensorData QuickTime Tags360Fly
29364
+ SensorData no
29286
29365
  JUMBF Jpeg2000
29287
29366
  CBOR CBOR
29288
- SensorData no
29289
29367
  PreviewImage no
29368
+ ThumbnailImage no
29290
29369
  UUID-Unknown? no
29291
29370
  'wide' Wide? no
29292
29371
 
@@ -29295,7 +29374,7 @@ for the official specification.
29295
29374
  The tags below are extracted from timed metadata in QuickTime and other
29296
29375
  formats of video files when the ExtractEmbedded option is used. Although
29297
29376
  most of these tags are combined into the single table below, ExifTool
29298
- currently reads 68 different formats of timed GPS metadata from video files.
29377
+ currently reads 71 different formats of timed GPS metadata from video files.
29299
29378
 
29300
29379
  Tag Name Writable
29301
29380
  -------- --------
@@ -29304,6 +29383,7 @@ currently reads 68 different formats of timed GPS metadata from video files.
29304
29383
  AngularVelocity no
29305
29384
  CTMD Canon CTMD
29306
29385
  CameraDateTime no
29386
+ CameraModel no
29307
29387
  Car no
29308
29388
  DateTimeOriginal no
29309
29389
  Distance no
@@ -30537,12 +30617,15 @@ the config file.
30537
30617
  'cvru' CoverURI string
30538
30618
  'date' DateTimeOriginal string
30539
30619
  'dscp' Description string/
30620
+ 'finm' OriginalFileName no
30540
30621
  'gnre' Genre string/
30541
30622
  'hinf' HintTrackInfo QuickTime HintTrackInfo
30542
30623
  'hinv' HintVersion string
30543
30624
  'hnti' HintInfo QuickTime HintInfo
30544
30625
  'htcb' HTCBinary QuickTime HTCBinary
30545
30626
  'icnu' IconURI string
30627
+ 'infi' CameraInfo QuickTime Nextbase
30628
+ 'info' FirmwareVersion string
30546
30629
  'infu' InfoURL string
30547
30630
  'kgtt' TrackType string
30548
30631
  'kywd' Keywords no
@@ -30574,9 +30657,11 @@ the config file.
30574
30657
  ThumbnailImage string
30575
30658
  ThumbnailPNG string
30576
30659
  UnknownThumbnail string
30660
+ 'time' TimeStamp no
30577
30661
  'titl' Title string/
30578
30662
  'urat' UserRating undef/
30579
30663
  'uuid' GarminSoftware string
30664
+ GarminModel no
30580
30665
  UUID-Unknown? no
30581
30666
  'vndr' Vendor string
30582
30667
  'vrot' AccelerometerData no
@@ -30691,6 +30776,83 @@ Tags found in TomTom Bandit Action Cam MP4 videos.
30691
30776
  ------ -------- --------
30692
30777
  [no tags known]
30693
30778
 
30779
+ =head3 QuickTime Nextbase Tags
30780
+
30781
+ Tags found in 'infi' atom from some Nextbase videos. As well as these tags,
30782
+ other existing tags are also extracted. These tags are not currently
30783
+ writable but they may all be removed by deleting the Nextbase group.
30784
+
30785
+ Tag ID Tag Name Writable
30786
+ ------ -------- --------
30787
+ '2nd Cam' SecondCam no
30788
+ 'Alerts' Alerts no
30789
+ 'Alexa' Alexa no
30790
+ 'Alexa - Paired Device Name'
30791
+ Alexa-PairedDeviceName no
30792
+ 'Alexa - Pairing' Alexa-Pairing no
30793
+ 'Alexa - Privacy Mode' Alexa-PrivacyMode no
30794
+ 'Alexa - Wake Word Language'
30795
+ Alexa-WakeWordLanguage no
30796
+ 'Audio' Audio no
30797
+ 'Auto Power Off' AutoPowerOff no
30798
+ 'Battery Status' BatteryStatus no
30799
+ 'Bluetooth MAC Address' BluetoothMACAddress no
30800
+ 'Bluetooth Name' BluetoothName no
30801
+ 'Country' Country no
30802
+ 'Default Settings' DefaultSettings no
30803
+ 'Device Sounds' DeviceSounds no
30804
+ 'Dual Files' DualFiles no
30805
+ 'Emergency SOS' EmergencySOS no
30806
+ 'Exposure' Exposure no
30807
+ 'Extreme Weather Mode' ExtremeWeatherMode no
30808
+ 'FCC-ID' FCC-ID no
30809
+ 'Firmware' Firmware no
30810
+ 'Firmware Version' FirmwareVersion no
30811
+ 'Format SD Card' FormatSDCard no
30812
+ 'G Sensor' GSensor no
30813
+ 'GPS Stamp' GPSStamp no
30814
+ 'Image Stabilisation' ImageStabilisation no
30815
+ 'Keep User Settings' KeepUserSettings no
30816
+ 'Language' Language no
30817
+ 'Linux' Linux no
30818
+ 'Model' Model no
30819
+ 'Model Stamp' ModelStamp no
30820
+ 'MyNextbase - Paired Device Name'
30821
+ MyNextbase-PairedDeviceName no
30822
+ 'MyNextbase - Pairing' MyNextbase-Pairing no
30823
+ 'NBCD' NBCD no
30824
+ 'Number / License Plate' NumberLicensePlate no
30825
+ 'Parking Mode' ParkingMode no
30826
+ 'RTOS' RTOS no
30827
+ 'Recording History' RecordingHistory no
30828
+ 'Resolution' Resolution no
30829
+ 'Reversing Camera' ReversingCamera no
30830
+ 'SD Card Class' SDCardClass no
30831
+ 'SD Card Format' SDCardFormat no
30832
+ 'SD Card Manf Date' SDCardManfDate no
30833
+ 'SD Card Manf ID' SDCardManfID no
30834
+ 'SD Card Model No' SDCardModelNo no
30835
+ 'SD Card OEM ID' SDCardOEMID no
30836
+ 'SD Card Serial No' SDCardSerialNo no
30837
+ 'SD Card Size' SDCardSize no
30838
+ 'SD Card Type' SDCardType no
30839
+ 'SD Card Used Space' SDCardUsedSpace no
30840
+ 'Screen Dimming' ScreenDimming no
30841
+ 'Screen Saver' ScreenSaver no
30842
+ 'Serial No' SerialNumber no
30843
+ 'Speed Stamp' SpeedStamp no
30844
+ 'Speed Units' SpeedUnits no
30845
+ 'System Info' SystemInfo no
30846
+ 'Time & Date' TimeAndDate no
30847
+ 'Time Lapse' TimeLapse no
30848
+ 'Time Stamp' VideoTimeStamp no
30849
+ 'Time Zone / DST' TimeZoneDST no
30850
+ 'Video Length' VideoLength no
30851
+ 'Wi-Fi MAC Address' Wi-FiMACAddress no
30852
+ 'Wi-Fi Password' Wi-FiPassword no
30853
+ 'Wi-Fi SSID' Wi-FiSSID no
30854
+ 'what3words' What3Words no
30855
+
30694
30856
  =head3 QuickTime Video Tags
30695
30857
 
30696
30858
  Index1 Tag Name Writable
@@ -39363,7 +39525,7 @@ these files directly.
39363
39525
  XAttrLastUsedDate no
39364
39526
  XAttrMDItemDownloadedDate no
39365
39527
  XAttrMDItemFinderComment no
39366
- XAttrMDItemWhereFroms no
39528
+ XAttrMDItemWhereFroms yes!
39367
39529
  XAttrMDLabel no
39368
39530
  XAttrQuarantine yes!
39369
39531
  XAttrResourceFork no
@@ -39561,6 +39723,19 @@ FileName.
39561
39723
  FileTypeExtension File no
39562
39724
  FileUserID System yes!
39563
39725
  ForceWrite - yes
39726
+ Geolocate - yes
39727
+ GeolocationBearing ExifTool no
39728
+ GeolocationCity ExifTool no
39729
+ GeolocationCountry ExifTool no
39730
+ GeolocationCountryCode ExifTool no
39731
+ GeolocationDistance ExifTool no
39732
+ GeolocationFeatureCode ExifTool no
39733
+ GeolocationPopulation ExifTool no
39734
+ GeolocationPosition ExifTool no
39735
+ GeolocationRegion ExifTool no
39736
+ GeolocationSubregion ExifTool no
39737
+ GeolocationTimeZone ExifTool no
39738
+ GeolocationWarning ExifTool no
39564
39739
  Geosync - yes
39565
39740
  Geotag - yes
39566
39741
  Geotime - yes
@@ -39583,6 +39758,7 @@ FileName.
39583
39758
  OtherImage File no
39584
39759
  PageCount File no
39585
39760
  PreviewImage File yes
39761
+ PreviewJXL File no
39586
39762
  PreviewPDF File no
39587
39763
  PreviewPNG File no
39588
39764
  PreviewTIFF File no
@@ -39846,6 +40022,10 @@ values, may created via the ExifTool configuration file.
39846
40022
  PreviewImage ScreenNail no
39847
40023
  PreviewImageSize PreviewImageWidth no
39848
40024
  PreviewImageHeight
40025
+ PreviewJXL PreviewJXLStart no
40026
+ PreviewJXLLength
40027
+ PreviewJXLStart (1)
40028
+ PreviewJXLLength (1)
39849
40029
  RedBalance WB_RGGBLevels no
39850
40030
  WB_RGBGLevels
39851
40031
  WB_RBGGLevels
@@ -148,6 +148,7 @@ sub PrintInvGPSCoordinates($)
148
148
  $v[2] = Image::ExifTool::ToFloat($v[2]) * ($below ? -1 : 1) if @v == 3;
149
149
  return "@v";
150
150
  }
151
+ return $val if $val =~ /^([-+]?\d+(\.\d*)?)\s+([-+]?\d+(\.\d*)?)$/; # already 2 floats?
151
152
  return $val if $val =~ /^([-+]\d+(\.\d*)?){2,3}(CRS.*)?\/?$/; # already in ISO6709 format?
152
153
  return undef;
153
154
  }
@@ -356,6 +357,18 @@ sub SetVarInt($$)
356
357
  return '';
357
358
  }
358
359
 
360
+ #------------------------------------------------------------------------------
361
+ # Write Nextbase infi atom (ref PH)
362
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
363
+ # Returns: updated infi data
364
+ sub WriteNextbase($$$)
365
+ {
366
+ my ($et, $dirInfo, $tagTablePtr) = @_;
367
+ $et or return 1;
368
+ $$et{DEL_GROUP}{Nextbase} and ++$$et{CHANGED}, return '';
369
+ return ${$$dirInfo{DataPt}};
370
+ }
371
+
359
372
  #------------------------------------------------------------------------------
360
373
  # Write Meta Keys to add/delete entries as necessary ('mdta' handler) (ref PH)
361
374
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
@@ -1619,7 +1632,8 @@ sub WriteQuickTime($$$)
1619
1632
  if ($isEmpty) {
1620
1633
  $et->VPrint(0,' Deleting ' . join('+', sort map { $emptyMeta{$_} } keys %boxPos)) if %boxPos;
1621
1634
  $$outfile = '';
1622
- ++$$et{CHANGED};
1635
+ # (could report a file if editing nothing when it contained an empty Meta atom)
1636
+ # ++$$et{CHANGED};
1623
1637
  }
1624
1638
  if ($curPath eq 'MOV-Movie-Meta') {
1625
1639
  delete $$addDirs{Keys}; # prevent creation of another Meta for Keys tags
@@ -236,7 +236,7 @@ sub CheckXMP($$$;$)
236
236
  return 'Not a floating point number';
237
237
  }
238
238
  if ($format eq 'rational') {
239
- $$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr));
239
+ $$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr,0xffffffff));
240
240
  }
241
241
  } elsif ($format eq 'integer') {
242
242
  # make sure the value is integer
@@ -137,12 +137,12 @@ my %rawType = (
137
137
  # 1) these names must either exist in %dirMap, or be translated in InitWriteDirs())
138
138
  # 2) any dependencies must be added to %excludeGroups
139
139
  my @delGroups = qw(
140
- Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11
141
- APP12 APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix
142
- FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD IPTC
143
- ItemList JFIF Jpeg2000 JUMBF Keys MakerNotes Meta MetaIFD Microsoft MIE MPF
144
- NikonApp NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs
145
- PrintIM QuickTime RMETA RSRC SubIFD Trailer UserData XML XML-* XMP XMP-*
140
+ Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11 APP12
141
+ APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix FotoStation
142
+ GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD IPTC ItemList JFIF
143
+ Jpeg2000 JUMBF Keys MakerNotes Meta MetaIFD Microsoft MIE MPF Nextbase NikonApp
144
+ NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs PrintIM
145
+ QuickTime RMETA RSRC SubIFD Trailer UserData XML XML-* XMP XMP-*
146
146
  );
147
147
  # family 2 group names that we can delete
148
148
  my @delGroup2 = qw(
@@ -227,7 +227,7 @@ my %allFam0 = (
227
227
 
228
228
  my @writableMacOSTags = qw(
229
229
  FileCreateDate MDItemFinderComment MDItemFSCreationDate MDItemFSLabel MDItemUserTags
230
- XAttrQuarantine
230
+ XAttrQuarantine XAttrMDItemWhereFroms
231
231
  );
232
232
 
233
233
  # min/max values for integer formats
@@ -1296,6 +1296,10 @@ sub SetNewValuesFromFile($$;@)
1296
1296
  FastScan => $$options{FastScan},
1297
1297
  Filter => $$options{Filter},
1298
1298
  FixBase => $$options{FixBase},
1299
+ Geolocation => $$options{Geolocation},
1300
+ GeolocFeature => $$options{GeolocFeature},
1301
+ GeolocMinPop => $$options{GeolocMinPop},
1302
+ GeolocMaxDist => $$options{GeolocMaxDist},
1299
1303
  GlobalTimeShift => $$options{GlobalTimeShift},
1300
1304
  HexTagIDs => $$options{HexTagIDs},
1301
1305
  IgnoreMinorErrors=>$$options{IgnoreMinorErrors},
@@ -2181,7 +2185,7 @@ sub SetSystemTags($$)
2181
2185
  $result = $res if $res == 1 or not $result;
2182
2186
  last;
2183
2187
  } elsif ($tag ne 'FileCreateDate') {
2184
- $self->WarnOnce('Can only set MDItem tags on OS X');
2188
+ $self->WarnOnce('Can only set MDItem tags on MacOS');
2185
2189
  last;
2186
2190
  }
2187
2191
  }
@@ -3783,6 +3787,53 @@ sub GetWriteGroup1($$)
3783
3787
  return $self->GetGroup($tagInfo, 1);
3784
3788
  }
3785
3789
 
3790
+ #------------------------------------------------------------------------------
3791
+ # Get list of tags to write for Geolocate feature
3792
+ # Inputs: 0) ExifTool ref, 1) group name(s),
3793
+ # 2) 0=prefer writing City, 1=prefer writing GPS, undef=deleting tags
3794
+ # Returns: list of tags to write/delete
3795
+ sub GetGeolocateTags($$;$)
3796
+ {
3797
+ my ($self, $wantGroup, $writeGPS) = @_;
3798
+ my @grps = $wantGroup ? map lc, split(/:/, $wantGroup) : ();
3799
+ my %grps = map { $_ => $_ } @grps; # lookup for specified groups
3800
+ $grps{exif} and not $grps{gps} and $grps{gps} = 'gps', push(@grps, 'gps');
3801
+ my %tagGroups = (
3802
+ 'xmp-iptcext' => [ qw(LocationShownCity LocationShownProvinceState LocationShownCountryCode
3803
+ LocationShownCountryName LocationShownGPSLatitude LocationShownGPSLongitude) ],
3804
+ 'xmp-photoshop' => [ qw(City State Country) ],
3805
+ 'xmp-iptccore' => [ 'CountryCode' ],
3806
+ 'iptc' => [ qw(City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName) ],
3807
+ 'gps' => [ qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) ],
3808
+ 'xmp-exif' => [ qw(GPSLatitude GPSLongitude) ],
3809
+ 'keys' => [ 'GPSCoordinates' ],
3810
+ 'itemlist' => [ 'GPSCoordinates' ],
3811
+ 'userdata' => [ 'GPSCoordinates' ],
3812
+ # more general groups not in this lookup: XMP and QuickTime
3813
+ );
3814
+ my (@tags, $grp);
3815
+ # set specific City and GPS tags
3816
+ foreach $grp (@grps) {
3817
+ $tagGroups{$grp} and push @tags, map("$grp:$_", @{$tagGroups{$grp}});
3818
+ }
3819
+ # set default XMP City tags if necessary
3820
+ if (not $writeGPS and ($grps{xmp} or (not @tags and not $grps{quicktime}))) {
3821
+ push @tags, qw(XMP:City XMP:State XMP:CountryCode XMP:Country);
3822
+ }
3823
+ $writeGPS = 1 unless defined $writeGPS; # (delete both City and GPS)
3824
+ # set default QuickTime tag if necessary
3825
+ my $didQT = grep /Coordinates$/, @tags;
3826
+ if (($grps{quicktime} and not $didQT) or ($writeGPS and not @tags and not $grps{xmp})) {
3827
+ push @tags, 'QuickTime:GPSCoordinates';
3828
+ }
3829
+ # set default GPS tags if necessary
3830
+ if ($writeGPS) {
3831
+ push @tags, qw(XMP:GPSLatitude XMP:GPSLongitude) if $grps{xmp} and not $grps{'xmp-exif'};
3832
+ push @tags, qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) if not $wantGroup;
3833
+ }
3834
+ return @tags;
3835
+ }
3836
+
3786
3837
  #------------------------------------------------------------------------------
3787
3838
  # Get new value hash for specified tagInfo/writeGroup
3788
3839
  # Inputs: 0) ExifTool object reference, 1) reference to tag info hash
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.63';
53
+ $VERSION = '3.64';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -171,6 +171,7 @@ my %xmpNS = (
171
171
  pmi => 'http://prismstandard.org/namespaces/pmi/2.2/',
172
172
  prm => 'http://prismstandard.org/namespaces/prm/3.0/',
173
173
  acdsee => 'http://ns.acdsee.com/iptc/1.0/',
174
+ 'acdsee-rs'=> 'http://ns.acdsee.com/regions/',
174
175
  digiKam => 'http://www.digikam.org/ns/1.0/',
175
176
  swf => 'http://ns.adobe.com/swf/1.0/',
176
177
  cell => 'http://developer.sonyericsson.com/cell/1.0/',
@@ -802,6 +803,10 @@ my %sRangeMask = (
802
803
  Name => 'acdsee',
803
804
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::acdsee' },
804
805
  },
806
+ 'acdsee-rs' => {
807
+ Name => 'acdsee-rs',
808
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::ACDSeeRegions' },
809
+ },
805
810
  digiKam => {
806
811
  Name => 'digiKam',
807
812
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::digiKam' },
@@ -2554,7 +2559,17 @@ my %sPantryItem = (
2554
2559
  return $val;
2555
2560
  },
2556
2561
  },
2557
- ApproximateFocusDistance => { Writable => 'rational' }, #PH (LR3)
2562
+ ApproximateFocusDistance => {
2563
+ Writable => 'rational',
2564
+ PrintConv => {
2565
+ 4294967295 => 'infinity',
2566
+ OTHER => sub {
2567
+ my ($val, $inv) = @_;
2568
+ return $val eq 'infinity' ? 4294967295 : $val if $inv;
2569
+ return $val eq 4294967295 ? 'infinity' : $val;
2570
+ },
2571
+ },
2572
+ }, #PH (LR3)
2558
2573
  # the following new in LR6 (ref forum6497)
2559
2574
  IsMergedPanorama => { Writable => 'boolean' },
2560
2575
  IsMergedHDR => { Writable => 'boolean' },
@@ -224,6 +224,7 @@ my %sAppInfo = (
224
224
  fileDataRate => { Writable => 'rational' },
225
225
  genre => { },
226
226
  good => { Writable => 'boolean' },
227
+ pick => { Writable => 'integer' }, #forum15815
227
228
  instrument => { },
228
229
  introTime => { Struct => \%sTime },
229
230
  key => {
@@ -403,6 +404,18 @@ my %sLocationDetails = (
403
404
  PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
404
405
  PrintConvInv => '$val=~s/\s*m$//;$val',
405
406
  },
407
+ GPSAltitudeRef => {
408
+ Writable => 'integer',
409
+ PrintConv => {
410
+ OTHER => sub {
411
+ my ($val, $inv) = @_;
412
+ return undef unless $inv and $val =~ /^([-+0-9])/;
413
+ return($1 eq '-' ? 1 : 0);
414
+ },
415
+ 0 => 'Above Sea Level',
416
+ 1 => 'Below Sea Level',
417
+ },
418
+ },
406
419
  );
407
420
  my %sCVTermDetails = (
408
421
  STRUCT_NAME => 'CVTermDetails',
@@ -1373,6 +1386,57 @@ my %sSubVersion = (
1373
1386
  Snapshots => { List => 'Bag', Binary => 1 },
1374
1387
  );
1375
1388
 
1389
+ # ACDSee region tags (ref BKW)
1390
+ my %sACDSeeDimensions = (
1391
+ STRUCT_NAME => 'ACDSeeDimensions',
1392
+ NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
1393
+ 'w' => { Writable => 'real' },
1394
+ 'h' => { Writable => 'real' },
1395
+ 'unit' => { },
1396
+ );
1397
+ my %sACDSeeArea = (
1398
+ STRUCT_NAME => 'ACDSeeArea',
1399
+ NAMESPACE => { 'acdsee-stArea' => 'http://ns.acdsee.com/sType/Area#' },
1400
+ 'x' => { Writable => 'real' },
1401
+ 'y' => { Writable => 'real' },
1402
+ w => { Writable => 'real' },
1403
+ h => { Writable => 'real' },
1404
+ );
1405
+ my %sACDSeeRegionStruct = (
1406
+ STRUCT_NAME => 'ACDSeeRegion',
1407
+ NAMESPACE => 'acdsee-rs',
1408
+ ALGArea => { Struct => \%sACDSeeArea },
1409
+ DLYArea => { Struct => \%sACDSeeArea },
1410
+ Name => { },
1411
+ NameAssignType => { },
1412
+ Type => { },
1413
+ );
1414
+ %Image::ExifTool::XMP::ACDSeeRegions = (
1415
+ GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee-rs', 2 => 'Image' },
1416
+ NAMESPACE => 'acdsee-rs',
1417
+ WRITABLE => 'string',
1418
+ AVOID => 1,
1419
+ Regions => {
1420
+ Name => 'RegionInfoACDSee',
1421
+ FlatName => 'ACDSee',
1422
+ # the "Struct" entry defines the structure fields
1423
+ Struct => {
1424
+ # optional structure name (used for warning messages only)
1425
+ STRUCT_NAME => 'ACDSeeRegionInfo',
1426
+ NAMESPACE => 'acdsee-rs',
1427
+ RegionList => {
1428
+ FlatName => 'Region',
1429
+ Struct => \%sACDSeeRegionStruct,
1430
+ List => 'Bag',
1431
+ },
1432
+ AppliedToDimensions => {
1433
+ FlatName => 'RegionAppliedToDimensions',
1434
+ Struct => \%sACDSeeDimensions,
1435
+ },
1436
+ },
1437
+ },
1438
+ );
1439
+
1376
1440
  # Picture Licensing Universal System namespace properties (xmpPLUS)
1377
1441
  %Image::ExifTool::XMP::xmpPLUS = (
1378
1442
  %xmpTableDefaults,