exiftool-vendored.pl 12.73.0 → 12.78.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 (70) hide show
  1. package/bin/Changes +94 -6
  2. package/bin/MANIFEST +4 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +46 -45
  6. package/bin/config_files/example.config +10 -2
  7. package/bin/exiftool +143 -94
  8. package/bin/lib/File/RandomAccess.pm +31 -5
  9. package/bin/lib/File/RandomAccess.pod +4 -4
  10. package/bin/lib/Image/ExifTool/7Z.pm +3 -3
  11. package/bin/lib/Image/ExifTool/AFCP.pm +2 -2
  12. package/bin/lib/Image/ExifTool/BZZ.pm +2 -2
  13. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -7
  14. package/bin/lib/Image/ExifTool/Canon.pm +17 -13
  15. package/bin/lib/Image/ExifTool/CanonVRD.pm +8 -2
  16. package/bin/lib/Image/ExifTool/DICOM.pm +2 -2
  17. package/bin/lib/Image/ExifTool/DNG.pm +4 -4
  18. package/bin/lib/Image/ExifTool/Exif.pm +54 -5
  19. package/bin/lib/Image/ExifTool/FLIR.pm +2 -2
  20. package/bin/lib/Image/ExifTool/Fixup.pm +3 -3
  21. package/bin/lib/Image/ExifTool/FlashPix.pm +3 -3
  22. package/bin/lib/Image/ExifTool/FujiFilm.pm +8 -3
  23. package/bin/lib/Image/ExifTool/GPS.pm +5 -3
  24. package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  25. package/bin/lib/Image/ExifTool/Geolocation.pm +237 -0
  26. package/bin/lib/Image/ExifTool/Geotag.pm +4 -4
  27. package/bin/lib/Image/ExifTool/HtmlDump.pm +7 -4
  28. package/bin/lib/Image/ExifTool/ID3.pm +2 -2
  29. package/bin/lib/Image/ExifTool/Import.pm +9 -6
  30. package/bin/lib/Image/ExifTool/JSON.pm +11 -11
  31. package/bin/lib/Image/ExifTool/Jpeg2000.pm +51 -12
  32. package/bin/lib/Image/ExifTool/MIE.pm +3 -3
  33. package/bin/lib/Image/ExifTool/MWG.pm +1 -0
  34. package/bin/lib/Image/ExifTool/MacOS.pm +19 -4
  35. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  36. package/bin/lib/Image/ExifTool/Nikon.pm +5 -3
  37. package/bin/lib/Image/ExifTool/NikonCustom.pm +3 -3
  38. package/bin/lib/Image/ExifTool/Ogg.pm +4 -3
  39. package/bin/lib/Image/ExifTool/Olympus.pm +3 -1
  40. package/bin/lib/Image/ExifTool/PDF.pm +59 -9
  41. package/bin/lib/Image/ExifTool/PLIST.pm +3 -3
  42. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +3 -3
  43. package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  44. package/bin/lib/Image/ExifTool/PhaseOne.pm +2 -2
  45. package/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
  46. package/bin/lib/Image/ExifTool/PostScript.pm +2 -2
  47. package/bin/lib/Image/ExifTool/QuickTime.pm +223 -117
  48. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +260 -242
  49. package/bin/lib/Image/ExifTool/RSRC.pm +2 -2
  50. package/bin/lib/Image/ExifTool/Samsung.pm +4 -4
  51. package/bin/lib/Image/ExifTool/Shift.pl +1 -2
  52. package/bin/lib/Image/ExifTool/SigmaRaw.pm +3 -3
  53. package/bin/lib/Image/ExifTool/Sony.pm +3 -3
  54. package/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  55. package/bin/lib/Image/ExifTool/TagLookup.pm +85 -8
  56. package/bin/lib/Image/ExifTool/TagNames.pod +148 -8
  57. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  58. package/bin/lib/Image/ExifTool/WriteExif.pl +26 -23
  59. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  60. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +15 -2
  61. package/bin/lib/Image/ExifTool/WriteXMP.pl +4 -2
  62. package/bin/lib/Image/ExifTool/Writer.pl +77 -52
  63. package/bin/lib/Image/ExifTool/XMP.pm +2 -1
  64. package/bin/lib/Image/ExifTool/XMP2.pl +9 -0
  65. package/bin/lib/Image/ExifTool/ZIP.pm +6 -6
  66. package/bin/lib/Image/ExifTool.pm +204 -63
  67. package/bin/lib/Image/ExifTool.pod +118 -94
  68. package/bin/perl-Image-ExifTool.spec +45 -44
  69. package/bin/pp_build_exe.args +4 -230
  70. package/package.json +4 -4
