exiftool-vendored.exe 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 (65) hide show
  1. package/bin/exiftool_files/Changes +94 -6
  2. package/bin/exiftool_files/README +46 -45
  3. package/bin/exiftool_files/config_files/example.config +10 -2
  4. package/bin/exiftool_files/exiftool.pl +138 -87
  5. package/bin/exiftool_files/lib/File/RandomAccess.pm +31 -5
  6. package/bin/exiftool_files/lib/File/RandomAccess.pod +4 -4
  7. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +3 -3
  8. package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +2 -2
  9. package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +2 -2
  10. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +7 -7
  11. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +17 -13
  12. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +8 -2
  13. package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +2 -2
  14. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +4 -4
  15. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +54 -5
  16. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +2 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +3 -3
  18. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +3 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +8 -3
  20. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -3
  21. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  22. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +237 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -4
  24. package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +7 -4
  25. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +2 -2
  26. package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +9 -6
  27. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +11 -11
  28. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +51 -12
  29. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +3 -3
  30. package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -0
  31. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +19 -4
  32. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  33. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +5 -3
  34. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +3 -3
  35. package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +4 -3
  36. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +59 -9
  38. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +3 -3
  39. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +3 -3
  40. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +2 -2
  42. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +3 -3
  43. package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +2 -2
  44. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +223 -117
  45. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +260 -242
  46. package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +2 -2
  47. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +4 -4
  48. package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +1 -2
  49. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +3 -3
  50. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +3 -3
  51. package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  52. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +85 -8
  53. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +148 -8
  54. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  55. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +26 -23
  56. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  57. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +15 -2
  58. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +4 -2
  59. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +77 -52
  60. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +2 -1
  61. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +9 -0
  62. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +6 -6
  63. package/bin/exiftool_files/lib/Image/ExifTool.pm +204 -63
  64. package/bin/exiftool_files/lib/Image/ExifTool.pod +118 -94
  65. package/package.json +5 -5
@@ -26,6 +26,7 @@ sub RemoveNewValuesForGroup($$);
26
26
  sub GetWriteGroup1($$);
27
27
  sub Sanitize($$);
28
28
  sub ConvInv($$$$$;$$);
29
+ sub PushValue($$$;$);
29
30
 
30
31
  my $loadedAllTables; # flag indicating we loaded all tables
31
32
  my $advFmtSelf; # ExifTool object during evaluation of advanced formatting expr
