exiftool_vendored 13.03.0 → 13.04.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: beee9d5cf55d8f0cdbe040a87bcccb203cb39721065957785486ef6bc02380ca
4
- data.tar.gz: b5023cb0b5f82e8c4798256b34ea31bc3e99dc805af96d7595f2727ef1b9ce90
3
+ metadata.gz: 374e7e5a3d68eeca0ec6cb6a40919d056e0731958606daa8bed45a7c4c70daba
4
+ data.tar.gz: 1263e0b2b35852265b4d5352eae7f35d12cffe0277f916799a8498c75482a9be
5
5
  SHA512:
6
- metadata.gz: 6e8b38e7fa81625bb834f7f419100eb4116514d6e3f667b80b486e449b36f849ee26dfb9878caab0b0d937b59a803e1177ed459cbf0e6df4a949427b7e87347d
7
- data.tar.gz: 36865cb5c13daac876f068af94f9d7b50b16338b0159fadcdd365bb15bf98791956bfe5c2fb25d6ab9521f02126bfc918184f4d12b264e54a24718ab93808f53
6
+ metadata.gz: 7b5d47b1383f939d76af17239fb4f1e1a486ae619b0d728a010bde7e8ed044de0bfc93d755f8c0a22dfa098ddf997d84f1d7a3f562f07153d1486eee68744929
7
+ data.tar.gz: b8ba0c1b6c02546df4e54c6d5c4fe072cbb98bc4b6c5b1d0f1ac323ded4ca43e06ff5bcaaaf879005d37533df86f53262cba0dd87d1a09684f360a50a6d4834c
data/bin/Changes CHANGED
@@ -7,6 +7,23 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.00. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Nov. 26, 2024 - Version 13.04
11
+
12
+ - Added the ability to write GPSDOP and GPSMeasureMode from the -geotag option
13
+ if hdop or pdop information exists in the input track file
14
+ - Added a few new Canon RFLensTypes (thanks Norbert Wasser)
15
+ - Decode timed GPS from GoPro Hero 13 videos
16
+ - Improved writing of GPSDestLatitudeRef and GPSDestLongitudeRef tags to allow
17
+ signed numbers to be written in the same way as GPSLatitudeRef and
18
+ GPSLongitudeRef
19
+ - Warn if using an Image::ExifTool library that doesn't match the application
20
+ version
21
+ - Renamed an Unknown Photoshop tag
22
+ - Convert GoPro GPSSpeed and GPSSpeed3D from m/s to km/h
23
+ - Patched to tolerate XML header in DOCX xml files
24
+ - Fixed -htmldump output to show the same names for unknown EXIF tags as with
25
+ the -u option
26
+
10
27
  Nov. 12, 2024 - Version 13.03
11
28
 
12
29
  - Added ability to include or exclude tags from CSV and JSON imports
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.03"
53
+ "version" : "13.04"
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: '13.03'
34
+ version: '13.04'
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-13.03.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.03
112
+ gzip -dc Image-ExifTool-13.04.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.04
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.03';
14
+ my $version = '13.04';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -597,6 +597,10 @@ if (@Image::ExifTool::UserDefined::Arguments) {
597
597
  unshift @ARGV, @Image::ExifTool::UserDefined::Arguments;
598
598
  }
599
599
 
600
+ if ($version ne $Image::ExifTool::VERSION) {
601
+ Warn "Application version $version does not match Image::ExifTool library version $Image::ExifTool::VERSION\n";
602
+ }
603
+
600
604
  # parse command-line options in 2 passes...
601
605
  # pass 1: set all of our ExifTool options
602
606
  # pass 2: print all of our help and informational output (-list, -ver, etc)
@@ -5903,7 +5907,7 @@ with this command:
5903
5907
 
5904
5908
  produces output like this:
5905
5909
 
5906
- -- Generated by ExifTool 13.03 --
5910
+ -- Generated by ExifTool 13.04 --
5907
5911
  File: a.jpg - 2003:10:31 15:44:19
5908
5912
  (f/5.6, 1/60s, ISO 100)
5909
5913
  File: b.jpg - 2006:05:23 11:57:38
@@ -5919,8 +5923,9 @@ name, a value of 1 is returned if any tag exists in the specified group, or
5919
5923
  0 otherwise (unless the C<All> group is also specified, in which case the
5920
5924
  values of all matching tags are joined).
5921
5925
 
5922
- When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
5923
- are effectively processed as separate input files.
5926
+ The B<-p> output iterates through the family 3 group names, with each
5927
+ sub-document producing additional output. This feature is most useful when
5928
+ used in combination with the B<-ee> option to extract embedded documents.
5924
5929
 
5925
5930
  If a specified tag does not exist, a minor warning is issued and the line
5926
5931
  with the missing tag is not printed. However, the B<-f> option may be used
@@ -6770,23 +6775,22 @@ the following two commands are equivalent:
6770
6775
  exiftool -geotag trk.log image.jpg
6771
6776
  exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg
6772
6777
 
6773
- When the C<Geotime> value is converted to UTC, the local system timezone is
6774
- assumed unless the date/time value contains a timezone. Writing C<Geotime>
6775
- causes the following tags to be written (provided they can be calculated
6776
- from the track log, and they are supported by the destination metadata
6777
- format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef,
6778
- GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime,
6779
- GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection,
6780
- GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates, AmbientTemperature
6781
- and CameraElevationAngle. By default, in image files tags are created in
6782
- EXIF, and updated in XMP only if they already exist. In QuickTime-format
6783
- files GPSCoordinates is created in the preferred location (ItemList by
6784
- default) as well as in XMP. However, C<EXIF:Geotime>, C<XMP:Geotime> or
6785
- C<QuickTime:Geotime> may be specified to write to write only to one group.
6786
- Also, C<ItemList:Geotime>, C<Keys:Geotime> or C<UserData:Geotime> may be
6787
- used to write to a specific location in QuickTime-format files. Note that
6788
- GPSPitch and GPSRoll are non-standard, and require user-defined tags in
6789
- order to be written.
6778
+ If the C<Geotime> value does not contain a time zone then the local system
6779
+ timezone is assumed. Writing C<Geotime> causes the following tags to be
6780
+ written (provided they can be calculated from the track log, and they are
6781
+ supported by the destination metadata format): GPSLatitude, GPSLatitudeRef,
6782
+ GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp,
6783
+ GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef,
6784
+ GPSImgDirection, GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates,
6785
+ AmbientTemperature and CameraElevationAngle. By default, in image files
6786
+ tags are created in EXIF, and updated in XMP only if they already exist. In
6787
+ QuickTime-format files GPSCoordinates is created in the preferred location
6788
+ (ItemList by default) as well as in XMP. However, C<EXIF:Geotime>,
6789
+ C<XMP:Geotime> or C<QuickTime:Geotime> may be specified to write to write
6790
+ only to one group. Also, C<ItemList:Geotime>, C<Keys:Geotime> or
6791
+ C<UserData:Geotime> may be used to write to a specific location in
6792
+ QuickTime-format files. Note that GPSPitch and GPSRoll are non-standard,
6793
+ and require user-defined tags in order to be written.
6790
6794
 
6791
6795
  The C<Geosync> tag may be used to specify a time correction which is applied
6792
6796
  to each C<Geotime> value for synchronization with GPS time. For example,
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.84';
91
+ $VERSION = '4.85';
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)
@@ -631,6 +631,9 @@ $VERSION = '4.84';
631
631
  '61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