@@ -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 27469 tags, with 17233 unique tag names.
15
+ They contain a total of 27565 tags, with 17308 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*
@@ -10115,6 +10117,7 @@ CameraInfo tags for the PowerShot G5 X Mark II.
10115
10117
  Index1 Tag Name Writable
10116
10118
  ------ -------- --------
10117
10119
  659 ShutterCount int32u
10120
+ 2709 ShutterCount int32u
10118
10121
  2849 DirectoryIndex int32u
10119
10122
  2861 FileIndex int32u
10120
10123
 
@@ -12270,6 +12273,11 @@ below by a decimal appended to the tag ID (.0, .1 or .2).
12270
12273
  0x20916 PurpleHSL yes
12271
12274
  0x20917 MagentaHSL yes
12272
12275
  0x20a00 GammaInfo CanonVRD GammaInfo
12276
+ 0x20b10 DPRAWMicroadjustBackFront yes
12277
+ 0x20b12 DPRAWMicroadjustStrength yes
12278
+ 0x20b20 DPRAWBokehShift yes
12279
+ 0x20b21 DPRAWBokehShiftArea yes
12280
+ 0x20b30 DPRAWGhostingReductionArea yes
12273
12281
  0x30101 CropAspectRatio yes
12274
12282
  0x30102 CropAspectRatioCustom yes
12275
12283
  0xf0100 CropInfo CanonVRD CropInfo
@@ -25405,10 +25413,13 @@ C2PA (Coalition for Content Provenance and Authenticity) CAI (Content
25405
25413
  Authenticity Initiative) JUMBF (JPEG Universal Metadata Box Format) metdata
25406
25414
  is currently extracted from JPEG, PNG, TIFF-based (eg. TIFF, DNG),
25407
25415
  QuickTime-based (eg. MP4, MOV, HEIF, AVIF), RIFF-based (eg. WAV, AVI, WebP),
25408
- GIF files and ID3v2 metadata. The suggested ExifTool command-line arguments
25409
- for reading C2PA metadata are C<-jumbf:all -G3 -b -j -u -struct>. This
25410
- metadata may be deleted from writable JPEG, PNG, WebP, TIFF-based, and
25411
- QuickTime-based files by deleting the JUMBF group with C<-jumbf:all=>.
25416
+ PDF, SVG and GIF files, and ID3v2 metadata. The suggested ExifTool
25417
+ command-line arguments for reading C2PA metadata are C<-jumbf:all -G3 -b -j
25418
+ -u -struct>. This metadata may be deleted from writable JPEG, PNG, WebP,
25419
+ TIFF-based, and QuickTime-based files by deleting the JUMBF group with
25420
+ C<-jumbf:all=>. The C2PA JUMBF metadata may be extracted as a block via the
25421
+ JUMBF tag. See L<https://c2pa.org/specifications/> for the C2PA
25422
+ specification.
25412
25423
 
25413
25424
  Tag ID Tag Name Writable
25414
25425
  ------ -------- --------
@@ -28532,6 +28543,7 @@ This is the PDF document catalog.
28532
28543
 
28533
28544
  Tag ID Tag Name Writable
28534
28545
  ------ -------- --------
28546
+ 'AF' AF PDF AF
28535
28547
  'AcroForm' AcroForm PDF AcroForm
28536
28548
  'Lang' Language no
28537
28549
  'MarkInfo' MarkInfo PDF MarkInfo
@@ -28542,6 +28554,28 @@ This is the PDF document catalog.
28542
28554
  'Perms' Perms PDF Perms
28543
28555
  'Version' PDFVersion no
28544
28556
 
28557
+ =head3 PDF AF Tags
28558
+
28559
+ Processed only for C2PA information if AFRelationship is "/C2PA_Manifest".
28560
+
28561
+ Tag ID Tag Name Writable
28562
+ ------ -------- --------
28563
+ 'EF' EF PDF EF
28564
+
28565
+ =head3 PDF EF Tags
28566
+
28567
+ Tag ID Tag Name Writable
28568
+ ------ -------- --------
28569
+ 'F' F_ PDF F
28570
+
28571
+ =head3 PDF F Tags
28572
+
28573
+ C2PA JUMBF metadata extracted from "/C2PA_Manifest" file.
28574
+
28575
+ Tag ID Tag Name Writable
28576
+ ------ -------- --------
28577
+ '_stream' JUMBF Jpeg2000
28578
+
28545
28579
  =head3 PDF AcroForm Tags