@@ -136,12 +137,12 @@ my %rawType = (
136
137
  # 1) these names must either exist in %dirMap, or be translated in InitWriteDirs())
137
138
  # 2) any dependencies must be added to %excludeGroups
138
139
  my @delGroups = qw(
139
- Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11
140
- APP12 APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix
141
- FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD IPTC
142
- ItemList JFIF Jpeg2000 JUMBF Keys MakerNotes Meta MetaIFD Microsoft MIE MPF
143
- NikonApp NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs
144
- 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-*
145
146
  );
146
147
  # family 2 group names that we can delete
147
148
  my @delGroup2 = qw(
@@ -226,7 +227,7 @@ my %allFam0 = (
226
227
 
227
228
  my @writableMacOSTags = qw(
228
229
  FileCreateDate MDItemFinderComment MDItemFSCreationDate MDItemFSLabel MDItemUserTags
229
- XAttrQuarantine
230
+ XAttrQuarantine XAttrMDItemWhereFroms
230
231
  );
231
232
 
232
233
  # min/max values for integer formats
@@ -1260,7 +1261,7 @@ sub SetNewValuesFromFile($$;@)
1260
1261
  }
1261
1262
  # expand shortcuts
1262
1263
  @setTags and ExpandShortcuts(\@setTags);
1263
- my $srcExifTool = new Image::ExifTool;
1264
+ my $srcExifTool = Image::ExifTool->new;
1264
1265
  # set flag to indicate we are being called from inside SetNewValuesFromFile()
1265
1266
  $$srcExifTool{TAGS_FROM_FILE} = 1;
1266
1267
  # synchronize and increment the file sequence number
@@ -1295,6 +1296,7 @@ sub SetNewValuesFromFile($$;@)
1295
1296
  FastScan => $$options{FastScan},
1296
1297
  Filter => $$options{Filter},
1297
1298
  FixBase => $$options{FixBase},
1299
+ Geolocation => $$options{Geolocation},
1298
1300
  GlobalTimeShift => $$options{GlobalTimeShift},
1299
1301
  HexTagIDs => $$options{HexTagIDs},
1300
1302
  IgnoreMinorErrors=>$$options{IgnoreMinorErrors},
@@ -1582,7 +1584,7 @@ SET: foreach $set (@setList) {
1582
1584
  my $opts = $$set[3];
1583
1585
  # handle expressions
1584
1586
  if ($$opts{EXPR}) {
1585
- my $val = $srcExifTool->InsertTagValues(\@tags, $$set[1], 'Error');
1587
+ my $val = $srcExifTool->InsertTagValues($$set[1], \@tags, 'Error');
1586
1588
  my $err = $$srcExifTool{VALUE}{Error};
1587
1589
  if ($err) {
1588
1590
  # pass on any error as a warning unless it is suppressed
@@ -2180,7 +2182,7 @@ sub SetSystemTags($$)
2180
2182
  $result = $res if $res == 1 or not $result;
2181
2183
  last;
2182
2184
  } elsif ($tag ne 'FileCreateDate') {
2183
- $self->WarnOnce('Can only set MDItem tags on OS X');
2185
+ $self->WarnOnce('Can only set MDItem tags on MacOS');
2184
2186
  last;
2185
2187
  }
2186
2188
  }
@@ -2432,7 +2434,7 @@ sub WriteInfo($$;$$)
2432
2434
  #
2433
2435
  until ($$self{VALUE}{Error}) {
2434
2436
  # create random access file object (disable seek test in case of straight copy)
2435
- $raf or $raf = new File::RandomAccess($inRef, 1);
2437
+ $raf or $raf = File::RandomAccess->new($inRef, 1);
2436
2438
  $raf->BinMode();
2437
2439
  if ($numNew == $numPseudo) {
2438
2440
  $rtnVal = 1;
@@ -2703,7 +2705,7 @@ sub GetAllTags(;$)
2703
2705
  my (%allTags, @groups);
2704
2706
  @groups = split ':', $group if $group;
2705
2707
 
2706
- my $et = new Image::ExifTool;
2708
+ my $et = Image::ExifTool->new;
2707
2709
  LoadAllTables(); # first load all our tables
2708
2710
  my @tableNames = keys %allTables;
2709
2711
 
@@ -2748,7 +2750,7 @@ sub GetWritableTags(;$)
2748
2750
  my (%writableTags, @groups);
2749
2751
  @groups = split ':', $group if $group;
2750
2752
 
2751
- my $et = new Image::ExifTool;
2753
+ my $et = Image::ExifTool->new;
2752
2754
  LoadAllTables();
2753
2755
  my @tableNames = keys %allTables;
2754
2756
 
@@ -3124,11 +3126,37 @@ Conv: for (;;) {
3124
3126
  return($val, $err);
3125
3127
  }
3126
3128
 
3129
+ #------------------------------------------------------------------------------
3130
+ # Dereference value and push onto list
3131
+ # Inputs: 0) ExifTool ref, 1) value, 2) list ref, 3) flag to push MissingTagValue for undef value
3132
+ sub PushValue($$$;$)
3133
+ {
3134
+ local $_;
3135
+ my ($self, $val, $list, $missing) = @_;
3136
+ if (ref $val eq 'ARRAY' and ref $$val[0] ne 'HASH') {
3137
+ $self->PushValue($_, $list, $missing) foreach @$val;
3138
+ } elsif (ref $val eq 'SCALAR') {
3139
+ if ($$self{OPTIONS}{Binary} or $$val =~ /^Binary data/) {
3140
+ push @$list, $$val;
3141
+ } else {
3142
+ push @$list, 'Binary data ' . length($$val) . ' bytes';
3143
+ }
3144
+ } elsif (ref $val eq 'HASH' or ref $val eq 'ARRAY') {
3145
+ require 'Image/ExifTool/XMPStruct.pl';
3146
+ push @$list, Image::ExifTool::XMP::SerializeStruct($self, $val);
3147
+ } elsif (not defined $val) {
3148
+ my $mval = $$self{OPTIONS}{MissingTagValue};
3149
+ push @$list, $mval if $missing and defined $mval;
3150
+ } else {
3151
+ push @$list, $val;
3152
+ }
3153
+ }
3154
+
3127
3155
  #------------------------------------------------------------------------------
3128
3156
  # Convert tag names to values or variables in a string
3129
3157
  # (eg. '${EXIF:ISO}x $$' --> '100x $' without hash ref, or "$info{'EXIF:ISO'}x $" with)
3130
- # Inputs: 0) ExifTool object ref, 1) reference to list of found tags
3131
- # 2) string with embedded tag names, 3) Options:
3158
+ # Inputs: 0) ExifTool object ref, 1) string with embedded tag names,
3159
+ # 2) reference to list of found tags or undef to use FOUND_TAGS, 3) Options:
3132
3160
  # undef - set missing tags to ''
3133
3161
  # 'Error' - issue minor error on missing tag (and return undef)
3134
3162
  # 'Warn' - issue minor warning on missing tag (and return undef)
@@ -3145,20 +3173,22 @@ Conv: for (;;) {
3145
3173
  # - advanced feature allows Perl expressions inside braces (eg. '${model;tr/ //d}')
3146
3174
  # - an error/warning in an advanced expression ("${TAG;EXPR}") generates an error
3147
3175
  # if option set to 'Error', or a warning otherwise
3148
- sub InsertTagValues($$$;$$$)
3176
+ sub InsertTagValues($$;$$$$)
3149
3177
  {
3150
3178
  local $_;
3151
- my ($self, $foundTags, $line, $opt, $docGrp, $cache) = @_;
3179
+ my ($self, $line, $foundTags, $opt, $docGrp, $cache) = @_;
3152
3180
  my $rtnStr = '';
3153
3181
  my ($docNum, $tag);
3182
+
3154
3183
  if ($docGrp) {
3155
3184
  $docNum = $docGrp =~ /(\d+)$/ ? $1 : 0;
3156
3185
  } else {
3157
3186
  undef $cache; # no cache if no document groups
3158
3187
  }
3188
+ $foundTags or $foundTags = $$self{FOUND_TAGS} || [];
3159
3189
  while ($line =~ s/(.*?)\$(\{\s*)?([-\w]*\w|\$|\/)//s) {
3160
3190
  my ($pre, $bra, $var) = ($1, $2, $3);
3161
- my (@tags, $val, $tg, @val, $type, $expr, $didExpr, $level, $asList);
3191
+ my (@tags, $tg, $val, @val, $type, $expr, $didExpr, $level, $asList);
3162
3192
  # "$$" represents a "$" symbol, and "$/" is a newline
3163
3193
  if ($var eq '$' or $var eq '/') {
3164
3194
  $line =~ s/^\s*\}// if $bra;
@@ -3261,15 +3291,24 @@ sub InsertTagValues($$$;$$$)
3261
3291
  } elsif (defined $$et{OPTIONS}{UserParam}{$lcTag}) {
3262
3292
  $val = $$et{OPTIONS}{UserParam}{$lcTag};
3263
3293
  } elsif ($tag =~ /(.*):(.+)/) {
3264
- my $group;
3294
+ my ($group, @matches);
3265
3295
  ($group, $tag) = ($1, $2);
3266
- if (lc $tag eq 'all') {
3267
- # see if any tag from the specified group exists
3268
- my $match = $et->GroupMatches($group, $fileTags);
3269
- $val = $match ? 1 : 0;
3296
+ # join values of all matching tags if "All" group is used
3297
+ # (and remove "All" from group prefix)
3298
+ if ($group =~ s/(^|:)(all|\*)(:|$)/$1 and $3/ei) {
3299
+ if (lc $tag eq 'all') {
3300
+ @matches = $group ? $et->GroupMatches($group, $fileTags) : @$fileTags;
3301
+ } else {
3302
+ @matches = grep /^$tag(\s|$)/i, @$fileTags;
3303
+ @matches = $et->GroupMatches($group, \@matches) if $group;
3304
+ }
3305
+ $self->PushValue(scalar $et->GetValue($_, $type), \@val) foreach @matches;
3306
+ } elsif (lc $tag eq 'all') {
3307
+ # return "1" if any tag from the specified group exists
3308
+ $val = $et->GroupMatches($group, $fileTags) ? 1 : 0;
3270
3309
  } else {
3271
3310
  # find the specified tag
3272
- my @matches = grep /^$tag(\s|$)/i, @$fileTags;
3311
+ @matches = grep /^$tag(\s|$)/i, @$fileTags;
3273
3312
  @matches = $et->GroupMatches($group, \@matches);
3274
3313
  foreach $tg (@matches) {
3275
3314
  if (defined $val and $tg =~ / \((\d+)\)$/) {
@@ -3298,31 +3337,15 @@ sub InsertTagValues($$$;$$$)
3298
3337
  }
3299
3338
  }
3300
3339
  $self->Options(ListJoin => $oldListJoin) if $asList;
3301
- if (ref $val eq 'ARRAY') {
3302
- push @val, @$val;
3303
- undef $val;
3304
- last unless @tags;
3305
- } elsif (ref $val eq 'SCALAR') {
3306
- if ($$self{OPTIONS}{Binary} or $$val =~ /^Binary data/) {
3307
- $val = $$val;
3308
- } else {
3309
- $val = 'Binary data ' . length($$val) . ' bytes';
3310
- }
3311
- } elsif (ref $val eq 'HASH') {
3312
- require 'Image/ExifTool/XMPStruct.pl';
3313
- $val = Image::ExifTool::XMP::SerializeStruct($self, $val);
3314
- } elsif (not defined $val) {
3315
- $val = $$self{OPTIONS}{MissingTagValue} if $asList;
3316
- }
3317
- last unless @tags;
3318
- push @val, $val if defined $val;
3340
+ $self->PushValue($val, \@val, $asList);
3319
3341
  undef $val;
3342
+ last unless @tags;
3320
3343
  }
3321
3344
  if (@val) {
3322
- push @val, $val if defined $val;
3345
+ $self->PushValue($val, \@val) if defined $val;
3323
3346
  $val = join $$self{OPTIONS}{ListSep}, @val;
3324
- } else {
3325
- push @val, $val if defined $val; # (so the eval has access to @val if required)
3347
+ } elsif (defined $val) {
3348
+ $self->PushValue($val, \@val); # (so the eval has access to @val if required)
3326
3349
  }
3327
3350
  # evaluate advanced formatting expression if given (eg. "${TAG;EXPR}")
3328
3351
  if (defined $expr and defined $val) {
@@ -3331,7 +3354,7 @@ sub InsertTagValues($$$;$$$)
3331
3354
  $advFmtSelf = $self;
3332
3355
  if ($asList) {
3333
3356
  foreach (@val) {
3334
- #### eval advanced formatting expression ($_, $self, @val, $advFmtSelf)
3357
+ #### eval advanced formatting expression ($_, $self, @val, $tag, $advFmtSelf)
3335
3358
  eval $expr;
3336
3359
  $@ and $evalWarning = $@;
3337
3360
  }
@@ -3340,7 +3363,7 @@ sub InsertTagValues($$$;$$$)
3340
3363
  $val = @val ? join $$self{OPTIONS}{ListSep}, @val : undef;
3341
3364
  } else {
3342
3365
  $_ = $val;
3343
- #### eval advanced formatting expression ($_, $self, @val, $advFmtSelf)
3366
+ #### eval advanced formatting expression ($_, $self, @val, $tag, $advFmtSelf)
3344
3367
  eval $expr;
3345
3368
  $@ and $evalWarning = $@;
3346
3369
  $val = ref $_ eq 'ARRAY' ? join($$self{OPTIONS}{ListSep}, @$_): $_;
@@ -3395,6 +3418,7 @@ sub InsertTagValues($$$;$$$)
3395
3418
  #------------------------------------------------------------------------------
3396
3419
  # Reformat date/time value in $_ based on specified format string
3397
3420
  # Inputs: 0) date/time format string
3421
+ # Returns: Reformatted date/time string
3398
3422
  sub DateFmt($)
3399
3423
  {
3400
3424
  my $et = bless { OPTIONS => { DateFormat => shift, StrictDate => 1 } };
@@ -3406,6 +3430,7 @@ sub DateFmt($)
3406
3430
  $_ = $et->ConvertDateTime($_);
3407
3431
  defined $_ or warn "Error converting date/time\n";
3408
3432
  $$advFmtSelf{GLOBAL_TIME_OFFSET} = $$et{GLOBAL_TIME_OFFSET} if $shift;
3433
+ return $_;
3409
3434
  }
3410
3435
 
3411
3436
  #------------------------------------------------------------------------------
@@ -3515,7 +3540,7 @@ sub CreateDirectory($$)
3515
3540
  }
3516
3541
  unless ($k32CreateDir) {
3517
3542
  return -1 if defined $k32CreateDir;
3518
- $k32CreateDir = new Win32::API('KERNEL32', 'CreateDirectoryW', 'PP', 'I');
3543
+ $k32CreateDir = Win32::API->new('KERNEL32', 'CreateDirectoryW', 'PP', 'I');
3519
3544
  unless ($k32CreateDir) {
3520
3545
  $self->Warn('Error calling Win32::API::CreateDirectoryW');
3521
3546
  $k32CreateDir = 0;
@@ -6233,7 +6258,7 @@ sub WriteJPEG($$)
6233
6258
  last unless $$editDirs{CIFF};
6234
6259
  my $newData = '';
6235
6260
  my %dirInfo = (
6236
- RAF => new File::RandomAccess($segDataPt),
6261
+ RAF => File::RandomAccess->new($segDataPt),
6237
6262
  OutFile => \$newData,
6238
6263
  );
6239
6264
  require Image::ExifTool::CanonRaw;
@@ -6952,7 +6977,7 @@ sub SetFileTime($$;$$$$)
6952
6977
  }
6953
6978
  unless ($k32SetFileTime) {
6954
6979
  return 0 if defined $k32SetFileTime;
6955
- $k32SetFileTime = new Win32::API('KERNEL32', 'SetFileTime', 'NPPP', 'I');
6980
+ $k32SetFileTime = Win32::API->new('KERNEL32', 'SetFileTime', 'NPPP', 'I');
6956
6981
  unless ($k32SetFileTime) {
6957
6982
  $self->Warn('Error calling Win32::API::SetFileTime');
6958
6983
  $k32SetFileTime = 0;
@@ -7196,7 +7221,7 @@ sub WriteBinaryData($$$)
7196
7221
  $$self{HiddenData} = {
7197
7222
  Offset => $offset,
7198
7223
  Size => $size,
7199
- Fixup => new Image::ExifTool::Fixup,
7224
+ Fixup => Image::ExifTool::Fixup->new,
7200
7225
  Base => $$dirInfo{Base},
7201
7226
  };
7202
7227
  next;
@@ -7205,7 +7230,7 @@ sub WriteBinaryData($$$)
7205
7230
  next unless $$tagInfo{DataTag} eq 'PreviewImage' and $$self{FILE_TYPE} eq 'JPEG';
7206
7231
  my $previewInfo = $$self{PREVIEW_INFO};
7207
7232
  $previewInfo or $previewInfo = $$self{PREVIEW_INFO} = {
7208
- Fixup => new Image::ExifTool::Fixup,
7233
+ Fixup => Image::ExifTool::Fixup->new,
7209
7234
  };
7210
7235
  # set flag indicating we are using short pointers
7211
7236
  $$previewInfo{IsShort} = 1 unless $format eq 'int32u';
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.62';
53
+ $VERSION = '3.63';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3644,6 +3644,7 @@ NoLoop:
3644
3644
  IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
3645
3645
  IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
3646
3646
  NoStruct => 1, # (don't try to build structures since this isn't true XMP)
3647
+ NoBlockSave => 1,# (don't save as a block because we already did this)
3647
3648
  );
3648
3649
  my $oldOrder = GetByteOrder();
3649
3650
  SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
@@ -2191,6 +2191,15 @@ my %sSubVersion = (
2191
2191
  GROUPS => { 0 => 'SVG', 2 => 'Unknown' },
2192
2192
  LANG_INFO => \&GetLangInfo,
2193
2193
  NAMESPACE => undef, # variable namespace
2194
+ 'c2pa:manifest' => {
2195
+ Name => 'JUMBF',
2196
+ Groups => { 0 => 'JUMBF' },
2197
+ RawConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
2198
+ SubDirectory => {
2199
+ TagTable => 'Image::ExifTool::Jpeg2000::Main',
2200
+ ByteOrder => 'BigEndian',
2201
+ },
2202
+ },
2194
2203
  );
2195
2204
 
2196
2205
  #------------------------------------------------------------------------------
@@ -20,7 +20,7 @@ use strict;
20
20
  use vars qw($VERSION $warnString);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
 
23
- $VERSION = '1.30';
23
+ $VERSION = '1.31';
24
24
 
25
25
  sub WarnProc($) { $warnString = $_[0]; }
26
26
 
@@ -367,7 +367,7 @@ sub ProcessRAR($$)
367
367
  # read the header and create new RAF object for reading it
368
368
  my $header;
369
369
  $raf->Read($header, $headSize) == $headSize or last;
370
- my $rafHdr = new File::RandomAccess(\$header);
370
+ my $rafHdr = File::RandomAccess->new(\$header);
371
371
  my $headType = ReadULEB($rafHdr); # get header type
372
372
 
373
373
  if ($headType == 4) { # encryption block
@@ -550,14 +550,14 @@ sub ProcessZIP($$)
550
550
  } elsif (eval { require IO::String }) {
551
551
  # read the whole file into memory (what else can I do?)
552
552
  $raf->Slurp();
553
- $fh = new IO::String ${$raf->{BUFF_PT}};
553
+ $fh = IO::String->new(${$raf->{BUFF_PT}});
554
554
  } else {
555
555
  my $type = $raf->{FILE_PT} ? 'pipe or socket' : 'scalar reference';
556
556
  $et->Warn("Install IO::String to decode compressed ZIP information from a $type");
557
557
  last;
558
558
  }
559
559
  $et->VPrint(1, " --- using Archive::Zip ---\n");
560
- $zip = new Archive::Zip;
560
+ $zip = Archive::Zip->new;
561
561
  # catch all warnings! (Archive::Zip is bad for this)
562
562
  local $SIG{'__WARN__'} = \&WarnProc;
563
563
  my $status = $zip->readFromFileHandle($fh);
@@ -568,8 +568,8 @@ sub ProcessZIP($$)
568
568
  # a failed test with Perl 5.6.2 GNU/Linux 2.6.32-5-686 i686-linux-64int-ld
569
569
  $raf->Seek(0,0);
570
570
  $raf->Slurp();
571
- $fh = new IO::String ${$raf->{BUFF_PT}};
572
- $zip = new Archive::Zip;
571
+ $fh = IO::String->new(${$raf->{BUFF_PT}});
572
+ $zip = Archive::Zip->new;
573
573
  $status = $zip->readFromFileHandle($fh);
574
574
  }
575
575
  if ($status) {