exiftool_vendored 12.85.0 → 12.86.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7358ec4db6649c211751f80b5aa3b036eb822b43a01cd043ad1ea7c4b0a3ebaa
4
- data.tar.gz: 42b5dca7143001edc0d163ac8aa9da3815b2494130728e245a4d531a17ef4cf8
3
+ metadata.gz: 545516d00429f2217884ee7dd4339504e84b836ee2b778fa44707a637bc4184c
4
+ data.tar.gz: a3737fb33959d687603b58ec0062ae907853bbae9bcc856ca10d1ac560368658
5
5
  SHA512:
6
- metadata.gz: fa9b04d5c595bacd9e007c80eb11c171f7f00b22c9de6c5c1b7615b776a9d6b74bbab4d21c7bb38b75b6dfd5ec50fc108a4e3392190fadabc68cfdf54f31be1d
7
- data.tar.gz: 2651bb2da28b582eacc78167dec78d9d512661351cc3f8c0c748e85e420ddd773a8f095858af4d46668f7b20da8d47cb826561c3d06e3035f00b52a640650055
6
+ metadata.gz: a88fe3c5bad722bbc5e7bf0e0bd07edf8f4dc4707ed6af4895db6eaeacb0a28f14bd1ed72ad90dbfe43fb52eb86c9b569ac858ab5491c3910dfbe79d84cff75a
7
+ data.tar.gz: c9fbb0c789ce33da188841f7d0e37de4fcfac563508941fd1ebcaace1d2c6d074c9d8b9bf0e6c5a570aba8601db0b361c6e66b0243923d1fe54ee918509d3cce
data/bin/Changes CHANGED
@@ -7,6 +7,17 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ June 7, 2024 - Version 12.86
11
+
12
+ - Added a new value for a couple of Olympus tags (thanks Herb)
13
+ - Improved handling of ID3 user-defined tags
14
+ - Decode all JPEG segments from RICO box in Ricoh MOV videos
15
+ - Decode a few new values for some tags written by Canon EOS R cameras
16
+ - Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
17
+ some newer models
18
+ - Fixed issue when writing IPTC date tags with a date/time value containing
19
+ subseconds with 4 or more digits
20
+
10
21
  May 21, 2024 - Version 12.85
11
22
 
12
23
  - Added GeolocationFeatureType tag
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.85"
53
+ "version" : "12.86"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: 0
32
32
  requires:
33
33
  perl: 5.004
34
- version: 12.85
34
+ version: 12.86
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-12.85.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.85
112
+ gzip -dc Image-ExifTool-12.86.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.86
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -293,6 +293,11 @@
293
293
  NewXMPxxxStructX => { Name => 'SomeOtherName', Flat => 1 },
294
294
  );
295
295
 
296
+ # the namespace may be registered so ExifTool generates the expected family 1
297
+ # group names when reading if the UserDefined namespace uses a different prefix
298
+ require Image::ExifTool::XMP;
299
+ Image::ExifTool::XMP::RegisterNamespace(\%Image::ExifTool::UserDefined::xxx);
300
+
296
301
  # Adding a new MIE group requires a few extra definitions
297
302
  use Image::ExifTool::MIE;
298
303
  %Image::ExifTool::UserDefined::MIETest = (
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.85';
14
+ my $version = '12.86';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -5678,7 +5678,7 @@ with this command:
5678
5678
 
5679
5679
  produces output like this:
5680
5680
 
5681
- -- Generated by ExifTool 12.85 --
5681
+ -- Generated by ExifTool 12.86 --
5682
5682
  File: a.jpg - 2003:10:31 15:44:19
5683
5683
  (f/5.6, 1/60s, ISO 100)
5684
5684
  File: b.jpg - 2006:05:23 11:57:38
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.56';
38
+ $VERSION = '3.57';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -600,7 +600,8 @@ running ExifTool the old information may be removed permanently using the
600
600
  DNG => q{
601
601
  The main DNG tags are found in the EXIF table. The tables below define only
602
602
  information found within structures of these main DNG tag values. See
603
- L<http://www.adobe.com/products/dng/> for the official DNG specification.
603
+ L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
604
+ DNG specification.
604
605
  },
605
606
  MPEG => q{
606
607
  The MPEG format doesn't specify any file-level meta information. In lieu of
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.75';
91
+ $VERSION = '4.76';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -9001,20 +9001,32 @@ my %filterConv = (
9001
9001
  4 => 'Focus High Priority',
9002
9002
  },
9003
9003
  },
9004
- 7 => { #52
9004
+ 7 => [{ #forum16068
9005
9005
  Name => 'USMLensElectronicMF',
9006
+ Condition => '$$self{Model} =~ /EOS R\d/',
9007
+ Notes => 'EOS R models',
9008
+ PrintConv => {
9009
+ 0 => 'Disable After One-Shot',
9010
+ 1 => 'One-Shot -> Enabled',
9011
+ 2 => 'One-Shot -> Enabled (magnify)',
9012
+ 3 => 'Disable in AF Mode',
9013
+ },
9014
+ },{ #52
9015
+ Name => 'USMLensElectronicMF',
9016
+ Notes => 'Other models',
9006
9017
  PrintConv => {
9007
9018
  0 => 'Enable After AF',
9008
9019
  1 => 'Disable After AF',
9009
9020
  2 => 'Disable in AF Mode',
9010
9021
  },
9011
- },
9022
+ }],
9012
9023
  8 => { #52
9013
9024
  Name => 'AFAssistBeam',
9014
9025
  PrintConv => {
9015
9026
  0 => 'Enable',
9016
9027
  1 => 'Disable',
9017
9028
  2 => 'IR AF Assist Beam Only',
9029
+ 3 => 'LED AF Assist Beam Only', #forum16068
9018
9030
  },
9019
9031
  },
9020
9032
  9 => { #52
@@ -9113,6 +9125,19 @@ my %filterConv = (
9113
9125
  2 => 'Auto', #PH (1DXmkII)
9114
9126
  },
9115
9127
  },
9128
+ 20 => { #forum16068
9129
+ Name => 'SubjectToDetect',
9130
+ PrintConv => {
9131
+ 0 => 'None',
9132
+ 1 => 'People',
9133
+ 2 => 'Animals',
9134
+ 3 => 'Vehicles',
9135
+ },
9136
+ },
9137
+ 24 => { #forum16068
9138
+ Name => 'EyeDetection',
9139
+ PrintConv => \%offOn,
9140
+ },
9116
9141
  );
9117
9142
 
9118
9143
  # RAW burst mode info (MakerNotes tag 0x403f) (ref 25)
@@ -1212,9 +1212,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1212
1212
  4 => 'Emphasize Center',
1213
1213
  },
1214
1214
  },
1215
+ 0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
1215
1216
  # 0x20800 - fmt=1: 0
1216
1217
  # 0x20801 - fmt=1: 0
1217
- 0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
1218
1218
  0x20900 => 'ColorHue',