28546
28580
 
28547
28581
  Tag ID Tag Name Writable
@@ -29227,6 +29261,7 @@ for the official specification.
29227
29261
  ThumbnailImage no
29228
29262
  Free? no
29229
29263
  'ftyp' FileType QuickTime FileType
29264
+ 'gdat' GPSData QuickTime Stream
29230
29265
  'gps0' GPSTrack QuickTime Stream
29231
29266
  'gsen' GSensor QuickTime Stream
29232
29267
  'junk' Junk? no
@@ -29238,6 +29273,7 @@ for the official specification.
29238
29273
  'moof' MovieFragment QuickTime MovieFragment
29239
29274
  'moov' Movie QuickTime Movie
29240
29275
  'mpvd' MotionPhotoVideo yes
29276
+ 'nbmt' NextbaseMeta QuickTime Stream
29241
29277
  'pict' PreviewPICT no
29242
29278
  'pnot' Preview QuickTime Preview
29243
29279
  'prrt' ARDroneTelemetry no
@@ -29257,10 +29293,11 @@ for the official specification.
29257
29293
  UUID-Flip QuickTime Flip
29258
29294
  UUID-Canon2 Canon uuid2
29259
29295
  SensorData QuickTime Tags360Fly
29296
+ SensorData no
29260
29297
  JUMBF Jpeg2000
29261
29298
  CBOR CBOR
29262
- SensorData no
29263
29299
  PreviewImage no
29300
+ ThumbnailImage no
29264
29301
  UUID-Unknown? no
29265
29302
  'wide' Wide? no
29266
29303
 
@@ -29269,7 +29306,7 @@ for the official specification.
29269
29306
  The tags below are extracted from timed metadata in QuickTime and other
29270
29307
  formats of video files when the ExtractEmbedded option is used. Although
29271
29308
  most of these tags are combined into the single table below, ExifTool
29272
- currently reads 68 different formats of timed GPS metadata from video files.
29309
+ currently reads 71 different formats of timed GPS metadata from video files.
29273
29310
 
29274
29311
  Tag Name Writable
29275
29312
  -------- --------
@@ -29278,6 +29315,7 @@ currently reads 68 different formats of timed GPS metadata from video files.
29278
29315
  AngularVelocity no
29279
29316
  CTMD Canon CTMD
29280
29317
  CameraDateTime no
29318
+ CameraModel no
29281
29319
  Car no
29282
29320
  DateTimeOriginal no
29283
29321
  Distance no
@@ -29481,8 +29519,10 @@ changed via the config file.
29481
29519
  'com.android.version' AndroidVersion yes
29482
29520
  'com.apple.photos.captureMode' CaptureMode yes
29483
29521
  'comment' Comment yes
29522
+ 'compatible_brands' CompatibleBrands yes/
29484
29523
  'content.identifier' ContentIdentifier yes
29485
29524
  'copyright' Copyright yes
29525
+ 'creation_time' CreationTime yes/
29486
29526
  'creationdate' CreationDate yes
29487
29527
  'description' Description yes
29488
29528
  'detected-face' FaceInfo QuickTime FaceInfo
@@ -29514,7 +29554,9 @@ changed via the config file.
29514
29554
  'location.name' LocationName yes
29515
29555
  'location.note' LocationNote yes
29516
29556
  'location.role' LocationRole yes
29557
+ 'major_brand' MajorBrand yes/
29517
29558
  'make' Make yes
29559
+ 'minor_version' MinorVersion yes/
29518
29560
  'model' Model yes
29519
29561
  'player.movie.audio.balance' Balance yes
29520
29562
  'player.movie.audio.bass' Bass yes
@@ -30507,12 +30549,15 @@ the config file.
30507
30549
  'cvru' CoverURI string
30508
30550
  'date' DateTimeOriginal string
30509
30551
  'dscp' Description string/
30552
+ 'finm' OriginalFileName no
30510
30553
  'gnre' Genre string/
30511
30554
  'hinf' HintTrackInfo QuickTime HintTrackInfo
30512
30555
  'hinv' HintVersion string
30513
30556
  'hnti' HintInfo QuickTime HintInfo
30514
30557
  'htcb' HTCBinary QuickTime HTCBinary
30515
30558
  'icnu' IconURI string
30559
+ 'infi' CameraInfo QuickTime Nextbase
30560
+ 'info' FirmwareVersion string
30516
30561
  'infu' InfoURL string
