exiftool_vendored 13.17.0 → 13.19.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.
@@ -25,7 +25,7 @@ use vars qw($VERSION);
25
25
  use Image::ExifTool qw(:DataAccess :Utils);
26
26
  use Image::ExifTool::Exif;
27
27
 
28
- $VERSION = '1.47';
28
+ $VERSION = '1.48';
29
29
 
30
30
  sub ProcessKodakIFD($$$);
31
31
  sub ProcessKodakText($$$);
@@ -2983,7 +2983,8 @@ my %sceneModeUsed = (
2983
2983
  Priority => 0, # (only integer seconds)
2984
2984
  PrintConv => 'ConvertDuration($val)',
2985
2985
  },
2986
- 'ver '=> { Name => 'KodakVersion' },
2986
+ # (save KodakVersion to recognize Rexing Dashcam video for GPS scaling)
2987
+ 'ver '=> { Name => 'KodakVersion', RawConv => '$$self{KodakVersion} = $val' },
2987
2988
  thma => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1 },
2988
2989
  scra => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1 },
2989
2990
  );
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.42';
68
+ $VERSION = '4.43';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -1370,6 +1370,25 @@ my %retouchValues = ( #PH
1370
1370
  54 => 'Low Key', # (S3500)
1371
1371
  );
1372
1372
 
1373
+ # AF points for models with 11 focus points (eg. D3400)
1374
+ my %afPoints11 = (
1375
+ 0 => '(none)',
1376
+ 0x7ff => 'All 11 Points',
1377
+ BITMASK => {
1378
+ 0 => 'Center',
1379
+ 1 => 'Top',
1380
+ 2 => 'Bottom',
1381
+ 3 => 'Mid-left',
1382
+ 4 => 'Mid-right',
1383
+ 5 => 'Upper-left',
1384
+ 6 => 'Upper-right',
1385
+ 7 => 'Lower-left',
1386
+ 8 => 'Lower-right',
1387
+ 9 => 'Far Left',
1388
+ 10 => 'Far Right',
1389
+ },
1390
+ );
1391
+
1373
1392
  # AF point indices for models with 51 focus points, eg. D3 (ref JD/PH)
1374
1393
  # A1 A2 A3 A4 A5 A6 A7 A8 A9
1375
1394
  # B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11
@@ -4027,23 +4046,7 @@ my %base64coord = (
4027
4046
  Name => 'AFPointsInFocus',
4028
4047
  Format => 'int16u',
4029
4048
  PrintConvColumns => 2,
4030
- PrintConv => {
4031
- 0 => '(none)',
4032
- 0x7ff => 'All 11 Points',
4033
- BITMASK => {
4034
- 0 => 'Center',
4035
- 1 => 'Top',
4036
- 2 => 'Bottom',
4037
- 3 => 'Mid-left',
4038
- 4 => 'Mid-right',
4039
- 5 => 'Upper-left',
4040
- 6 => 'Upper-right',
4041
- 7 => 'Lower-left',
4042
- 8 => 'Lower-right',
4043
- 9 => 'Far Left',
4044
- 10 => 'Far Right',
4045
- },
4046
- },
4049
+ PrintConv => \%afPoints11,
4047
4050
  },
4048
4051
  );
4049
4052
 
@@ -4515,7 +4518,7 @@ my %base64coord = (
4515
4518
  0x1c => [
4516
4519
  { #PH
4517
4520
  Name => 'ContrastDetectAFInFocus',
4518
- Condition => '$$self{AFInfo2Version} eq "0100"',
4521
+ Condition => '$$self{AFInfo2Version} eq "0100" and $$self{ContrastDetectAF}',
4519
4522
  PrintConv => { 0 => 'No', 1 => 'Yes' },
4520
4523
  },{ #PH (D500, see forum11190)
4521
4524
  Name => 'AFPointsSelected',
@@ -4525,6 +4528,11 @@ my %base64coord = (
4525
4528
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4526
4529
  PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
4527
4530
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
4531
+ },{ #PH (D3400) (NC "selected")
4532
+ Name => 'AFPointsSelected',
4533
+ Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 2',
4534
+ Format => 'int16u',
4535
+ PrintConv => \%afPoints11,
4528
4536
  },
4529
4537
  ],
4530
4538
  # 0x1d - always zero (with or without live view)
@@ -4573,6 +4581,14 @@ my %base64coord = (
4573
4581
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4574
4582
  PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
4575
4583
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
4584
+ },{ #PH (D7500) (NC "in focus")
4585
+ Name => 'AFPointsInFocus',
4586
+ Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 1',
4587
+ Format => 'undef[7]',
4588
+ ValueConv => 'join(" ", unpack("H2"x7, $val))',
4589
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4590
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints51); },
4591
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints51); },
4576
4592
  },