1219
1219
  0x20901 => 'SaturationAdj',
1220
1220
  0x20910 => 'RedHSL',
@@ -1282,6 +1282,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1282
1282
  # 0xf0521 - DLO data
1283
1283
  # 0xf0520 - DLO data
1284
1284
  # 0xf0530 - created when dust delete data applied (4 bytes, all zero)
1285
+ # 0xf0561 - 1932 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1286
+ # 0xf0562 - 1596 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1287
+ # 0xf0566 - 1520 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
1285
1288
  # 0xf0600 - fmt=253 (2308 bytes, JPG images)
1286
1289
  # 0xf0601 - fmt=253 (2308 bytes, JPG images)
1287
1290
  # 0x1ff52c - values: 129,130,132 (related to custom picture style somehow)
@@ -18,7 +18,7 @@ use strict;
18
18
  use vars qw($VERSION);
19
19
  use Image::ExifTool qw(:DataAccess :Utils);
20
20
 
21
- $VERSION = '1.61';
21
+ $VERSION = '1.62';
22
22
 
23
23
  sub ProcessID3v2($$$);
24
24
  sub ProcessPrivate($$$);
@@ -68,6 +68,12 @@ my %dateTimeConv = (
68
68
  PrintConv => '$self->ConvertDateTime($val)',
69
69
  );
70
70
 
71
+ # patch for names of user-defined tags which don't automatically generate very well
72
+ my %userTagName = (
73
+ ALBUMARTISTSORT => 'AlbumArtistSort',
74
+ ASIN => 'ASIN',
75
+ );
76
+
71
77
  # This table is just for documentation purposes
72
78
  %Image::ExifTool::ID3::Main = (
73
79
  VARS => { NO_ID => 1 },
@@ -103,14 +109,6 @@ my %dateTimeConv = (
103
109
  },
104
110
  );
105
111
 
106
- %Image::ExifTool::ID3::UserDefined = (
107
- GROUPS => { 1 => 'UserDefined', 2 => 'Other' },
108
- NOTES => q{
109
- ID3 user-defined text and URL tags will be dynamically added to this table
110
- by name when found.
111
- },
112
- );
113
-
114
112
  # Lyrics3 tags (ref 4)