30517
30562
  'kgtt' TrackType string
30518
30563
  'kywd' Keywords no
@@ -30544,9 +30589,11 @@ the config file.
30544
30589
  ThumbnailImage string
30545
30590
  ThumbnailPNG string
30546
30591
  UnknownThumbnail string
30592
+ 'time' TimeStamp no
30547
30593
  'titl' Title string/
30548
30594
  'urat' UserRating undef/
30549
30595
  'uuid' GarminSoftware string
30596
+ GarminModel no
30550
30597
  UUID-Unknown? no
30551
30598
  'vndr' Vendor string
30552
30599
  'vrot' AccelerometerData no
@@ -30661,6 +30708,83 @@ Tags found in TomTom Bandit Action Cam MP4 videos.
30661
30708
  ------ -------- --------
30662
30709
  [no tags known]
30663
30710
 
30711
+ =head3 QuickTime Nextbase Tags
30712
+
30713
+ Tags found in 'infi' atom from some Nextbase videos. As well as these tags,
30714
+ other existing tags are also extracted. These tags are not currently
30715
+ writable but they may all be removed by deleting the Nextbase group.
30716
+
30717
+ Tag ID Tag Name Writable
30718
+ ------ -------- --------
30719
+ '2nd Cam' SecondCam no
30720
+ 'Alerts' Alerts no
30721
+ 'Alexa' Alexa no
30722
+ 'Alexa - Paired Device Name'
30723
+ Alexa-PairedDeviceName no
30724
+ 'Alexa - Pairing' Alexa-Pairing no
30725
+ 'Alexa - Privacy Mode' Alexa-PrivacyMode no
30726
+ 'Alexa - Wake Word Language'
30727
+ Alexa-WakeWordLanguage no
30728
+ 'Audio' Audio no
30729
+ 'Auto Power Off' AutoPowerOff no
30730
+ 'Battery Status' BatteryStatus no
30731
+ 'Bluetooth MAC Address' BluetoothMACAddress no
30732
+ 'Bluetooth Name' BluetoothName no
30733
+ 'Country' Country no
30734
+ 'Default Settings' DefaultSettings no
30735
+ 'Device Sounds' DeviceSounds no
30736
+ 'Dual Files' DualFiles no
30737
+ 'Emergency SOS' EmergencySOS no
30738
+ 'Exposure' Exposure no
30739
+ 'Extreme Weather Mode' ExtremeWeatherMode no
30740
+ 'FCC-ID' FCC-ID no
30741
+ 'Firmware' Firmware no
30742
+ 'Firmware Version' FirmwareVersion no
30743
+ 'Format SD Card' FormatSDCard no
30744
+ 'G Sensor' GSensor no
30745
+ 'GPS Stamp' GPSStamp no
30746
+ 'Image Stabilisation' ImageStabilisation no
30747
+ 'Keep User Settings' KeepUserSettings no
30748
+ 'Language' Language no
30749
+ 'Linux' Linux no
30750
+ 'Model' Model no
30751
+ 'Model Stamp' ModelStamp no
30752
+ 'MyNextbase - Paired Device Name'
30753
+ MyNextbase-PairedDeviceName no
30754
+ 'MyNextbase - Pairing' MyNextbase-Pairing no
30755
+ 'NBCD' NBCD no
30756
+ 'Number / License Plate' NumberLicensePlate no
30757
+ 'Parking Mode' ParkingMode no
30758
+ 'RTOS' RTOS no
30759
+ 'Recording History' RecordingHistory no
30760
+ 'Resolution' Resolution no
30761
+ 'Reversing Camera' ReversingCamera no
30762
+ 'SD Card Class' SDCardClass no
30763
+ 'SD Card Format' SDCardFormat no
30764
+ 'SD Card Manf Date' SDCardManfDate no
30765
+ 'SD Card Manf ID' SDCardManfID no
30766
+ 'SD Card Model No' SDCardModelNo no
30767
+ 'SD Card OEM ID' SDCardOEMID no
30768
+ 'SD Card Serial No' SDCardSerialNo no
30769
+ 'SD Card Size' SDCardSize no
30770
+ 'SD Card Type' SDCardType no
30771
+ 'SD Card Used Space' SDCardUsedSpace no
30772
+ 'Screen Dimming' ScreenDimming no
30773
+ 'Screen Saver' ScreenSaver no
30774
+ 'Serial No' SerialNumber no
30775
+ 'Speed Stamp' SpeedStamp no
30776
+ 'Speed Units' SpeedUnits no
30777
+ 'System Info' SystemInfo no
30778
+ 'Time & Date' TimeAndDate no
30779
+ 'Time Lapse' TimeLapse no
30780
+ 'Time Stamp' VideoTimeStamp no
30781
+ 'Time Zone / DST' TimeZoneDST no
30782
+ 'Video Length' VideoLength no
30783
+ 'Wi-Fi MAC Address' Wi-FiMACAddress no
30784
+ 'Wi-Fi Password' Wi-FiPassword no
30785
+ 'Wi-Fi SSID' Wi-FiSSID no
30786
+ 'what3words' What3Words no
30787
+
30664
30788
  =head3 QuickTime Video Tags