4577
4593
  ],
4578
4594
  0x31 => { #28 (Z7)
@@ -4639,6 +4655,16 @@ my %base64coord = (
4639
4655
  11 => 'Far Right',
4640
4656
  },
4641
4657
  },
4658
+ {
4659
+ Name => 'PrimaryAFPoint',
4660
+ Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} eq "0101"',
4661
+ PrintConvColumns => 5,
4662
+ PrintConv => {
4663
+ 0 => '(none)',
4664
+ %afPoints51,
4665
+ 1 => 'C6 (Center)',
4666
+ },
4667
+ },
4642
4668
  {
4643
4669
  Name => 'PrimaryAFPoint',
4644
4670
  Condition => '$$self{AFInfo2Version} eq "0101"',
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.60';
24
+ $VERSION = '1.61';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -141,6 +141,15 @@ my %supportedFilter = (
141
141
  PrintConv => '$self->ConvertDateTime($val)',
142
142
  PrintConvInv => '$self->InverseDateTime($val)',
143
143
  },
144
+ SourceModified => {
145
+ Name => 'SourceModified',
146
+ Writable => 'date',
147
+ PDF2 => 1,
148
+ Groups => { 2 => 'Time' },
149
+ Shift => 'Time',
150
+ PrintConv => '$self->ConvertDateTime($val)',
151
+ PrintConvInv => '$self->InverseDateTime($val)',
152
+ },
144
153
  Trapped => {
145
154
  Protected => 1,
146
155
  # remove leading '/' from '/True' or '/False'
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::XMP;
22
22
  use Image::ExifTool::GPS;
23
23
 
24
- $VERSION = '1.13';
24
+ $VERSION = '1.14';
25
25
 
26
26
  sub ExtractObject($$;$);
27
27
  sub Get24u($$);
@@ -46,7 +46,7 @@ my %plistType = (
46
46
  %Image::ExifTool::PLIST::Main = (
47
47
  PROCESS_PROC => \&ProcessPLIST,
48
48
  GROUPS => { 0 => 'PLIST', 1 => 'XML', 2 => 'Document' },
49
- VARS => { LONG_TAGS => 4 },
49
+ VARS => { LONG_TAGS => 12 },
50
50
  NOTES => q{
51
51
  Apple Property List tags. ExifTool reads both XML and binary-format PLIST
52
52
  files, and will extract any existing tags even if they aren't listed below.
@@ -92,6 +92,35 @@ my %plistType = (
92
92
  Name => 'GPSMapDatum',
93
93
  Groups => { 2 => 'Location' },
94
94
  },
95
+ # slow motion stuff found in AAE files
96
+ 'slowMotion/regions/timeRange/start/flags' => {
97
+ Name => 'SlowMotionRegionsStartTimeFlags',
98
+ PrintConv => { BITMASK => {
99
+ 0 => 'Valid',
100
+ 1 => 'Has been rounded',
101
+ 2 => 'Positive infinity',
102
+ 3 => 'Negative infinity',
103
+ 4 => 'Indefinite',
104
+ }},
105
+ },
106
+ 'slowMotion/regions/timeRange/start/value' => 'SlowMotionRegionsStartTimeValue',
107
+ 'slowMotion/regions/timeRange/start/timescale' => 'SlowMotionRegionsStartTimeScale',
108
+ 'slowMotion/regions/timeRange/start/epoch' => 'SlowMotionRegionsStartTimeEpoch',
109
+ 'slowMotion/regions/timeRange/duration/flags' => {
110
+ Name => 'SlowMotionRegionsDurationFlags',
111
+ PrintConv => { BITMASK => {
112
+ 0 => 'Valid',
113
+ 1 => 'Has been rounded',
114
+ 2 => 'Positive infinity',
115
+ 3 => 'Negative infinity',
116
+ 4 => 'Indefinite',
117
+ }},
118
+ },
119
+ 'slowMotion/regions/timeRange/duration/value' => 'SlowMotionRegionsDurationValue',
120
+ 'slowMotion/regions/timeRange/duration/timescale' => 'SlowMotionRegionsDurationTimeScale',
121
+ 'slowMotion/regions/timeRange/duration/epoch' => 'SlowMotionRegionsDurationEpoch',
122
+ 'slowMotion/regions' => 'SlowMotionRegions',
123
+ 'slowMotion/rate' => 'SlowMotionRate',
95
124
  XMLFileType => {
96
125
  # recognize MODD files by their content
97
126
  RawConv => q{
@@ -101,6 +130,10 @@ my %plistType = (
101
130
  return $val;
102
131
  },
103
132
  },
133
+ adjustmentData => { # AAE file
134
+ Name => 'AdjustmentData',
135
+ SubDirectory => { TagTable => 'Image::ExifTool::PLIST::Main' },
136
+ },
104
137
  );
105
138
 
106
139
  #------------------------------------------------------------------------------
@@ -404,8 +437,13 @@ sub ProcessPLIST($$;$)
404
437
 
405
438
  unless ($result) {
406
439
  my $buff;
407
- my $raf = $$dirInfo{RAF} or return 0;
408
- $raf->Seek(0,0) and $raf->Read($buff, 64) or return 0;
440
+ my $raf = $$dirInfo{RAF};
441
+ if ($raf) {
442
+ $raf->Seek(0,0) and $raf->Read($buff, 64) or return 0;
443
+ } else {
444
+ return 0 unless $$dirInfo{DataPt};
445
+ $buff = ${$$dirInfo{DataPt}};
446
+ }
409
447
  if ($buff =~ /^bplist0/) {
410
448
  # binary PLIST file
411
449
  my $tagTablePtr = GetTagTable('Image::ExifTool::PLIST::Main');
@@ -1165,7 +1165,7 @@ sub ProcessPSD($$)
1165
1165
  $len = Set32u(length $data);
1166
1166
  Write($outfile, $len, $data) or $err = 1;
1167
1167
  # look for trailer and edit if necessary
1168
- my $trailInfo = Image::ExifTool::IdentifyTrailer($raf);
1168
+ my $trailInfo = $et->IdentifyTrailer($raf);
1169
1169
  if ($trailInfo) {
1170
1170
  my $tbuf = '';
1171
1171
  $$trailInfo{OutFile} = \$tbuf; # rewrite trailer(s)
@@ -1223,7 +1223,7 @@ sub ProcessPSD($$)
1223
1223
  }
1224
1224
  $$et{INDENT} = $oldIndent;
1225
1225
  # process trailers if they exist
1226
- my $trailInfo = Image::ExifTool::IdentifyTrailer($raf);
1226
+ my $trailInfo = $et->IdentifyTrailer($raf);
1227
1227
  $et->ProcessTrailers($trailInfo) if $trailInfo;
1228
1228
  }
1229
1229
  return $rtnVal;
@@ -174,7 +174,7 @@ sub ProcessProtobuf($$$;$)
174
174
  my $dir = { DataPt => \$buff, Pos => 0 };
175
175
  my $num = VarInt($dir);
176
176
  my $den = VarInt($dir);
177
- $val = (defined $num and $den) ? "$num/$den" : 'err';
177
+ $val = (defined $num and $den) ? $num/$den : 'err';
178
178
  } else {
179
179
  $val = ReadValue(\$buff, 0, $$tagInfo{Format}, undef, length($buff));
180
180
  }