115
113
  %Image::ExifTool::ID3::Lyrics3 = (
116
114
  GROUPS => { 1 => 'Lyrics3', 2 => 'Audio' },
@@ -501,7 +499,7 @@ my %genre = (
501
499
  TT2 => 'Title',
502
500
  TT3 => 'Subtitle',
503
501
  TXT => 'Lyricist',
504
- TXX => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::UserDefined' } },
502
+ TXX => 'UserDefinedText',
505
503
  TYE => { Name => 'Year', Groups => { 2 => 'Time' } },
506
504
  ULT => 'Lyrics',
507
505
  WAF => 'FileURL',
@@ -510,7 +508,7 @@ my %genre = (
510
508
  WCM => 'CommercialURL',
511
509
  WCP => { Name => 'CopyrightURL', Groups => { 2 => 'Author' } },
512
510
  WPB => 'PublisherURL',
513
- WXX => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::UserDefined' } },
511
+ WXX => 'UserDefinedURL',
514
512
  # the following written by iTunes 10.5 (ref PH)
515
513
  RVA => 'RelativeVolumeAdjustment',
516
514
  TST => 'TitleSortOrder',
@@ -613,7 +611,7 @@ my %id3v2_common = (
613
611
  TRSO => 'InternetRadioStationOwner',
614
612
  TSRC => 'ISRC', # (international standard recording code)
615
613
  TSSE => 'EncoderSettings',
616
- TXXX => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::UserDefined' } },
614
+ TXXX => 'UserDefinedText',
617
615
  # UFID => 'UniqueFileID', (not extracted because it is long and nasty and not very useful)
618
616
  USER => 'TermsOfUse',
619
617
  USLT => 'Lyrics',
@@ -625,7 +623,7 @@ my %id3v2_common = (
625
623
  WORS => 'InternetRadioStationURL',
626
624
  WPAY => 'PaymentURL',
627
625
  WPUB => 'PublisherURL',
628
- WXXX => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::UserDefined' } },
626
+ WXXX => 'UserDefinedURL',
629
627
  #
630
628
  # non-standard frames
631
629
  #
@@ -879,6 +877,19 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::ID3');
879
877
  }
880
878
  }
881
879
 
880
+ #------------------------------------------------------------------------------
881
+ # Make tag name for user-defined tag
882
+ # Inputs: 0) User defined tag description
883
+ # Returns: Tag name
884
+ sub MakeTagName($)
885
+ {
886
+ my $name = shift;
887
+ return $userTagName{$name} if $userTagName{$name};
888
+ $name = ucfirst(lc $name) unless $name =~ /[a-z]/; # convert all uppercase to mixed case
889
+ $name =~ s/([a-z])[_ ]([a-z])/$1\U$2/g;
890
+ return Image::ExifTool::MakeTagName($name);
891
+ }
892
+
882
893
  #------------------------------------------------------------------------------
883
894
  # Convert ID3v1 text to exiftool character set
884
895
  # Inputs: 0) ExifTool object ref, 1) text string
@@ -1255,39 +1266,34 @@ sub ProcessID3v2($$$)
1255
1266
  # two encoded strings separated by a null
1256
1267
  my @vals = DecodeString($et, $val);
1257
1268
  foreach (0..1) { $vals[$_] = '' unless defined $vals[$_]; }
1258
- $vals[0] .= ' ' if $Image::ExifTool::specialTags{$vals[0]};
1259
- my $tbl = GetTagTable('Image::ExifTool::ID3::UserDefined');
1260
- unless (defined $$tbl{$vals[0]}) {
1261
- my $name = Image::ExifTool::MakeTagName($vals[0]);
1262
- AddTagToTable($tbl, $vals[0], $name, 1);
1269
+ if (length $vals[0]) {
1270
+ $id .= "_$vals[0]";
1271
+ $tagInfo = $$tagTablePtr{$id} || AddTagToTable($tagTablePtr, $id, MakeTagName($vals[0]));
1263
1272
  }
1264
- $et->HandleTag($tbl, $vals[0], $vals[1]);
1265
- next;
1273
+ $val = $vals[1];
1266
1274
  } elsif ($id =~ /^T/ or $id =~ /^(IPL|IPLS|GP1|MVI|MVN)$/) {
1267
1275
  $val = DecodeString($et, $val);
1268
1276
  } elsif ($id =~ /^(WXX|WXXX)$/) {
1269
1277
  # one encoded string and one Latin string separated by a null
1270
1278
  my $enc = unpack('C', $val);
1271
- my $url;
1279
+ my ($tag, $url);
1272
1280
  if ($enc == 1 or $enc == 2) {
1273
- ($val, $url) = ($val =~ /^(.(?:..)*?)\0\0(.*)/s);
1281
+ ($tag, $url) = ($tag =~ /^(.(?:..)*?)\0\0(.*)/s);
1274
1282
  } else {
1275
- ($val, $url) = ($val =~ /^(..*?)\0(.*)/s);
1283
+ ($tag, $url) = ($tag =~ /^(..*?)\0(.*)/s);
1276
1284
  }
1277
- unless (defined $val and defined $url) {
1285
+ unless (defined $tag and defined $url) {
1278
1286
  $et->Warn("Invalid $id frame value");
1279
1287
  next;
1280
1288
  }
1281
- $val = DecodeString($et, $val);
1282
- $url =~ s/\0.*//s;
1283
- $val .= '_URL';
1284
- my $tbl = GetTagTable('Image::ExifTool::ID3::UserDefined');
1285
- unless (defined $$tbl{$val}) {
1286
- my $name = Image::ExifTool::MakeTagName($val);
1287
- AddTagToTable($tbl, $val, $name, 1);
1289
+ $tag = DecodeString($et, $tag);
1290
+ if (length $tag) {
1291
+ $id .= "_$tag";
1292
+ $tag .= '_URL' unless $tag =~ /url/i;
1293
+ $tagInfo = $$tagTablePtr{$id} || AddTagToTable($tagTablePtr, $id, MakeTagName($tag));
1288
1294
  }
1289
- $et->HandleTag($tbl, $val, $url);
1290
- next;
1295
+ $url =~ s/\0.*//s;
1296
+ $val = $url;
1291
1297
  } elsif ($id =~ /^W/) {
1292
1298
  $val =~ s/\0.*//s; # truncate at null
1293
1299
  } elsif ($id =~ /^(COM|COMM|ULT|USLT)$/) {
@@ -1935,6 +1935,7 @@ my %indexInfo = (
1935
1935
  3 => 'Trains',
1936
1936
  4 => 'Birds',
1937
1937
  5 => 'Dogs & Cats',
1938
+ 6 => 'Human', #forum16072
1938
1939
  },{
1939
1940
  0 => 'Object Not Found',
1940
1941
  1 => 'Object Found',
@@ -2842,24 +2843,32 @@ my %indexInfo = (
2842
2843
  RawConv => '$val=~s/\0+$//; $val', # (may be null terminated)
2843
2844
  Count => 4,
2844
2845
  },
2845
- 0x100 => { Name => 'WB_RBLevels', Writable => 'int16u', Count => 2 }, #6
2846
+ 0x100 => { #6
2847
+ Name => 'WB_RBLevels',
2848
+ Writable => 'int16u',
2849
+ Notes => q{
2850
+ These tags store 2 values, red and blue levels, for some models, but 4
2851
+ values, presumably RBGG levels, for other models
2852
+ },
2853
+ Count => -1,
2854
+ }, #6
2846
2855
  # 0x101 - in-camera AutoWB unless it is all 0's or all 256's (ref IB)
2847
- 0x102 => { Name => 'WB_RBLevels3000K', Writable => 'int16u', Count => 2 }, #11
2848
- 0x103 => { Name => 'WB_RBLevels3300K', Writable => 'int16u', Count => 2 }, #11
2849
- 0x104 => { Name => 'WB_RBLevels3600K', Writable => 'int16u', Count => 2 }, #11
2850
- 0x105 => { Name => 'WB_RBLevels3900K', Writable => 'int16u', Count => 2 }, #11
2851
- 0x106 => { Name => 'WB_RBLevels4000K', Writable => 'int16u', Count => 2 }, #11
2852
- 0x107 => { Name => 'WB_RBLevels4300K', Writable => 'int16u', Count => 2 }, #11
2853
- 0x108 => { Name => 'WB_RBLevels4500K', Writable => 'int16u', Count => 2 }, #11
2854
- 0x109 => { Name => 'WB_RBLevels4800K', Writable => 'int16u', Count => 2 }, #11
2855
- 0x10a => { Name => 'WB_RBLevels5300K', Writable => 'int16u', Count => 2 }, #11
2856
- 0x10b => { Name => 'WB_RBLevels6000K', Writable => 'int16u', Count => 2 }, #11
2857
- 0x10c => { Name => 'WB_RBLevels6600K', Writable => 'int16u', Count => 2 }, #11
2858
- 0x10d => { Name => 'WB_RBLevels7500K', Writable => 'int16u', Count => 2 }, #11
2859
- 0x10e => { Name => 'WB_RBLevelsCWB1', Writable => 'int16u', Count => 2 }, #11
2860
- 0x10f => { Name => 'WB_RBLevelsCWB2', Writable => 'int16u', Count => 2 }, #11
2861
- 0x110 => { Name => 'WB_RBLevelsCWB3', Writable => 'int16u', Count => 2 }, #11
2862
- 0x111 => { Name => 'WB_RBLevelsCWB4', Writable => 'int16u', Count => 2 }, #11
2856
+ 0x102 => { Name => 'WB_RBLevels3000K', Writable => 'int16u', Count => -1 }, #11
2857
+ 0x103 => { Name => 'WB_RBLevels3300K', Writable => 'int16u', Count => -1 }, #11
2858
+ 0x104 => { Name => 'WB_RBLevels3600K', Writable => 'int16u', Count => -1 }, #11
2859
+ 0x105 => { Name => 'WB_RBLevels3900K', Writable => 'int16u', Count => -1 }, #11
2860
+ 0x106 => { Name => 'WB_RBLevels4000K', Writable => 'int16u', Count => -1 }, #11
2861
+ 0x107 => { Name => 'WB_RBLevels4300K', Writable => 'int16u', Count => -1 }, #11
2862
+ 0x108 => { Name => 'WB_RBLevels4500K', Writable => 'int16u', Count => -1 }, #11
2863
+ 0x109 => { Name => 'WB_RBLevels4800K', Writable => 'int16u', Count => -1 }, #11
2864
+ 0x10a => { Name => 'WB_RBLevels5300K', Writable => 'int16u', Count => -1 }, #11
2865
+ 0x10b => { Name => 'WB_RBLevels6000K', Writable => 'int16u', Count => -1 }, #11
2866
+ 0x10c => { Name => 'WB_RBLevels6600K', Writable => 'int16u', Count => -1 }, #11
2867
+ 0x10d => { Name => 'WB_RBLevels7500K', Writable => 'int16u', Count => -1 }, #11
2868
+ 0x10e => { Name => 'WB_RBLevelsCWB1', Writable => 'int16u', Count => -1 }, #11
2869
+ 0x10f => { Name => 'WB_RBLevelsCWB2', Writable => 'int16u', Count => -1 }, #11
2870
+ 0x110 => { Name => 'WB_RBLevelsCWB3', Writable => 'int16u', Count => -1 }, #11
2871
+ 0x111 => { Name => 'WB_RBLevelsCWB4', Writable => 'int16u', Count => -1 }, #11
2863
2872
  0x113 => { Name => 'WB_GLevel3000K', Writable => 'int16u' }, #11
2864
2873
  0x114 => { Name => 'WB_GLevel3300K', Writable => 'int16u' }, #11
2865
2874
  0x115 => { Name => 'WB_GLevel3600K', Writable => 'int16u' }, #11
@@ -3246,6 +3255,7 @@ my %indexInfo = (
3246
3255
  3 => 'Trains',
3247
3256
  4 => 'Birds',
3248
3257
  5 => 'Dogs & Cats',
3258
+ 6 => 'Human', #forum16072
3249
3259
  },{
3250
3260
  0 => 'Face Priority',
3251
3261
  1 => 'Target Priority',
@@ -503,6 +503,11 @@ my %eeBox2 = (
503
503
  # image types in AVIF and HEIC files
504
504
  my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
505
505
 
506
+ my %userDefined = (
507
+ ALBUMARTISTSORT => 'AlbumArtistSort',
508
+ ASIN => 'ASIN',
509
+ );
510
+
506
511
  # QuickTime atoms
507
512
  %Image::ExifTool::QuickTime::Main = (
508
513
  PROCESS_PROC => \&ProcessMOV,
@@ -2336,10 +2341,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2336
2341
  Name => 'RicohInfo',
2337
2342
  Condition => '$$valPt =~ /^\xff\xe1..Exif\0\0/s',
2338
2343
  SubDirectory => {
2339
- TagTable => 'Image::ExifTool::Exif::Main',
2340
- ProcessProc => \&Image::ExifTool::ProcessTIFF,
2341
- Start => 10,
2342
- Base => '$start',
2344
+ TagTable => 'Image::ExifTool::JPEG::Main',
2345
+ ProcessProc => \&Image::ExifTool::ProcessJPEG,
2343
2346
  }
2344
2347
  },
2345
2348
  RTHU => { #PH (GR)
@@ -979,6 +979,7 @@ my %formatMinMax = (
979
979
  # 0x0800 - unknown (29 bytes) (contains already-extracted EmbeddedAudioFileName)
980
980
  # 0x0830-name - seen '1165724808.pre'
981
981
  # 0x0830 - unknown (164004 bytes)
982
+ # 0x08c0-name - seen 'Auto_Enhance_Info' #forum16086
982
983
  # 0x08d0-name - seen 'Interactive_Panorama_Info'
983
984
  # 0x08d0 - unknown (7984 bytes)
984
985
  # 0x08e0-name - seen 'Panorama_Shot_Info'
@@ -988,6 +989,8 @@ my %formatMinMax = (
988
989
  # 0x0910 - string, seen 'Front_Cam_Selfie_Info'
989
990
  # 0x09e0-name - seen 'Burst_Shot_Info'
990
991
  # 0x09e0 - string, seen '489489125'
992
+ # 0x09e1-name - seen 'BurstShot_Best_Photo_Info' #forum16086
993
+ # 0x09f0-name - seen 'Pro_Mode_Info' #forum16086
991
994
  # 0x0a01-name - seen 'Image_UTC_Data'
992
995
  '0x0a01' => { #forum7161
993
996
  Name => 'TimeStamp',
@@ -999,6 +1002,7 @@ my %formatMinMax = (
999
1002
  '0x0a20' => { Name => 'DualCameraImage', Groups => { 2 => 'Preview' }, Binary => 1 },
1000
1003
  '0x0a30-name' => 'EmbeddedVideoType', # ("MotionPhoto_Data")
1001
1004
  '0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
1005
+ # 0x0a41-name - seen 'BackupRestore_Data' #forum16086
1002
1006
  # 0x0aa1-name - seen 'MCC_Data'
1003
1007
  # 0x0aa1 - seen '204','222','234','302','429'
1004
1008
  '0x0aa1' => {
@@ -1254,15 +1258,39 @@ my %formatMinMax = (
1254
1258
  Name => 'DualShotExtra',
1255
1259
  SubDirectory => { TagTable => 'Image::ExifTool::Samsung::DualShotExtra' },
1256
1260
  },
1261
+ # 0x0ab4-name - seen 'DualShot_Core_Info' #forum16086
1257
1262
  # 0x0ac0-name - seen 'ZoomInOut_Info' (SM-N950U)
1258
1263
  # 0x0ac0 - 2048 bytes of interesting stuff including firmware version? (SM-N950U)
1264
+ # 0x0b30-name - seen 'Camera_Sticker_Info' #forum16086
1259
1265
  '0x0b40' => { # (SM-N975X front camera)
1260
1266
  Name => 'SingleShotMeta',
1261
1267
  SubDirectory => { TagTable => 'Image::ExifTool::Samsung::SingleShotMeta' },
1262
1268
  },
1263
1269
  # 0x0b41-name - seen 'SingeShot_DepthMap_1' (Yes, "Singe") (SM-N975X front camera)
1264
1270
  '0x0b41' => { Name => 'SingleShotDepthMap', Binary => 1 },
1265
- # 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data'
1271
+ # 0x0b51-name - seen 'Intelligent_PhotoEditor_Data' #forum16086
1272
+ # 0x0b60-name - seen 'UltraWide_PhotoEditor_Data' #forum16086
1273
+ # 0x0b90-name - seen 'Document_Scan_Info' #forum16086
1274
+ # 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data', 'deco_doodle_bitmap', 'deco_sticker_bitmap', 'deco_text_bitmap'
1275
+ # 0x0ba2-name - seen 'Copy_Available_Edit_Info' #forum16086
1276
+ # 0x0bc0-name - seen 'Single_Relighting_Bokeh_Info' #forum16086
1277
+ # 0x0bd0-name - seen 'Dual_Relighting_Bokeh_Info' #forum16086
1278
+ # 0x0be0-name - seen 'Livefocus_JDM_Info' #forum16086
1279
+ # 0x0bf0-name - seen 'Remaster_Info' #forum16086
1280
+ # 0x0c21-name - seen 'Portrait_Effect_Info' #forum16086
1281
+ # 0x0c51-name - seen 'Samsung_Capture_Info' #forum16086
1282
+ # 0x0c61-name - seen 'Camera_Capture_Mode_Info' #forum16086
1283
+ # 0x0c71-name - seen 'Pro_White_Balance_Info' #forum16086
1284
+ # 0x0c81-name - seen 'Watermark_Info' #forum16086
1285
+ # 0x0cc1-name - seen 'Color_Display_P3' #forum16086
1286
+ # 0x0cd2-name - seen 'Photo_HDR_Info' #forum16086
1287
+ # 0x0ce1-name - seen 'Gallery_DC_Data' #forum16086
1288
+ # 0x0d01-name - seen 'Camera_Scene_Info', 'Camera_Scene_Info2', 'Camera_Scene_Info3' #forum16086
1289
+ # 0x0d11-name - seen 'Video_Snapshot_Info' #forum16086
1290
+ # 0x0d21-name - seen 'Camera_Scene_Info' #forum16086
1291
+ # 0x0d31-name - seen 'Food_Blur_Effect_Info' #forum16086
1292
+ # 0x0d91-name - seen 'PEg_Info' #forum16086
1293
+ # 0x0da1-name - seen 'Captured_App_Info' #forum16086
1266
1294
  # 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
1267
1295
  # 0xa050 - seen 'Jpeg3602D' (Samsung Gear 360)
1268
1296
  # 0x0c81-name - seen 'Watermark_Info'
@@ -2845,6 +2845,7 @@ my %tagLookup = (
2845
2845
  'externalmetadatalink' => { 526 => 'ExternalMetadataLink' },
2846
2846
  'externalsensorbrightnessvalue' => { 343 => 0x311, 346 => 0x311, 347 => 0x311, 350 => 0x3408 },
2847
2847
  'extrainfoversion' => { 440 => 0x1a },
2848
+ 'eyedetection' => { 2 => 0x18 },
2848
2849
  'eyestartaf' => { 187 => 0x40 },
2849
2850
  'fac100per' => { 141 => 0xe94 },
2850
2851
  'fac170per' => { 141 => 0xe93 },
@@ -6716,6 +6717,7 @@ my %tagLookup = (
6716
6717
  'subjectmotion' => { 307 => '78.2', 308 => '78.2', 318 => '78.2', 320 => 0x103, 321 => 0x103, 322 => 0x119 },
6717
6718
  'subjectprogram' => { 184 => 0x22 },
6718
6719
  'subjectreference' => { 134 => 0xc },
6720
+ 'subjecttodetect' => { 2 => 0x14 },
6719
6721
  'sublabels1' => { 524 => [\'TagStructure','TagStructureSubLabels'] },
6720
6722
  'sublabels2' => { 524 => [\'TagStructure','TagStructureSubLabelsSubLabels'] },
6721
6723
  'sublabels3' => { 524 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabels'] },
@@ -12694,8 +12696,6 @@ my %tagExists = (
12694
12696
  'tvdb' => 1,
12695
12697
  'twelvebit' => 1,
12696
12698
  'tx3g' => 1,
12697
- 'txx' => 1,
12698
- 'txxx' => 1,
12699
12699
  'typeoforiginal' => 1,
12700
12700
  'typist' => 1,
12701
12701
  'uas_lsversionnumber' => 1,
@@ -12764,6 +12764,8 @@ my %tagExists = (
12764
12764
  'usercustom2' => 1,
12765
12765
  'userdata' => 1,
12766
12766
  'userdefinedid' => 1,
12767
+ 'userdefinedtext' => 1,
12768
+ 'userdefinedurl' => 1,
12767
12769
  'usereffectiverating' => 1,
12768
12770
  'userid' => 1,
12769
12771
  'userlastplayedtime' => 1,
@@ -13060,8 +13062,6 @@ my %tagExists = (
13060
13062
  'writtenby' => 1,
13061
13063
  'wwsfamilyname' => 1,
13062
13064
  'wwssubfamilyname' => 1,
13063
- 'wxx' => 1,
13064
- 'wxxx' => 1,
13065
13065
  'x' => 1,
13066
13066
  'xattrapplemaildatereceived' => 1,
13067
13067
  'xattrapplemaildatesent' => 1,
@@ -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 27859 tags, with 17442 unique tag names.
15
+ They contain a total of 27868 tags, with 17446 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
@@ -11539,6 +11539,8 @@ Information about creative filter settings.
11539
11539
  17 VFDisplayIllumination int32s
11540
11540
  18 AFStatusViewfinder int32s
11541
11541
  19 InitialAFPointInServo int32s
11542
+ 20 SubjectToDetect int32s
11543
+ 24 EyeDetection int32s
11542
11544
 
11543
11545
  =head3 Canon RawBurstInfo Tags
11544
11546
 
@@ -19839,23 +19841,23 @@ any information found here will be extracted, even if the tag is not listed.
19839
19841
  Tag ID Tag Name Writable
19840
19842
  ------ -------- --------
19841
19843
  0x0000 ImageProcessingVersion undef[4]
19842
- 0x0100 WB_RBLevels int16u[2]
19843
- 0x0102 WB_RBLevels3000K int16u[2]
19844
- 0x0103 WB_RBLevels3300K int16u[2]
19845
- 0x0104 WB_RBLevels3600K int16u[2]
19846
- 0x0105 WB_RBLevels3900K int16u[2]
19847
- 0x0106 WB_RBLevels4000K int16u[2]
19848
- 0x0107 WB_RBLevels4300K int16u[2]
19849
- 0x0108 WB_RBLevels4500K int16u[2]
19850
- 0x0109 WB_RBLevels4800K int16u[2]
19851
- 0x010a WB_RBLevels5300K int16u[2]
19852
- 0x010b WB_RBLevels6000K int16u[2]
19853
- 0x010c WB_RBLevels6600K int16u[2]
19854
- 0x010d WB_RBLevels7500K int16u[2]
19855
- 0x010e WB_RBLevelsCWB1 int16u[2]
19856
- 0x010f WB_RBLevelsCWB2 int16u[2]
19857
- 0x0110 WB_RBLevelsCWB3 int16u[2]
19858
- 0x0111 WB_RBLevelsCWB4 int16u[2]
19844
+ 0x0100 WB_RBLevels int16u[n]
19845
+ 0x0102 WB_RBLevels3000K int16u[n]
19846
+ 0x0103 WB_RBLevels3300K int16u[n]
19847
+ 0x0104 WB_RBLevels3600K int16u[n]
19848
+ 0x0105 WB_RBLevels3900K int16u[n]
19849
+ 0x0106 WB_RBLevels4000K int16u[n]
19850
+ 0x0107 WB_RBLevels4300K int16u[n]
19851
+ 0x0108 WB_RBLevels4500K int16u[n]
19852
+ 0x0109 WB_RBLevels4800K int16u[n]
19853
+ 0x010a WB_RBLevels5300K int16u[n]
19854
+ 0x010b WB_RBLevels6000K int16u[n]
19855
+ 0x010c WB_RBLevels6600K int16u[n]
19856
+ 0x010d WB_RBLevels7500K int16u[n]
19857
+ 0x010e WB_RBLevelsCWB1 int16u[n]
19858
+ 0x010f WB_RBLevelsCWB2 int16u[n]
19859
+ 0x0110 WB_RBLevelsCWB3 int16u[n]
19860
+ 0x0111 WB_RBLevelsCWB4 int16u[n]
19859
19861
  0x0113 WB_GLevel3000K int16u
19860
19862
  0x0114 WB_GLevel3300K int16u
19861
19863
  0x0115 WB_GLevel3600K int16u
@@ -23188,7 +23190,8 @@ The following tags are decoded in unsupported maker notes. Use the Unknown
23188
23190
 
23189
23191
  The main DNG tags are found in the EXIF table. The tables below define only
23190
23192
  information found within structures of these main DNG tag values. See
23191
- L<http://www.adobe.com/products/dng/> for the official DNG specification.
23193
+ L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
23194
+ DNG specification.
23192
23195
 
23193
23196
  =head3 DNG AdobeData Tags
23194
23197
 
@@ -29146,7 +29149,7 @@ ID3 version 2.2 tags. (These are the tags written by iTunes 5.0.)
29146
29149
  'TT2' Title no
29147
29150
  'TT3' Subtitle no
29148
29151
  'TXT' Lyricist no
29149
- 'TXX' TXX ID3 UserDefined
29152
+ 'TXX' UserDefinedText no
29150
29153
  'TYE' Year no
29151
29154
  'ULT' Lyrics no
29152
29155
  'WAF' FileURL no
@@ -29155,7 +29158,7 @@ ID3 version 2.2 tags. (These are the tags written by iTunes 5.0.)
29155
29158
  'WCM' CommercialURL no
29156
29159
  'WCP' CopyrightURL no
29157
29160
  'WPB' PublisherURL no
29158
- 'WXX' WXX ID3 UserDefined
29161
+ 'WXX' UserDefinedURL no
29159
29162
 
29160
29163
  =head3 ID3 SynLyrics Tags
29161
29164
 
@@ -29167,15 +29170,6 @@ The following tags are extracted from synchronized lyrics/text frames.
29167
29170
  SynchronizedLyricsText no+
29168
29171
  SynchronizedLyricsType no
29169
29172
 
29170
- =head3 ID3 UserDefined Tags
29171
-
29172
- ID3 user-defined text and URL tags will be dynamically added to this table
29173
- by name when found.
29174
-
29175
- Tag ID Tag Name Writable
29176
- ------ -------- --------
29177
- [no tags known]
29178
-
29179
29173
  =head3 ID3 v2_3 Tags
29180
29174
 
29181
29175
  ID3 version 2.3 tags. Includes some non-standard tags written by other
@@ -29245,7 +29239,7 @@ software.
29245
29239
  'TSOC' ComposerSortOrder no
29246
29240
  'TSRC' ISRC no
29247
29241
  'TSSE' EncoderSettings no
29248
- 'TXXX' TXXX ID3 UserDefined
29242
+ 'TXXX' UserDefinedText no
29249
29243
  'TYER' Year no
29250
29244
  'USER' TermsOfUse no
29251
29245
  'USLT' Lyrics no
@@ -29258,7 +29252,7 @@ software.
29258
29252
  'WORS' InternetRadioStationURL no
29259
29253
  'WPAY' PaymentURL no
29260
29254
  'WPUB' PublisherURL no
29261
- 'WXXX' WXXX ID3 UserDefined
29255
+ 'WXXX' UserDefinedURL no
29262
29256
  'XDOR' OriginalReleaseTime no
29263
29257
  'XOLY' OlympusDSS Olympus DSS
29264
29258
  'XSOA' AlbumSortOrder no
@@ -29369,7 +29363,7 @@ software.
29369
29363
  'TSRC' ISRC no
29370
29364
  'TSSE' EncoderSettings no
29371
29365
  'TSST' SetSubtitle no
29372
- 'TXXX' TXXX ID3 UserDefined
29366
+ 'TXXX' UserDefinedText no
29373
29367
  'USER' TermsOfUse no
29374
29368
  'USLT' Lyrics no
29375
29369
  'WCOM' CommercialURL no
@@ -29381,7 +29375,7 @@ software.
29381
29375
  'WORS' InternetRadioStationURL no
29382
29376
  'WPAY' PaymentURL no
29383
29377
  'WPUB' PublisherURL no
29384
- 'WXXX' WXXX ID3 UserDefined
29378
+ 'WXXX' UserDefinedURL no
29385
29379
  'XDOR' OriginalReleaseTime no
29386
29380
  'XOLY' OlympusDSS Olympus DSS
29387
29381
  'XSOA' AlbumSortOrder no
@@ -30765,7 +30759,7 @@ the config file.
30765
30759
  'RDTC' RicohRDTC Ricoh RDTC
30766
30760
  'RDTG' RicohRDTG Ricoh RDTG
30767
30761
  'RDTL' RicohRDTL Ricoh RDTL
30768
- 'RICO' RicohInfo EXIF
30762
+ 'RICO' RicohInfo JPEG
30769
30763
  'RMKN' RicohRMKN EXIF
30770
30764
  'RTHU' PreviewImage no
30771
30765
  'SDLN' PlayMode string
@@ -215,7 +215,7 @@ sub FormatIPTC($$$$$;$)
215
215
  sub IptcDate($)
216
216
  {
217
217
  my $val = shift;
218
- unless ($val =~ s{^.*(\d{4})[-:/.]?(\d{2})[-:/.]?(\d{2}).*}{$1$2$3}s) {
218
+ unless ($val =~ s{^.*?(\d{4})[-:/.]?(\d{2})[-:/.]?(\d{2}).*}{$1$2$3}s) {
219
219
  warn "Invalid date format (use YYYY:mm:dd)\n";
220
220
  undef $val;
221
221
  }
@@ -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);
31
31
 
32
- $VERSION = '12.85';
32
+ $VERSION = '12.86';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -6859,11 +6859,12 @@ sub DirStart($$;$)
6859
6859
  #------------------------------------------------------------------------------
6860
6860
  # Extract metadata from a jpg image
6861
6861
  # Inputs: 0) ExifTool object reference, 1) dirInfo ref with RAF set
6862
+ # 2) tag table ref to process JPEG-like metadata
6862
6863
  # Returns: 1 on success, 0 if this wasn't a valid JPEG file
6863
- sub ProcessJPEG($$)
6864
+ sub ProcessJPEG($$;$)
6864
6865
  {
6865
6866
  local $_;
6866
- my ($self, $dirInfo) = @_;
6867
+ my ($self, $dirInfo, $optionalTagTable) = @_;
6867
6868
  my $options = $$self{OPTIONS};
6868
6869
  my $verbose = $$options{Verbose};
6869
6870
  my $out = $$options{TextOut};
@@ -6871,20 +6872,29 @@ sub ProcessJPEG($$)
6871
6872
  my $raf = $$dirInfo{RAF};
6872
6873
  my $req = $$self{REQ_TAG_LOOKUP};
6873
6874
  my $htmlDump = $$self{HTML_DUMP};
6874
- my %dumpParms = ( Out => $out );
6875
- my ($ch, $s, $length, $hash, $hashsize);
6875
+ my %dumpParms = ( Out => $out, Prefix => $$self{INDENT} );
6876
+ my ($ch, $s, $length, $hash, $hashsize, $indent);
6876
6877
  my ($success, $wantTrailer, $trailInfo, $foundSOS, $gotSize, %jumbfChunk);
6877
6878
  my (@iccChunk, $iccChunkCount, $iccChunksTotal, @flirChunk, $flirCount, $flirTotal);
6878
6879
  my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP);
6879
6880
 
6881
+ ($indent = $$self{INDENT}) =~ s/ $//;
6882
+ unless ($raf) {
6883
+ $raf = File::RandomAccess->new($$dirInfo{DataPt});
6884
+ $self->VerboseDir('JPEG', undef, length(${$$dirInfo{DataPt}}));
6885
+ }
6880
6886
  # get pointer to hash object if it exists and we are the top-level JPEG or JP2
6881
6887
  if ($$self{FILE_TYPE} =~ /^(JPEG|JP2)$/ and not $$self{DOC_NUM}) {
6882
6888
  $hash = $$self{ImageDataHash};
6883
6889
  $hashsize = 0;
6884
6890
  }
6885
-
6886
6891
  # check to be sure this is a valid JPG (or J2C, or EXV) file
6887
- return 0 unless $raf->Read($s, 2) == 2 and $s =~ /^\xff[\xd8\x4f\x01]/;
6892
+ if ($raf->Read($s, 2) == 2 and $s =~ /^\xff[\xd8\x4f\x01]/) {
6893
+ undef $optionalTagTable;
6894
+ } else {
6895
+ return 0 unless $optionalTagTable and $s =~ /^\xff[\xe0-\xef]/;
6896
+ $raf->Seek(-2, 1) or $self->Error('Seek error'), return 1;
6897
+ }
6888
6898
  if ($s eq "\xff\x01") {
6889
6899
  return 0 unless $raf->Read($s, 5) == 5 and $s eq 'Exiv2';
6890
6900
  $$self{FILE_TYPE} = 'EXV';
@@ -6902,7 +6912,7 @@ sub ProcessJPEG($$)
6902
6912
  $$raf{NoBuffer} = 1 if $self->Options('FastScan'); # disable buffering in FastScan mode
6903
6913
 
6904
6914
  $dumpParms{MaxLen} = 128 if $verbose < 4;
6905
- if ($htmlDump) {
6915
+ if ($htmlDump and not $optionalTagTable) {
6906
6916
  $dumpEnd = $raf->Tell();
6907
6917
  my ($n, $t, $m) = $s eq 'Exiv2' ? (7,'EXV','TEM') : (2,'JPEG','SOI');
6908
6918
  my $pos = $dumpEnd - $n;
@@ -6921,6 +6931,7 @@ sub ProcessJPEG($$)
6921
6931
  Marker: for (;;) {
6922
6932
  # set marker and data pointer for current segment
6923
6933
  my $marker = $nextMarker;
6934
+ last if $marker and $marker < 0;
6924
6935
  my $segDataPt = $nextSegDataPt;
6925
6936
  my $segPos = $nextSegPos;
6926
6937
  my $skipped;
@@ -6929,12 +6940,17 @@ sub ProcessJPEG($$)
6929
6940
  #
6930
6941
  # read ahead to the next segment unless we have reached EOI, SOS or SOD
6931
6942
  #
6932
- unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer and not $hash) or
6943
+ until ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer and not $hash) or
6933
6944
  $marker==0x93))
6934
6945
  {
6935
6946
  # read up to next marker (JPEG markers begin with 0xff)
6936
6947
  my $buff;
6937
- $raf->ReadLine($buff) or last;
6948
+ unless ($raf->ReadLine($buff)) {
6949
+ last Marker unless $optionalTagTable;
6950
+ $nextMarker = -1;
6951
+ $success = 1;
6952
+ last;
6953
+ }
6938
6954
  $skipped = length($buff) - 1;
6939
6955
  # JPEG markers can be padded with unlimited 0xff's
6940
6956
  for (;;) {
@@ -6946,21 +6962,21 @@ sub ProcessJPEG($$)
6946
6962
  # read segment data if it exists
6947
6963
  if (not defined $markerLenBytes{$nextMarker}) {
6948
6964
  # read record length word
6949
- last unless $raf->Read($s, 2) == 2;
6965
+ last Marker unless $raf->Read($s, 2) == 2;
6950
6966
  my $len = unpack('n',$s); # get data length
6951
- last unless defined($len) and $len >= 2;
6967
+ last Marker unless defined($len) and $len >= 2;
6952
6968
  $nextSegPos = $raf->Tell();
6953
6969
  $len -= 2; # subtract size of length word
6954
- last unless $raf->Read($buff, $len) == $len;
6970
+ last Marker unless $raf->Read($buff, $len) == $len;
6955
6971
  $nextSegDataPt = \$buff; # set pointer to our next data
6956
6972
  } elsif ($markerLenBytes{$nextMarker} == 4) {
6957
6973
  # handle J2C extensions with 4-byte length word
6958
- last unless $raf->Read($s, 4) == 4;
6974
+ last Marker unless $raf->Read($s, 4) == 4;
6959
6975
  my $len = unpack('N',$s); # get data length
6960
- last unless defined($len) and $len >= 4;
6976
+ last Marker unless defined($len) and $len >= 4;
6961
6977
  $nextSegPos = $raf->Tell();
6962
6978
  $len -= 4; # subtract size of length word
6963
- last unless $raf->Seek($len, 1);
6979
+ last Marker unless $raf->Seek($len, 1);
6964
6980
  } elsif ($hash and defined $marker and ($marker == 0x00 or $marker == 0xda or
6965
6981
  ($marker >= 0xd0 and $marker <= 0xd7)))
6966
6982
  {
@@ -6976,7 +6992,8 @@ sub ProcessJPEG($$)
6976
6992
  $hashsize += $skipped + 2;
6977
6993
  }
6978
6994
  # read second segment too if this was the first
6979
- next unless defined $marker;
6995
+ next Marker unless defined $marker;
6996
+ last;
6980
6997
  }
6981
6998
  # set some useful variables for the current segment
6982
6999
  my $markerName = JpegMarkerName($marker);
@@ -6996,7 +7013,7 @@ sub ProcessJPEG($$)
6996
7013
  if (($marker & 0xf0) == 0xc0 and ($marker == 0xc0 or $marker & 0x03)) {
6997
7014
  $length = length $$segDataPt;
6998
7015
  if ($verbose) {
6999
- print $out "JPEG $markerName ($length bytes):\n";
7016
+ print $out "${indent}JPEG $markerName ($length bytes):\n";
7000
7017
  HexDump($segDataPt, undef, %dumpParms, Addr=>$segPos) if $verbose>2;
7001
7018
  } elsif ($htmlDump) {
7002
7019
  $self->HDump($segPos-4, $length+4, "[JPEG $markerName]", undef, 0x08);
@@ -7039,7 +7056,7 @@ sub ProcessJPEG($$)
7039
7056
  next;
7040
7057
  } elsif ($marker == 0xd9) { # EOI
7041
7058
  pop @$path;
7042
- $verbose and print $out "JPEG EOI\n";
7059
+ $verbose and print $out "${indent}JPEG EOI\n";
7043
7060
  my $pos = $raf->Tell();
7044
7061
  $$self{TrailerStart} = $pos unless $$self{DOC_NUM};
7045
7062
  if ($htmlDump and $dumpEnd) {
@@ -7100,7 +7117,7 @@ sub ProcessJPEG($$)
7100
7117
  # adjust PreviewImageStart to this location
7101
7118
  my $actual = $pos + pos($buff) - 4;
7102
7119
  if ($start and $start ne $actual and $verbose > 1) {
7103
- print $out "(Fixed PreviewImage location: $start -> $actual)\n";
7120
+ print $out "${indent}(Fixed PreviewImage location: $start -> $actual)\n";
7104
7121
  }
7105
7122
  # update preview image offsets
7106
7123
  if ($start) {
@@ -7154,7 +7171,7 @@ sub ProcessJPEG($$)
7154
7171
  pop @$path;
7155
7172
  $foundSOS = 1;
7156
7173
  # all done with meta information unless we have a trailer
7157
- $verbose and print $out "JPEG SOS\n";
7174
+ $verbose and print $out "${indent}JPEG SOS\n";
7158
7175
  unless ($fast) {
7159
7176
  $trailInfo = IdentifyTrailer($raf);
7160
7177
  # process trailer now unless we are doing verbose dump
@@ -7194,7 +7211,7 @@ sub ProcessJPEG($$)
7194
7211
  last; # all done parsing file
7195
7212
  } elsif ($marker == 0x93) {
7196
7213
  pop @$path;
7197
- $verbose and print $out "JPEG SOD\n";
7214
+ $verbose and print $out "${indent}JPEG SOD\n";
7198
7215
  $success = 1;
7199
7216
  if ($hash and $$self{FILE_TYPE} eq 'JP2') {
7200
7217
  my $pos = $raf->Tell();
@@ -7205,7 +7222,7 @@ sub ProcessJPEG($$)
7205
7222
  last; # all done parsing file
7206
7223
  } elsif (defined $markerLenBytes{$marker}) {
7207
7224
  # handle other stand-alone markers and segments we skipped over
7208
- $verbose and $marker and print $out "JPEG $markerName\n";
7225
+ $verbose and $marker and print $out "${indent}JPEG $markerName\n";
7209
7226
  next;
7210
7227
  } elsif ($marker == 0xdb and length($$segDataPt) and # DQT
7211
7228
  # save the DQT data only if JPEGDigest has been requested
@@ -7225,7 +7242,7 @@ sub ProcessJPEG($$)
7225
7242
  $length = length $$segDataPt;
7226
7243
  $appBytes += $length + 4 if ($marker & 0xf0) == 0xe0; # total size of APP segments
7227
7244
  if ($verbose) {
7228
- print $out "JPEG $markerName ($length bytes):\n";
7245
+ print $out "${indent}JPEG $markerName ($length bytes):\n";
7229
7246
  if ($verbose > 2) {
7230
7247
  my %extraParms = ( Addr => $segPos );
7231
7248
  $extraParms{MaxLen} = 128 if $verbose == 4;
@@ -7383,7 +7400,7 @@ sub ProcessJPEG($$)
7383
7400
  # some software erroneously writes zeros for the chunk counts)
7384
7401
  my $chunkNum = Get8u($segDataPt, 6);
7385
7402
  my $chunksTot = Get8u($segDataPt, 7) + 1; # (note the "+ 1"!)
7386
- $verbose and printf $out "$$self{INDENT}FLIR chunk %d of %d\n",
7403
+ $verbose and printf $out "${indent}FLIR chunk %d of %d\n",
7387
7404
  $chunkNum + 1, $chunksTot;
7388
7405
  if (defined $flirTotal) {
7389
7406
  # abort parsing FLIR if the total chunk count is inconsistent
@@ -7448,7 +7465,7 @@ sub ProcessJPEG($$)
7448
7465
  # some software erroneously writes zeros for the chunk counts)
7449
7466
  my $chunkNum = Get8u($segDataPt, 12);
7450
7467
  my $chunksTot = Get8u($segDataPt, 13);
7451
- $verbose and print $out "$$self{INDENT}ICC_Profile chunk $chunkNum of $chunksTot\n";
7468
+ $verbose and print $out "${indent}ICC_Profile chunk $chunkNum of $chunksTot\n";
7452
7469
  if (defined $iccChunksTotal) {
7453
7470
  # abort parsing ICC_Profile if the total chunk count is inconsistent
7454
7471
  undef $iccChunkCount if $chunksTot != $iccChunksTotal;
@@ -8001,7 +8018,7 @@ sub ProcessJPEG($$)
8001
8018
  }
8002
8019
  }
8003
8020
  # print verbose hash message if necessary
8004
- print $out "$$self{INDENT}(ImageDataHash: $hashsize bytes of JPEG image data)\n" if $hashsize and $verbose;
8021
+ print $out "${indent}(ImageDataHash: $hashsize bytes of JPEG image data)\n" if $hashsize and $verbose;
8005
8022
  # calculate JPEGDigest if requested
8006
8023
  if (@dqt) {
8007
8024
  require Image::ExifTool::JPEGDigest;
@@ -2540,20 +2540,19 @@ RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
2540
2540
  Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
2541
2541
  SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
2542
2542
  Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
2543
- Track#, UserData, UserDefined, VCalendar, VCard, VNote, Version0, Vorbis,
2544
- WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera,
2545
- XMP-GCreations, XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano,
2546
- XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas,
2547
- XMP-acdsee, XMP-album, XMP-apple-fi, XMP-ast, XMP-aux, XMP-cc, XMP-cell,
2548
- XMP-crd, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex, XMP-digiKam,
2549
- XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif, XMP-exifEX, XMP-expressionmedia,
2550
- XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr, XMP-hdrgm, XMP-ics, XMP-iptcCore,
2551
- XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw,
2552
- XMP-mwg-rs, XMP-nine, XMP-panorama, XMP-pdf, XMP-pdfx, XMP-photomech,
2553
- XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism, XMP-prl, XMP-prm, XMP-pur,
2554
- XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM,
2555
- XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg,
2556
- ZIP, iTunes
2543
+ Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
2544
+ XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth,
2545
+ XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
2546
+ XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
2547
+ XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
2548
+ XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
2549
+ XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
2550
+ XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
2551
+ XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
2552
+ XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
2553
+ XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
2554
+ XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
2555
+ XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
2557
2556
 
2558
2557
  =item Family 2 (Category):
2559
2558
 
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.85
3
+ Version: 12.86
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.85.0')
4
+ VERSION = Gem::Version.new('12.86.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.85.0
4
+ version: 12.86.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-06-03 00:00:00.000000000 Z
12
+ date: 2024-06-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool
@@ -326,7 +326,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
326
326
  requirements:
327
327
  - - ">="
328
328
  - !ruby/object:Gem::Version
329
- version: '3.0'
329
+ version: '3.1'
330
330
  required_rubygems_version: !ruby/object:Gem::Requirement
331
331
  requirements:
332
332
  - - ">="