30665
30789
 
30666
30790
  Index1 Tag Name Writable
@@ -39333,7 +39457,7 @@ these files directly.
39333
39457
  XAttrLastUsedDate no
39334
39458
  XAttrMDItemDownloadedDate no
39335
39459
  XAttrMDItemFinderComment no
39336
- XAttrMDItemWhereFroms no
39460
+ XAttrMDItemWhereFroms yes!
39337
39461
  XAttrMDLabel no
39338
39462
  XAttrQuarantine yes!
39339
39463
  XAttrResourceFork no
@@ -39531,6 +39655,16 @@ FileName.
39531
39655
  FileTypeExtension File no
39532
39656
  FileUserID System yes!
39533
39657
  ForceWrite - yes
39658
+ Geolocate - yes
39659
+ GeolocationBearing ExifTool no
39660
+ GeolocationCity ExifTool no
39661
+ GeolocationCountry ExifTool no
39662
+ GeolocationCountryCode ExifTool no
39663
+ GeolocationDistance ExifTool no
39664
+ GeolocationPopulation ExifTool no
39665
+ GeolocationPosition ExifTool no
39666
+ GeolocationRegion ExifTool no
39667
+ GeolocationTimeZone ExifTool no
39534
39668
  Geosync - yes
39535
39669
  Geotag - yes
39536
39670
  Geotime - yes
@@ -39544,6 +39678,7 @@ FileName.
39544
39678
  JPEGDigest File no
39545
39679
  JPEGImageLength File no
39546
39680
  JPEGQualityEstimate File no
39681
+ JUMBF JUMBF no
39547
39682
  MIMEType File no
39548
39683
  MaxVal File no
39549
39684
  NewGUID ExifTool no
@@ -39552,6 +39687,7 @@ FileName.
39552
39687
  OtherImage File no
39553
39688
  PageCount File no
39554
39689
  PreviewImage File yes
39690
+ PreviewJXL File no
39555
39691
  PreviewPDF File no
39556
39692
  PreviewPNG File no
39557
39693
  PreviewTIFF File no
@@ -39815,6 +39951,10 @@ values, may created via the ExifTool configuration file.
39815
39951
  PreviewImage ScreenNail no
39816
39952
  PreviewImageSize PreviewImageWidth no
39817
39953
  PreviewImageHeight
39954
+ PreviewJXL PreviewJXLStart no
39955
+ PreviewJXLLength
39956
+ PreviewJXLStart (1)
39957
+ PreviewJXLLength (1)
39818
39958
  RedBalance WB_RGGBLevels no
39819
39959
  WB_RGBGLevels
39820
39960
  WB_RBGGLevels
@@ -128,7 +128,7 @@ sub SaveMakerNotes($)
128
128
  delete $$et{MAKER_NOTE_INFO};
129
129
  my $dirEntries = $makerInfo->{Entries};
130
130
  my $numEntries = scalar(keys %$dirEntries);
131
- my $fixup = new Image::ExifTool::Fixup;
131
+ my $fixup = Image::ExifTool::Fixup->new;
132
132
  return unless $numEntries;
133
133
  # build the MakerNotes directory
134
134
  my $makerNotes = Set16u($numEntries);
@@ -171,9 +171,9 @@ sub RebuildMakerNotes($$$)
171
171
  my $saveOrder = GetByteOrder();
172
172
  my $loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo);
173
173
  if (defined $loc) {
174
- my $makerFixup = $subdirInfo{Fixup} = new Image::ExifTool::Fixup;
174
+ my $makerFixup = $subdirInfo{Fixup} = Image::ExifTool::Fixup->new;
175
175
  # create new exiftool object to rewrite the directory without changing it
176
- my $newTool = new Image::ExifTool;
176
+ my $newTool = Image::ExifTool->new;
177
177
  $newTool->Options(
178
178
  IgnoreMinorErrors => $$et{OPTIONS}{IgnoreMinorErrors},
179
179
  FixBase => $$et{OPTIONS}{FixBase},
@@ -565,7 +565,7 @@ sub WriteExif($$$)
565
565
  my $firstBase = $base;
566
566
  my $raf = $$dirInfo{RAF};
567
567
  my $dirName = $$dirInfo{DirName} || 'unknown';
568
- my $fixup = $$dirInfo{Fixup} || new Image::ExifTool::Fixup;
568
+ my $fixup = $$dirInfo{Fixup} || Image::ExifTool::Fixup->new;
569
569
  my $imageDataFlag = $$dirInfo{ImageData} || '';
570
570
  my $verbose = $et->Options('Verbose');
571
571
  my $out = $et->Options('TextOut');
@@ -745,7 +745,7 @@ sub WriteExif($$$)
745
745
  my $valBuff = ''; # buffer for value data
746
746
  my @valFixups; # list of fixups for offsets in valBuff
747
747
  # fixup for offsets in dirBuff
748
- my $dirFixup = new Image::ExifTool::Fixup;
748
+ my $dirFixup = Image::ExifTool::Fixup->new;
749
749
  my $entryBasedFixup;
750
750
  my $lastTagID = -1;
751
751
  my ($oldInfo, $oldFormat, $oldFormName, $oldCount, $oldSize, $oldValue, $oldImageData);
@@ -896,7 +896,7 @@ Entry: for (;;) {
896
896
  TagInfo => $oldInfo || $tmpInfo,
897
897
  Offset => $base + $valuePtr + $dataPos,
898
898
  Size => $oldSize,
899
- Fixup => new Image::ExifTool::Fixup,
899
+ Fixup => Image::ExifTool::Fixup->new,
900
900
  },
901
901
  $invalidPreview = 2;
902
902
  # remove SubDirectory to prevent processing (for now)
@@ -1348,7 +1348,7 @@ NoOverwrite: next if $isNew > 0;
1348
1348
  # create empty source directory
1349
1349
  my %sourceDir = (
1350
1350
  Parent => $dirName,
1351
- Fixup => new Image::ExifTool::Fixup,
1351
+ Fixup => Image::ExifTool::Fixup->new,
1352
1352
  );
1353
1353
  $sourceDir{DirName} = $$newInfo{Groups}{1} if $$newInfo{SubIFD};
1354
1354
  $newValue = $et->WriteDirectory(\%sourceDir, $subTable);
@@ -1509,7 +1509,7 @@ NoOverwrite: next if $isNew > 0;
1509
1509
  }
1510
1510
  if (defined $loc) {
1511
1511
  # we need fixup data for this subdirectory
1512
- $subdirInfo{Fixup} = new Image::ExifTool::Fixup;
1512
+ $subdirInfo{Fixup} = Image::ExifTool::Fixup->new;
1513
1513
  # rewrite maker notes
1514
1514
  my $changed = $$et{CHANGED};
1515
1515
  $subdir = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc);
@@ -1673,7 +1673,7 @@ NoOverwrite: next if $isNew > 0;
1673
1673
  Name => $$newInfo{Name},
1674
1674
  TagInfo => $newInfo,
1675
1675
  Parent => $dirName,
1676
- Fixup => new Image::ExifTool::Fixup,
1676
+ Fixup => Image::ExifTool::Fixup->new,
1677
1677
  RAF => $raf,
1678
1678
  Subdir => $subdir,
1679
1679
  # set ImageData only for 1st level SubIFD's
@@ -1782,7 +1782,7 @@ NoOverwrite: next if $isNew > 0;
1782
1782
  #### eval Base ($start,$base)
1783
1783
  $subdirBase += eval $$subdir{Base};
1784
1784
  }
1785
- my $subFixup = new Image::ExifTool::Fixup;
1785
+ my $subFixup = Image::ExifTool::Fixup->new;
1786
1786
  my %subdirInfo = (
1787
1787
  Base => $subdirBase,
1788
1788
  DataPt => $valueDataPt,
@@ -1995,7 +1995,7 @@ NoOverwrite: next if $isNew > 0;
1995
1995
  # hold onto the PreviewImage until we can determine if it fits
1996
1996
  $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
1997
1997
  Data => $$newValuePt,
1998
- Fixup => new Image::ExifTool::Fixup,
1998
+ Fixup => Image::ExifTool::Fixup->new,
1999
1999
  };
2000
2000
  $$et{PREVIEW_INFO}{ChangeBase} = 1 if $$newInfo{ChangeBase};