632
632
  '61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
633
633
  '61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
634
+ '61182.57' => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
635
+ '61182.58' => 'Canon RF 50mm F1.4 L VCM', #42
636
+ '61182.59' => 'Canon RF 24mm F1.4 L VCM', #42
634
637
  65535 => 'n/a',
635
638
  );
636
639
 
@@ -7001,6 +7004,9 @@ my %ciMaxFocal = (
7001
7004
  316 => 'Canon RF 35mm F1.4 L VCM', #42
7002
7005
  317 => 'Canon RF-S 3.9mm F3.5 STM DUAL FISHEYE', #42
7003
7006
  318 => 'Canon RF 28-70mm F2.8 IS STM', #42
7007
+ 319 => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
7008
+ 325 => 'Canon RF 50mm F1.4 L VCM', #42
7009
+ 326 => 'Canon RF 24mm F1.4 L VCM', #42
7004
7010
  # Note: add new RF lenses to %canonLensTypes with ID 61182
7005
7011
  },
7006
7012
  },
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.54';
60
+ $VERSION = '4.55';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -6697,8 +6697,9 @@ sub ProcessExif($$$)
6697
6697
  "Format: $fstr\nSize: $size bytes\n";
6698
6698
  if ($size > 4) {
6699
6699
  my $offPt = Get32u($dataPt,$entry+8);
6700
- # (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2})
6701
- my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || 0);
6700
+ # (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2,*.raf})
6701
+ my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) +
6702
+ ($$et{BASE_FUDGE} || $$et{BASE} || 0);
6702
6703
  $tip .= sprintf("Value offset: 0x%.4x\n", $offPt);
6703
6704
  # highlight tag name (red for bad size)
6704
6705
  my $style = ($bad or not defined $tval) ? 'V' : 'H';
@@ -6729,12 +6730,15 @@ sub ProcessExif($$$)
6729
6730
  } elsif ($tagInfo and Image::ExifTool::IsInt($tval)) {
6730
6731
  if ($$tagInfo{IsOffset} or $$tagInfo{SubIFD}) {
6731
6732
  $tval = sprintf('0x%.4x', $tval);
6732
- my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || 0);
6733
+ my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || $$et{BASE} || 0);
6733
6734
  if ($actPt != $val) {
6734
6735
  $tval .= sprintf("\nActual offset: 0x%.4x", $actPt);
6735
6736
  my $sign = $actPt < $val ? '-' : '';
6736
6737
  $tval .= sprintf("\nOffset base: ${sign}0x%.4x", abs($actPt - $val));
6737
6738
  }
6739
+ if ($$et{EXIF_POS} and not $$et{BASE_FUDGE}) {
6740
+ $tip .= sprintf("File offset: 0x%.4x\n", $actPt + $$et{EXIF_POS})
6741
+ }
6738
6742
  } elsif ($$tagInfo{PrintHex}) {
6739
6743
  $tval = sprintf('0x%x', $tval);
6740
6744
  }
@@ -12,7 +12,7 @@ use strict;
12
12
  use vars qw($VERSION);
13
13
  use Image::ExifTool::Exif;
14
14
 
15
- $VERSION = '1.56';
15
+ $VERSION = '1.57';
16
16
 