2001
2001
  if ($$newInfo{IsOffset} and $$newInfo{IsOffset} eq '2') {
@@ -2017,7 +2017,7 @@ NoOverwrite: next if $isNew > 0;
2017
2017
  $valBuff .= $$newValuePt; # add value data to buffer
2018
2018
  # must save a fixup pointer for every pointer in the directory
2019
2019
  if ($entryBased) {
2020
- $entryBasedFixup or $entryBasedFixup = new Image::ExifTool::Fixup;
2020
+ $entryBasedFixup or $entryBasedFixup = Image::ExifTool::Fixup->new;
2021
2021
  $entryBasedFixup->AddFixup(length($dirBuff) + 8, $dataTag);
2022
2022
  } else {
2023
2023
  $dirFixup->AddFixup(length($dirBuff) + 8, $dataTag);
@@ -2277,14 +2277,17 @@ NoOverwrite: next if $isNew > 0;
2277
2277
  $$offsetInfo{0x117} and $$offsetInfo{0x145} and
2278
2278
  $$offsetInfo{0x111}[2]==1) # (must be a single strip or the tile offsets could get out of sync)
2279
2279
  {
2280
- # some Sony ARW images contain double-referenced raw data stored as both strips
2281
- # and tiles. Copy the data using only the strip tags, but store the TileOffets
2282
- # information for updating later (see PanasonicRaw:PatchRawDataOffset for a
2283
- # description of offsetInfo elements)
2284
- $$offsetInfo{0x111}[5] = $$offsetInfo{0x144}; # hack to save TileOffsets
2285
- # delete tile information from offsetInfo because we will copy as strips
2286
- delete $$offsetInfo{0x144};
2287
- delete $$offsetInfo{0x145};
2280
+ # check the start offsets to see if they are the same
2281
+ if ($$offsetInfo{0x111}[3][0] == $$offsetInfo{0x144}[3][0]) {
2282
+ # some Sony ARW images contain double-referenced raw data stored as both strips
2283
+ # and tiles. Copy the data using only the strip tags, but store the TileOffets
2284
+ # information for updating later (see PanasonicRaw:PatchRawDataOffset for a
2285
+ # description of offsetInfo elements)
2286
+ $$offsetInfo{0x111}[5] = $$offsetInfo{0x144}; # hack to save TileOffsets
2287
+ # delete tile information from offsetInfo because we will copy as strips
2288
+ delete $$offsetInfo{0x144};
2289
+ delete $$offsetInfo{0x145};
2290
+ }
2288
2291
  } else {
2289
2292
  $et->Error("TIFF $dirName contains both strip and tile data");
2290
2293
  }
@@ -2451,7 +2454,7 @@ NoOverwrite: next if $isNew > 0;
2451
2454
  $newOffset += $blockSize; # data comes after other deferred data
2452
2455
  # create fixup for SubIFD ImageData
2453
2456
  if ($imageDataFlag eq 'SubIFD' and not $subIfdDataFixup) {
2454
- $subIfdDataFixup = new Image::ExifTool::Fixup;
2457
+ $subIfdDataFixup = Image::ExifTool::Fixup->new;
2455
2458
  $imageData[-1][4] = $subIfdDataFixup;
2456
2459
  }
2457
2460
  $size += $pad; # account for pad byte if necessary
@@ -2522,7 +2525,7 @@ NoOverwrite: next if $isNew > 0;
2522
2525
  # hold onto the PreviewImage until we can determine if it fits
2523
2526
  $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
2524
2527
  Data => $buff,
2525
- Fixup => new Image::ExifTool::Fixup,
2528
+ Fixup => Image::ExifTool::Fixup->new,
2526
2529
  };
2527
2530
  if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '2') {
2528
2531
  $$et{PREVIEW_INFO}{NoBaseShift} = 1;
@@ -2603,7 +2606,7 @@ NoOverwrite: next if $isNew > 0;
2603
2606
  $fixup->AddFixup($entry + 8);
2604
2607
  # create special fixup for SubIFD data
2605
2608
  if ($imageDataFlag eq 'SubIFD') {
2606
- my $subIfdDataFixup = new Image::ExifTool::Fixup;
2609
+ my $subIfdDataFixup = Image::ExifTool::Fixup->new;
2607
2610
  $subIfdDataFixup->AddFixup($entry + 8);
2608
2611
  # save fixup in imageData list
2609
2612
  $$blockInfo[4] = $subIfdDataFixup;
@@ -2668,7 +2671,7 @@ NoOverwrite: next if $isNew > 0;
2668
2671
  } else {
2669
2672
  # Doesn't fit, or we still don't know, so save fixup information
2670
2673
  # and put the preview at the end of the file
2671
- $$previewInfo{Fixup} or $$previewInfo{Fixup} = new Image::ExifTool::Fixup;
2674
+ $$previewInfo{Fixup} or $$previewInfo{Fixup} = Image::ExifTool::Fixup->new;
2672
2675
  $$previewInfo{Fixup}->AddFixup($fixup);
2673
2676
  }
2674
2677
  } elsif (defined $newData and $deleteAll) {
@@ -290,7 +290,7 @@ sub WritePDF($$)
290
290
  $raf->Seek($pos, 0);
291
291
 
292
292
  # create a new ExifTool object and use it to read PDF and XMP information
293
- my $newTool = new Image::ExifTool;
293
+ my $newTool = Image::ExifTool->new;
294
294
  $newTool->Options(List => 1);
295
295
  $newTool->Options(Password => $et->Options('Password'));
296
296
  $newTool->Options(NoPDFList => $et->Options('NoPDFList'));
@@ -356,6 +356,18 @@ sub SetVarInt($$)
356
356
  return '';
357
357
  }
358
358
 
359
+ #------------------------------------------------------------------------------
360
+ # Write Nextbase infi atom (ref PH)
361
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
362
+ # Returns: updated infi data
363
+ sub WriteNextbase($$$)
364
+ {
365
+ my ($et, $dirInfo, $tagTablePtr) = @_;
366
+ $et or return 1;
367
+ $$et{DEL_GROUP}{Nextbase} and ++$$et{CHANGED}, return '';
368
+ return ${$$dirInfo{DataPt}};
369
+ }
370
+
359
371
  #------------------------------------------------------------------------------
360
372
  # Write Meta Keys to add/delete entries as necessary ('mdta' handler) (ref PH)
361
373
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
@@ -785,7 +797,7 @@ sub WriteQuickTime($$$)
785
797
  my ($rtnVal, $rtnErr) = $dataPt ? (undef, undef) : (1, 0);
786
798
 
787
799
  if ($dataPt) {
788
- $raf = new File::RandomAccess($dataPt);
800
+ $raf = File::RandomAccess->new($dataPt);
789
801
  } else {
790
802
  return 0 unless $raf;
791
803
  }
@@ -1619,7 +1631,8 @@ sub WriteQuickTime($$$)
1619
1631
  if ($isEmpty) {
1620
1632
  $et->VPrint(0,' Deleting ' . join('+', sort map { $emptyMeta{$_} } keys %boxPos)) if %boxPos;
1621
1633
  $$outfile = '';
1622
- ++$$et{CHANGED};
1634
+ # (could report a file if editing nothing when it contained an empty Meta atom)
1635
+ # ++$$et{CHANGED};
1623
1636
  }
1624
1637
  if ($curPath eq 'MOV-Movie-Meta') {
1625
1638
  delete $$addDirs{Keys}; # prevent creation of another Meta for Keys tags
@@ -1083,6 +1083,8 @@ sub WriteXMP($$;$)
1083
1083
  # delete all structure (or pseudo-structure) elements
1084
1084
  require 'Image/ExifTool/XMPStruct.pl';
1085
1085
  ($deleted, $added, $existed) = DeleteStruct($et, \%capture, \$path, $nvHash, \$changed);
1086
+ # don't add if it didn't exist and not IsCreating and Avoid
1087
+ undef $added if not $existed and not $$nvHash{IsCreating} and $$tagInfo{Avoid};
1086
1088
  next unless $deleted or $added or $et->IsOverwriting($nvHash);
1087
1089
  next if $existed and $$nvHash{CreateOnly};
1088
1090
  } elsif ($cap) {
@@ -1262,8 +1264,8 @@ sub WriteXMP($$;$)
1262
1264
  # check to see if we want to create this tag
1263
1265
  # (create non-avoided tags in XMP data files by default)
1264
1266
  my $isCreating = ($$nvHash{IsCreating} or (($isStruct or
1265
- ($preferred and not $$tagInfo{Avoid} and
1266
- not defined $$nvHash{Shift})) and not $$nvHash{EditOnly}));
1267
+ ($preferred and not defined $$nvHash{Shift})) and
1268
+ not $$tagInfo{Avoid} and not $$nvHash{EditOnly}));
1267
1269
 
1268
1270
  # don't add new values unless...
1269
1271
  # ...tag existed before and was deleted, or we added it to a list