17
17
  my %coordConv = (
18
18
  ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
@@ -20,6 +20,34 @@ my %coordConv = (
20
20
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
21
21
  );
22
22
 
23
+ my %printConvLatRef = (
24
+ # extract N/S if written from Composite:GPSLatitude
25
+ # (also allow writing from a signed number)
26
+ OTHER => sub {
27
+ my ($val, $inv) = @_;
28
+ return undef unless $inv;
29
+ return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i;
30
+ return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/;
31
+ return undef;
32
+ },
33
+ N => 'North',
34
+ S => 'South',
35
+ );
36
+
37
+ my %printConvLonRef = (
38
+ # extract E/W if written from Composite:GPSLongitude
39
+ # (also allow writing from a signed number)
40
+ OTHER => sub {
41
+ my ($val, $inv) = @_;
42
+ return undef unless $inv;
43
+ return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i;
44
+ return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/;
45
+ return undef;
46
+ },
47
+ E => 'East',
48
+ W => 'West',
49
+ );
50
+
23
51
  %Image::ExifTool::GPS::Main = (
24
52
  GROUPS => { 0 => 'EXIF', 1 => 'GPS', 2 => 'Location' },
25
53
  WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
@@ -43,19 +71,7 @@ my %coordConv = (
43
71
  latitudes or negative for south, or a string containing N, North, S or South
44
72
  },
45
73
  Count => 2,
46
- PrintConv => {
47
- # extract N/S if written from Composite:GPSLatitude
48
- # (also allow writing from a signed number)
49
- OTHER => sub {
50
- my ($val, $inv) = @_;
51
- return undef unless $inv;
52
- return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i;
53
- return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/;
54
- return undef;
55
- },
56
- N => 'North',
57
- S => 'South',
58
- },
74
+ PrintConv => \%printConvLatRef,
59
75
  },
60
76
  0x0002 => {
61
77
  Name => 'GPSLatitude',
@@ -72,19 +88,7 @@ my %coordConv = (
72
88
  ExifTool will also accept a number when writing this tag, positive for east
73
89
  longitudes or negative for west, or a string containing E, East, W or West
74
90
  },
75
- PrintConv => {
76
- # extract E/W if written from Composite:GPSLongitude
77
- # (also allow writing from a signed number)
78
- OTHER => sub {
79
- my ($val, $inv) = @_;
80
- return undef unless $inv;
81
- return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i;
82
- return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/;
83
- return undef;
84
- },
85
- E => 'East',
86
- W => 'West',
87
- },
91
+ PrintConv => \%printConvLonRef,
88
92
  },
89
93
  0x0004 => {
90
94
  Name => 'GPSLongitude',
@@ -238,7 +242,7 @@ my %coordConv = (
238
242
  Writable => 'string',
239
243
  Notes => 'tags 0x0013-0x001a used for subject location according to MWG 2.0',
240
244
  Count => 2,
241
- PrintConv => { N => 'North', S => 'South' },
245
+ PrintConv => \%printConvLatRef,
242
246
  },
243
247
  0x0014 => {
244
248
  Name => 'GPSDestLatitude',
@@ -251,7 +255,7 @@ my %coordConv = (
251
255
  Name => 'GPSDestLongitudeRef',
252
256
  Writable => 'string',
253
257
  Count => 2,
254
- PrintConv => { E => 'East', W => 'West' },
258
+ PrintConv => \%printConvLonRef,
255
259
  },
256
260
  0x0016 => {
257
261
  Name => 'GPSDestLongitude',
@@ -17,6 +17,7 @@
17
17
  # 2022/06/21 - PH Added ability to read Google Takeout JSON files
18
18
  # 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
19
19
  # 2024/08/28 - PH Added support for new Google Takeout JSON format
20
+ # 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
20
21
  #
21
22
  # References: 1) http://www.topografix.com/GPX/1/1/
22
23
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -31,7 +32,7 @@ use vars qw($VERSION);
31
32
  use Image::ExifTool qw(:Public);
32
33
  use Image::ExifTool::GPS;
33
34
 
34
- $VERSION = '1.80';
35
+ $VERSION = '1.81';
35
36
 
36
37
  sub JITTER() { return 2 } # maximum time jitter
37
38
 
@@ -90,12 +91,25 @@ my %fixInfoKeys = (
90
91
  orient => [ 'dir', 'pitch', 'roll' ],
91
92
  atemp => [ 'atemp' ],
92
93
  err => [ 'err' ],
94
+ dop => [ 'hdop', 'vdop', 'pdop' ],
93
95
  );
94
96
 
95
- my %isOrient = ( dir => 1, pitch => 1, roll => 1 ); # test for orientation key
97
+ # category for select keys
98
+ my %keyCategory = (
99
+ dir => 'orient',
100
+ pitch => 'orient',
101
+ roll => 'orient',
102
+ hdop => 'dop',
103
+ pdop => 'dop',
104
+ vdop => 'dop',
105
+ );
96
106
 
97
107
  # tags which may exist separately in some formats (eg. CSV)
98
- my %sepTags = ( dir => 1, pitch => 1, roll => 1, track => 1, speed => 1 );
108
+ my %sepTags = (
109
+ dir => 1, pitch => 1, roll => 1, track => 1, speed => 1,
110
+ # (plus other tags we don't want to scan outwards for)
111
+ hdop => 1, pdop => 1, vdop => 1,
112
+ );
99
113
 
100
114
  # conversion factors for GPSSpeed (standard EXIF units only)
101
115
  my %speedConv = (
@@ -348,8 +362,8 @@ sub LoadTrackLog($$;$)
348
362
  my $tag = $xmlTag{lc $2};
349
363
  if ($tag) {
350
364
  $$fix{$tag} = $4;
351
- if ($isOrient{$tag}) {
352
- $$has{orient} = 1;
365
+ if ($keyCategory{$tag}) {
366
+ $$has{$keyCategory{$tag}} = 1;
353
367
  } elsif ($tag eq 'alt') {
354
368
  # validate altitude
355
369
  undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
@@ -394,8 +408,8 @@ sub LoadTrackLog($$;$)
394
408
  } else {
395
409
  $$fix{$tag} = $1;
396
410
  }
397
- if ($isOrient{$tag}) {
398
- $$has{orient} = 1;
411
+ if ($keyCategory{$tag}) {
412
+ $$has{$keyCategory{$tag}} = 1;
399
413
  } elsif ($tag eq 'alt') {
400
414
  # validate altitude
401
415
  undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
@@ -1145,7 +1159,7 @@ sub SetGeoValues($$;$)
1145
1159
  # loop through available fix information categories
1146
1160
  # (pos, track, alt, orient)
1147
1161
  my ($category, $key);
1148
- Category: foreach $category (qw{pos track alt orient atemp err}) {
1162
+ Category: foreach $category (qw{pos track alt orient atemp err dop}) {
1149
1163
  next unless $$has{$category};
1150
1164
  my ($f, $p0b, $p1b, $f0b);
1151
1165
  # loop through specific fix information keys
@@ -1303,6 +1317,25 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
1303
1317
  if ($$has{err}) {
1304
1318
  @r = $et->SetNewValue(GPSHPositioningError => $$fix{err}, %opts);
1305
1319
  }
1320
+ if ($$has{dop}) {
1321
+ my ($dop, $mm);
1322
+ if (defined $$fix{pdop}) {
1323
+ $dop = $$fix{pdop};
1324
+ $mm = 3;
1325
+ } elsif (defined $$fix{hdop}) {
1326
+ if (defined $$fix{vdop}) {
1327
+ $dop = sqrt($$fix{hdop} * $$fix{hdop} + $$fix{vdop} * $$fix{vdop});
1328
+ $mm = 3;
1329
+ } else {
1330
+ $dop = $$fix{hdop};
1331
+ $mm = 2;
1332
+ }
1333
+ }
1334
+ if (defined $dop) {
1335
+ $et->SetNewValue(GPSMeasureMode => $mm, %opts);
1336
+ $et->SetNewValue(GPSDOP => $dop, %opts);
1337
+ }
1338
+ }
1306
1339
  unless ($xmp) {
1307
1340
  my ($latRef, $lonRef);
1308
1341
  $latRef = ($$fix{lat} > 0 ? 'N' : 'S') if defined $$fix{lat};
@@ -1328,7 +1361,8 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
1328
1361
  GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
1329
1362
  GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection
1330
1363
  GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle
1331
- AmbientTemperature GPSHPositioningError GPSCoordinates))
1364
+ AmbientTemperature GPSHPositioningError GPSCoordinates
1365
+ GPSMeasureMode GPSDOP))
1332
1366
  {
1333
1367
  my @r = $et->SetNewValue($_, undef, %opts);
1334
1368
  }
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::QuickTime;
18
18
 
19
- $VERSION = '1.09';
19
+ $VERSION = '1.10';
20
20
 
21
21
  sub ProcessGoPro($$$);
22
22
  sub ProcessString($$$);
@@ -72,6 +72,7 @@ my %addUnits = (
72
72
  let me know if you discover the meaning of any of these unknown tags. See
73
73
  L<https://github.com/gopro/gpmf-parser> for details about this format.
74
74
  },
75
+ # ABSC (GPMF) - seen: 0 (fmt f)
75
76
  ACCL => { #2 (gpmd)
76
77
  Name => 'Accelerometer',
77
78
  Notes => 'accelerator readings in m/s2',
@@ -81,7 +82,9 @@ my %addUnits = (
81
82
  # ANGY (GPMF-GEOC) - seen 179.9 (fmt d, Max)
82
83
  # ANGZ (GPMF-GEOC) - seen 0.152 (fmt d, Max)
83
84
  ALLD => 'AutoLowLightDuration', #1 (gpmd) (untested)
84
- # APTO (GPMF) - seen: 'RAW', 'DYNM' (fmt c)
85
+ # APTO (GPMF) - seen: 'OFF', 'RAW', 'DYNM' (fmt c)
86
+ # ARUW (GPMF) - seen: 1.14285719394684 (fmt f)
87
+ # ARWA (GPMF) - seen: 1.14285719394684 (fmt f)
85
88
  ATTD => { #PH (Karma)
86
89
  Name => 'Attitude',
87
90
  # UNIT=s,rad,rad,rad,rad/s,rad/s,rad/s,
@@ -96,8 +99,10 @@ my %addUnits = (
96
99
  # SCAL=1000 1 1 1 1
97
100
  Binary => 1,
98
101
  },
102
+ # AUBT (GPMF) - seen: ''N' (type c)
99
103
  AUDO => 'AudioSetting', #PH (GPMF - seen: 'WIND', fmt c)
100
104
  # AUPT (GPMF) - seen: 'N','Y' (fmt c)
105
+ # BITR (GPMF) - seen: 'STANDARD' (fmt c)
101
106
  BPOS => { #PH (Karma)
102
107
  Name => 'Controller',
103
108
  Unknown => 1,
@@ -111,9 +116,16 @@ my %addUnits = (
111
116
  # CALH (GPMF-GEOC) - seen 3040 (fmt L, Max)
112
117
  # CALW (GPMF-GEOC) - seen 4056 (fmt L, Max)
113
118
  CASN => 'CameraSerialNumber', #PH (GPMF - seen: 'C3221324545448', fmt c)
119
+ # CDAT (GPMF) - seen: 1732152823 (fmt J)
120
+ # CDTM (GPMF) - seen: 0 (fmt L)
114
121
  # CINF (GPMF) - seen: 0x67376be7709bc8876a8baf3940908618, 0xe230988539b30cf5f016627ae8fc5395,
115
122
  # 0x8bcbe424acc5b37d7d77001635198b3b (fmt B) (Camera INFormation?)
123
+ # CLDP (GPMF) - seen: 'Y' (fmt c)
124
+ # CLKC (GPMF) - seen: 0 (fmt L)
125
+ # CLKS (GPMF) - seen: 2 (fmt B)
116
126
  # CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B)
127
+ # CPID (GPMF) - seen: '1194885996 3387225026 733916448 2433577768' (fmt L)
128
+ # CPIN (GPMF) - seen: 1
117
129
  # CRTX (GPMF-BACK/FRNT) - double[1]
118
130
  # CRTY (GPMF-BACK/FRNT) - double[1]
119
131
  CSEN => { #PH (Karma)
@@ -123,6 +135,7 @@ my %addUnits = (
123
135
  # SCAL=1000 1 1 1 1 1 1 1 1 1 1
124
136
  Binary => 1,
125
137
  },
138
+ # CTRL (GPMF) - seen: 'Pro' (fmt c)
126
139
  CYTS => { #PH (Karma)
127
140
  Name => 'CoyoteStatus',
128
141
  # UNIT=s,,,,,rad,rad,rad,,
@@ -141,6 +154,8 @@ my %addUnits = (
141
154
  # (Max) DVID='FRNT',DVNM='Front Lens',KLNS,CTRX,CTRY,MFOV,SFTR
142
155
  # (Max) DVID='HLMT',DVNM='Highlights'
143
156
  },
157
+ # DNSC (GPMF) - seen: 'HIGH' (fmt c)
158
+ # DUST (GPMF) - seen: 'NO_LIMIT' (fmt c)
144
159
  # DVID (GPMF) - DeviceID; seen: 1 (fmt L), HLMT (fmt F), GEOC (fmt F), 'BACK' (fmt F, Max)
145
160
  DVID => { Name => 'DeviceID', Unknown => 1 }, #2 (gpmd)
146
161
  # DVNM (GPMF) seen: 'Video Global Settings' (fmt c), 'Highlights' (fmt c), 'Geometry Calibrations' (Max)
@@ -150,6 +165,7 @@ my %addUnits = (
150
165
  Name => 'DigitalZoom',
151
166
  PrintConv => { N => 'No', Y => 'Yes' },
152
167
  },
168
+ # DZMX (GPMF) - seen: 1.39999997615814 (fmt f)
153
169
  # DZST (GPMF) - seen: 0 (fmt L) (something to do with digital zoom maybe?)
154
170
  EISA => { #PH (GPMF) - seen: 'Y','N','HS EIS','N/A' (fmt c) [N was for a time-lapse video]
155
171
  Name => 'ElectronicImageStabilization',
@@ -188,10 +204,20 @@ my %addUnits = (
188
204
  },
189
205
  GPS5 => { #2 (gpmd)
190
206
  Name => 'GPSInfo',
207
+ # UNIT=deg,deg,m,m/s,m/s
208
+ # TYPE=l
191
209
  # SCAL=10000000,10000000,1000,1000,100
192
210
  RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
193
211
  SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS5' },
194
212
  },
213
+ GPS9 => { #PH (gpmd, Hero 13)
214
+ Name => 'GPSInfo9',
215
+ # UNIT=deg,deg,m,m/s,m/s,,s,,
216
+ # TYPE=lllllllSS
217
+ # SCAL=10000000 10000000 1000 1000 100 1 1000 100 1
218
+ RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
219
+ SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS9' },
220
+ },
195
221
  GPSF => { #2 (gpmd)
196
222
  Name => 'GPSMeasureMode',
197
223
  PrintConv => {
@@ -216,7 +242,10 @@ my %addUnits = (
216
242
  Notes => 'gyroscope readings in rad/s',
217
243
  Binary => 1,
218
244
  },
245
+ # HCTL (GPMF) - seen: "Off" (fmt c)
246
+ # HDRV (GPMF) - seen: "N" (fmt c)
219
247
  # HFLG (APP6) - seen: 0
248
+ # HSGT (GPMF) - seen: 'OFF' (fmt c)
220
249
  ISOE => 'ISOSpeeds', #PH (gpmd)
221
250
  ISOG => { #2 (gpmd)
222
251
  Name => 'ImageSensorGain',
@@ -232,6 +261,7 @@ my %addUnits = (
232
261
  },
233
262
  # KLNS (GPMF-BACK/FRNT) - double[5] (fmt d, Max)
234
263
  # LINF (GPMF) - seen: LAJ7061916601668,C3341326002180,C33632245450981 (fmt c) (Lens INFormation?)
264
+ # LMOD (GPMF) - seen: 'NONE' (fmt F)
235
265
  LNED => { #PH (Karma)
236
266
  Name => 'LocalPositionNED',
237
267
  # UNIT=s,m,m,m,m/s,m/s,m/s
@@ -240,14 +270,20 @@ my %addUnits = (
240
270
  Binary => 1,
241
271
  },
242
272
  MAGN => 'Magnetometer', #1 (gpmd) (units of uT)
273
+ # MAPX (GPMF) - seen: 1 (fmt f)
274
+ # MAPY (GPMF) - seen: 1 (fmt f)
243
275
  # MFOV (GPMF-BACK/FRNT) - seen: 100 (fmt d, Max)
244
276
  MINF => { #PH (GPMF - seen: HERO6 Black, fmt c)
245
277
  Name => 'Model',
246
278
  Groups => { 2 => 'Camera' },
247
279
  Description => 'Camera Model Name',
248
280
  },
281
+ # MMOD (GPMF) - seen: 'STEREO' (fmt c)
249
282
  # MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B)
250
283
  # MUID (GPMF) - seen: 3882563431 2278071152 967805802 411471936 0 0 0 0 (fmt L)
284
+ # MXCF (GPMF) - seen: 'x1' (fmt c)
285
+ # MYCF (GPMF) - seen: 'y1' (fmt c)
286
+ # ORDP (GPMF) - seen: 'Y' (fmt c)
251
287
  OREN => { #PH (GPMF - seen: 'U', fmt c)
252
288
  Name => 'AutoRotation',
253
289
  PrintConv => {
@@ -258,11 +294,16 @@ my %addUnits = (
258
294
  },
259
295
  # (most of the "P" tags are ProTune settings - PH)
260
296
  PHDR => 'HDRSetting', #PH (APP6 - seen: 0)
297
+ # PIMD (GPMF) - seen: 'AUTO' (fmt c)
261
298
  PIMN => 'AutoISOMin', #PH (GPMF - seen: 100, fmt L)
262
299
  PIMX => 'AutoISOMax', #PH (GPMF - seen: 1600, fmt L)
300
+ # POLY (GPMF) - seen: '0 2.11120247840881 0.14325800538063 -1.030...' (fmt f)
263
301
  # PRAW (APP6) - seen: 0, 'N', 'Y' (fmt c)
302
+ # PRCN (GPMF) - seen: 65 zeros (fmt B)
264
303
  PRES => 'PhotoResolution', #PH (APP6 - seen: '12MP_W')
265
304
  # PRJT (APP6) - seen: 'GPRO','EACO' (fmt F, Hero8, Max)
305
+ # PRNA (GPMF) - seen 10 (fmt B)
306
+ # PRNU (GPMF) - seen 0 (fmt B)
266
307
  PRTN => { #PH (GPMF - seen: 'N', fmt c)
267
308
  Name => 'ProTune',
268
309
  PrintConv => {
@@ -275,6 +316,9 @@ my %addUnits = (
275
316
  PTSH => 'Sharpness', #PH (GPMF - seen: 'HIGH', fmt c)
276
317
  PTWB => 'WhiteBalance', #PH (GPMF - seen: 'AUTO', fmt c)
277
318
  # PVUL (APP6) - seen: 'F' (fmt c, Hero8, Max)
319
+ # PWPR (GPMF) - seen: 'PERFORMANCE' (fmt c)
320
+ # PYCF (GPMF) - seen: '[r0,r1,r2,r3,r4,r5,r6]' (fmt c)
321
+ # RAMP (GPMF) - seen: empty string (fmt c)
278
322
  RATE => 'Rate', #PH (GPMF - seen: '0_5SEC', fmt c; APP6 - seen: '4_1SEC')
279
323
  RMRK => { #2 (gpmd)
280
324
  Name => 'Comments',
@@ -284,6 +328,7 @@ my %addUnits = (
284
328
  Name => 'ScaleFactor',
285
329
  Unknown => 1,
286
330
  },
331
+ # SCAP (GPMF) - seen: 'N' (fmt c)
287
332
  SCPR => { #PH (Karma) [stream was empty]
288
333
  Name => 'ScaledPressure',
289
334
  # UNIT=s,Pa,Pa,degC
@@ -291,6 +336,7 @@ my %addUnits = (
291
336
  # SCAL=1000 0.00999999977648258 0.00999999977648258 100
292
337
  %addUnits,
293
338
  },
339
+ # SCTM (GPMF) - seen 0 (fmt L)
294
340
  # SFTR (GPMF-BACK/FRNT) - seen 0.999,1.00004 (fmt d, Max)
295
341
  # SHFX (GPMF-GEOC) - seen 22.92 (fmt d, Max)
296
342
  # SHFY (GPMF-GEOC) - seen 0.123 (fmt d, Max)
@@ -355,6 +401,10 @@ my %addUnits = (
355
401
  # TOCK => { Name => 'OutTime', Unknown => 1, ValueConv => '$val/1000' }, #1 (gpmd)
356
402
  TSMP => { Name => 'TotalSamples', Unknown => 1 }, #2 (gpmd)
357
403
  TYPE => { Name => 'StructureType', Unknown => 1 }, #2 (gpmd,GPMF - eg 'LLLllfFff', fmt c)
404
+ TZON => { # (GPMF) - seen: 60 (fmt s)
405
+ Name => 'TimeZone',
406
+ PrintConv => 'Image::ExifTool::TimeZoneString($val)',
407
+ },
358
408
  UNIT => { #2 (gpmd) alternative units
359
409
  Name => 'Units',
360
410
  Unknown => 1,
@@ -373,6 +423,7 @@ my %addUnits = (
373
423
  },
374
424
  },
375
425
  # VLTA (GPMF) - seen: 78 ('N') (fmt B -- wrong format?)
426
+ # VFPS (GPMF) - seen: '24000 1001' (fmt L)
376
427
  VFRH => { #PH (Karma)
377
428
  Name => 'VisualFlightRulesHUD',
378
429
  BinaryData => 1,
@@ -380,13 +431,17 @@ my %addUnits = (
380
431
  # TYPE=ffffsS
381
432
  },
382
433
  # VLTE (GPMF) - seen: 'Y','N' (fmt c)
434
+ # VRES (GPMF) - seen: '3840 3660' (fmt L)
383
435
  WBAL => 'ColorTemperatures', #PH (gpmd)
384
436
  WRGB => { #PH (gpmd)
385
437
  Name => 'WhiteBalanceRGB',
386
438
  Binary => 1,
387
439
  },
388
440
  # ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
389
- # the following ref forum12825
441
+ # ZMPL (GPMF) - seen: 0.652929663658142 (fmt f)
442
+ #
443
+ # the following ref forum12825
444
+ #
390
445
  MUID => {
391
446
  Name => 'MediaUniqueID',
392
447
  PrintConv => q{
@@ -418,7 +473,7 @@ my %addUnits = (
418
473
  YAVG => 'LumaAverage',
419
474
  );
420
475
 
421
- # GoPro GPS5 tags (ref 2) (Hero5,Hero6)
476
+ # GoPro GPS5 tags (ref 2) (Hero5,Hero6,Hero9)
422
477
  %Image::ExifTool::GoPro::GPS5 = (
423
478
  PROCESS_PROC => \&ProcessString,
424
479
  GROUPS => { 1 => 'GoPro', 2 => 'Location' },
@@ -435,8 +490,65 @@ my %addUnits = (
435
490
  Name => 'GPSAltitude',
436
491
  PrintConv => '"$val m"',
437
492
  },
438
- 3 => 'GPSSpeed', # (unit='m/s')
439
- 4 => 'GPSSpeed3D', # (unit='m/s')
493
+ 3 => {
494
+ Name => 'GPSSpeed',
495
+ Notes => 'stored as m/s but converted to km/h when extracted',
496
+ ValueConv => '$val * 3.6',
497
+ },
498
+ 4 => {
499
+ Name => 'GPSSpeed3D',
500
+ Notes => 'stored as m/s but converted to km/h when extracted',
501
+ ValueConv => '$val * 3.6',
502
+ },
503
+ );
504
+
505
+ # GoPro GPS9 tags (Hero13)
506
+ %Image::ExifTool::GoPro::GPS9 = (
507
+ PROCESS_PROC => \&ProcessString,
508
+ GROUPS => { 1 => 'GoPro', 2 => 'Location' },
509
+ VARS => { HEX_ID => 0, ID_LABEL => 'Index' },
510
+ 0 => { # (unit='deg')
511
+ Name => 'GPSLatitude',
512
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
513
+ },
514
+ 1 => { # (unit='deg')
515
+ Name => 'GPSLongitude',
516
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
517
+ },
518
+ 2 => { # (unit='m')
519
+ Name => 'GPSAltitude',
520
+ PrintConv => '"$val m"',
521
+ },
522
+ 3 => {
523
+ Name => 'GPSSpeed',
524
+ Notes => 'stored as m/s but converted to km/h when extracted',
525
+ ValueConv => '$val * 3.6',
526
+ },
527
+ 4 => {
528
+ Name => 'GPSSpeed3D',
529
+ Notes => 'stored as m/s but converted to km/h when extracted',
530
+ ValueConv => '$val * 3.6',
531
+ },
532
+ 5 => { # days since 2000
533
+ Name => 'GPSDays',
534
+ RawConv => '$$self{GPSDays} = $val; undef',
535
+ Hidden => 1,
536
+ },
537
+ 6 => { # seconds of date/time
538
+ Name => 'GPSDateTime',
539
+ Groups => { 2 => 'Time' },
540
+ # (10957 days from Jan 1 1970 to Jan 1 2000)
541
+ RawConv => 'ConvertUnixTime(($$self{GPSDays} + 10957) * 24 * 3600 + $val, undef, 3)',
542
+ PrintConv => '$self->ConvertDateTime($val)',
543
+ },
544
+ 7 => 'GPSDOP',
545
+ 8 => {
546
+ Name => 'GPSMeasureMode', #PH (NC)
547
+ PrintConv => {
548
+ 2 => '2-Dimensional Measurement',
549
+ 3 => '3-Dimensional Measurement',
550
+ },
551
+ },
440
552
  );
441
553
 
442
554
  # GoPro GPRI tags (ref PH) (Karma)
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
14
14
  use Image::ExifTool::XMP;
15
15
  use Image::ExifTool::ZIP;
16
16
 
17
- $VERSION = '1.08';
17
+ $VERSION = '1.09';
18
18
 
19
19
  # test for recognized OOXML document extensions
20
20
  my %isOOXML = (
@@ -360,12 +360,12 @@ sub ProcessDOCX($$)
360
360
  }
361
361
  # process XML files (docProps/app.xml, docProps/core.xml, docProps/custom.xml)
362
362
  my %dirInfo = (
363
- DataPt => \$buff,
364
- DirLen => length $buff,
365
- DataLen => length $buff,
366
- XMPParseOpts => {
367
- FoundProc => \&FoundTag,
368
- },
363
+ DataPt => \$buff,
364
+ DirLen => length $buff,
365
+ # (skip over XML header if it exists)
366
+ DirStart => ($buff =~ /<\?xml\s+.*?\?>/g ? pos($buff) : 0),
367
+ DataLen => length $buff,
368
+ XMPParseOpts => { FoundProc => \&FoundTag },
369
369
  );
370
370
  $et->ProcessDirectory(\%dirInfo, $tagTablePtr);
371
371
  undef $buff; # (free memory now)
@@ -28,7 +28,7 @@ use strict;
28
28
  use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
29
29
  use Image::ExifTool qw(:DataAccess :Utils);
30
30
 
31
- $VERSION = '1.70';
31
+ $VERSION = '1.71';
32
32
 
33
33
  sub ProcessPhotoshop($$$);
34
34
  sub WritePhotoshop($$$);
@@ -322,7 +322,7 @@ my %unicodeString = (
322
322
  0x0432 => { Unknown => 1, Name => 'MeasurementScale' }, #7
323
323
  0x0433 => { Unknown => 1, Name => 'TimelineInfo' }, #7
324
324
  0x0434 => { Unknown => 1, Name => 'SheetDisclosure' }, #7
325
- 0x0435 => { Unknown => 1, Name => 'DisplayInfo' }, #7
325
+ 0x0435 => { Unknown => 1, Name => 'ChannelOptions' }, #7/forum16762
326
326
  0x0436 => { Unknown => 1, Name => 'OnionSkins' }, #7
327
327
  0x0438 => { Unknown => 1, Name => 'CountInfo' }, #7
328
328
  0x043a => { Unknown => 1, Name => 'PrintInfo2' }, #7
@@ -109,7 +109,7 @@ my %insvLimit = (
109
109
  The tags below are extracted from timed metadata in QuickTime and other
110
110
  formats of video files when the ExtractEmbedded option is used. Although
111
111
  most of these tags are combined into the single table below, ExifTool
112
- currently reads 78 different formats of timed GPS metadata from video files.
112
+ currently reads 82 different formats of timed GPS metadata from video files.
113
113
  },
114
114
  VARS => { NO_ID => 1 },
115
115
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
@@ -8434,6 +8434,7 @@ my %tagExists = (
8434
8434
  'channelcoarsegainadjust' => 1,
8435
8435
  'channelmode' => 1,
8436
8436
  'channelnumber' => 1,
8437
+ 'channeloptions' => 1,
8437
8438
  'channelusage' => 1,
8438
8439
  'chapter' => 1,
8439
8440
  'chaptercount' => 1,
@@ -9752,6 +9753,7 @@ my %tagExists = (
9752
9753
  'gpshomelongitude' => 1,
9753
9754
  'gpshorizontalaccuracy' => 1,
9754
9755
  'gpsinfo' => 1,
9756
+ 'gpsinfo9' => 1,
9755
9757
  'gpslatitude2' => 1,
9756
9758
  'gpslatituderaw' => 1,
9757
9759
  'gpslog' => 1,
@@ -12212,6 +12214,7 @@ my %tagExists = (
12212
12214
  'signature' => 1,
12213
12215
  'signature_name' => 1,
12214
12216
  'signatureformat' => 1,
12217
+ 'signaturelength' => 1,
12215
12218
  'signatureusagerights' => 1,
12216
12219
  'signercontactinfo' => 1,
12217
12220
  'significantbits' => 1,
@@ -12784,6 +12787,7 @@ my %tagExists = (
12784
12787
  'uninitializeddatasize' => 1,
12785
12788
  'uniquefileidentifier' => 1,
12786
12789
  'uniqueid' => 1,
12790
+ 'uniqueidentifier' => 1,
12787
12791
  'unknown' => 1,
12788
12792
  'unknown00' => 1,
12789
12793
  'unknown01' => 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 28175 tags, with 17499 unique tag names.
15
+ They contain a total of 28187 tags, with 17502 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
@@ -6168,11 +6168,12 @@ These tags belong to the ExifTool XMP-seal family 1 group.
6168
6168
 
6169
6169
  =head3 XMP SEAL Tags
6170
6170
 
6171
- These tags are used in SEAL content authentification, which is actually XML
6172
- format, not XMP. ExifTool has read/delete support for SEAL information in
6173
- JPG, TIFF, XMP, PNG, WEBP, HEIC, PPM, MOV and MP4 files, and read-only
6174
- support in PDF, MKV and WAV. Use C<-seal:all=> on the command line to
6175
- delete SEAL information in supported formats.
6171
+ These tags are used in SEAL (Secure Evidence Attribution Label) content
6172
+ authentification, which is actually XML format, not XMP. ExifTool has
6173
+ read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
6174
+ PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
6175
+ C<-seal:all=> on the command line to delete SEAL information in supported
6176
+ formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
6176
6177
 
6177
6178
  Tag ID Tag Name Writable
6178
6179
  ------ -------- --------
@@ -6180,12 +6181,15 @@ delete SEAL information in supported formats.
6180
6181
  'copyright' Copyright no
6181
6182
  'd' Domain no
6182
6183
  'da' DigestAlgorithm no
6184
+ 'id' Identifier no
6183
6185
  'info' SEALComment no
6184
6186
  'ka' KeyAlgorithm no
6185
6187
  'kv' KeyVersion no
6186
6188
  's' Signature no
6187
6189
  'seal' SEALVersion no
6188
6190
  'sf' SignatureFormat no
6191
+ 'sl' SignatureLength no
6192
+ 'uid' UniqueIdentifier no
6189
6193
 
6190
6194
  =head3 XMP swf Tags
6191
6195
 
@@ -8873,7 +8877,7 @@ access to this information.
8873
8877
  0x0432 MeasurementScale? no
8874
8878
  0x0433 TimelineInfo? no
8875
8879
  0x0434 SheetDisclosure? no
8876
- 0x0435 DisplayInfo? no
8880
+ 0x0435 ChannelOptions? no
8877
8881
  0x0436 OnionSkins? no
8878
8882
  0x0438 CountInfo? no
8879
8883
  0x043a PrintInfo2? no
@@ -24715,6 +24719,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
24715
24719
  'GLPI' GPSPos GoPro GLPI
24716
24720
  'GPRI' GPSRaw? GoPro GPRI
24717
24721
  'GPS5' GPSInfo GoPro GPS5
24722
+ 'GPS9' GPSInfo9 GoPro GPS9
24718
24723
  'GPSA' GPSAltitudeSystem no
24719
24724
  'GPSF' GPSMeasureMode no
24720
24725
  'GPSP' GPSHPositioningError no
@@ -24760,6 +24765,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
24760
24765
  'TMPC' CameraTemperature no
24761
24766
  'TSMP' TotalSamples? no
24762
24767
  'TYPE' StructureType? no
24768
+ 'TZON' TimeZone no
24763
24769
  'UNIF' InputUniformity no
24764
24770
  'UNIT' Units? no
24765
24771
  'VERS' MetadataVersion no
@@ -24804,6 +24810,19 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
24804
24810
  3 GPSSpeed no
24805
24811
  4 GPSSpeed3D no
24806
24812
 
24813
+ =head3 GoPro GPS9 Tags
24814
+
24815
+ Index Tag Name Writable
24816
+ ----- -------- --------
24817
+ 0 GPSLatitude no
24818
+ 1 GPSLongitude no
24819
+ 2 GPSAltitude no
24820
+ 3 GPSSpeed no
24821
+ 4 GPSSpeed3D no
24822
+ 6 GPSDateTime no
24823
+ 7 GPSDOP no
24824
+ 8 GPSMeasureMode no
24825
+
24807
24826
  =head3 GoPro KBAT Tags
24808
24827
 
24809
24828
  Battery status information found in GoPro Karma videos.
@@ -29943,7 +29962,7 @@ for the official QuickTime specification.
29943
29962
  The tags below are extracted from timed metadata in QuickTime and other
29944
29963
  formats of video files when the ExtractEmbedded option is used. Although
29945
29964
  most of these tags are combined into the single table below, ExifTool
29946
- currently reads 78 different formats of timed GPS metadata from video files.
29965
+ currently reads 82 different formats of timed GPS metadata from video files.
29947
29966
 
29948
29967
  Tag Name Writable
29949
29968
  -------- --------
@@ -2307,19 +2307,23 @@ my %sACDSeeRegionStruct = (
2307
2307
  GROUPS => { 0 => 'XML', 1 => 'SEAL', 2 => 'Document' },
2308
2308
  PROCESS_PROC => \&ProcessSEAL,
2309
2309
  NOTES => q{
2310
- These tags are used in SEAL content authentification, which is actually XML
2311
- format, not XMP. ExifTool has read/delete support for SEAL information in
2312
- JPG, TIFF, XMP, PNG, WEBP, HEIC, PPM, MOV and MP4 files, and read-only
2313
- support in PDF, MKV and WAV. Use C<-seal:all=> on the command line to
2314
- delete SEAL information in supported formats.
2310
+ These tags are used in SEAL (Secure Evidence Attribution Label) content
2311
+ authentification, which is actually XML format, not XMP. ExifTool has
2312
+ read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
2313
+ PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
2314
+ C<-seal:all=> on the command line to delete SEAL information in supported
2315
+ formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
2315
2316
  },
2316
2317
  seal=> 'SEALVersion',
2317
- kv => 'KeyVersion',
2318
2318
  ka => 'KeyAlgorithm',
2319
+ kv => 'KeyVersion',
2319
2320
  da => 'DigestAlgorithm',
2320
- sf => 'SignatureFormat',
2321
- d => 'Domain',
2322
2321
  b => 'ByteRange',
2322
+ d => 'Domain',
2323
+ uid => 'UniqueIdentifier',
2324
+ id => 'Identifier',
2325
+ sf => 'SignatureFormat',
2326
+ sl => 'SignatureLength',
2323
2327
  's' => 'Signature',
2324
2328
  info=> 'SEALComment',
2325
2329
  copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } },
@@ -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 = '13.03';
32
+ $VERSION = '13.04';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -2583,7 +2583,7 @@ sub Options($$;@)
2583
2583
  warn("Can't set $param to undef\n");
2584
2584
  }
2585
2585
  } elsif (lc $param eq 'geodir') {
2586
- $Image::ExifTool::Geolocation::geoDir = $newVal; # (undocumented)
2586
+ $Image::ExifTool::Geolocation::geoDir = $newVal;
2587
2587
  } else {
2588
2588
  if ($param eq 'Escape') {
2589
2589
  # set ESCAPE_PROC
@@ -4404,6 +4404,7 @@ sub DoneExtract($)
4404
4404
  local $SIG{'__WARN__'} = \&SetWarning;
4405
4405
  undef $evalWarning;
4406
4406
  $$opts{GeolocMulti} = $$opts{Duplicates};
4407
+ $self->VPrint(0, "Geolocation arguments: '${arg}'\n");
4407
4408
  my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($arg, $opts);
4408
4409
  delete $$opts{GeolocMulti};
4409
4410
  if ($cities and (@$cities < 2 or $dist or not $self->Warn('Multiple Geolocation cities are possible',2))) {
@@ -8915,6 +8916,7 @@ sub GetTagInfo($$$;$$$)
8915
8916
  my ($valPt, $format, $count);
8916
8917
 
8917
8918
  my @infoArray = GetTagInfoList($tagTablePtr, $tagID);
8919
+ my $options = $$self{OPTIONS};
8918
8920
  # evaluate condition
8919
8921
  my $tagInfo;
8920
8922
  foreach $tagInfo (@infoArray) {
@@ -8933,9 +8935,9 @@ sub GetTagInfo($$$;$$$)
8933
8935
  }
8934
8936
  }
8935
8937
  # don't return Unknown tags unless that option is set (also see forum13716)
8936
- if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not
8937
- ($$self{OPTIONS}{Verbose} or $$self{HTML_DUMP} or
8938
- ($$self{OPTIONS}{Validate} and not $$tagInfo{AddedUnknown})))
8938
+ if ($$tagInfo{Unknown} and not $$options{Unknown} and not
8939
+ ($$options{Verbose} or $$self{HTML_DUMP} or
8940
+ ($$options{Validate} and not $$tagInfo{AddedUnknown})))
8939
8941
  {
8940
8942
  return undef;
8941
8943
  }
@@ -8943,7 +8945,7 @@ sub GetTagInfo($$$;$$$)
8943
8945
  return $tagInfo;
8944
8946
  }
8945
8947
  # generate information for unknown tags (numerical only) if required
8946
- if (not $tagInfo and ($$self{OPTIONS}{Unknown} or $$self{OPTIONS}{Verbose}) and
8948
+ if (not $tagInfo and ($$options{Unknown} or $$options{Verbose} or $$self{HTML_DUMP}) and
8947
8949
  $tagID =~ /^\d+$/ and not $$self{NO_UNKNOWN})
8948
8950
  {
8949
8951
  my $printConv;
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.03
3
+ Version: 13.04
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('13.03.0')
4
+ VERSION = Gem::Version.new('13.04.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: 13.03.0
4
+ version: 13.04.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-11-17 00:00:00.000000000 Z
12
+ date: 2024-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool