exiftool-vendored.pl 12.41.0 → 12.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/bin/Changes +60 -1
  2. package/bin/META.json +1 -1
  3. package/bin/META.yml +1 -1
  4. package/bin/README +2 -2
  5. package/bin/exiftool +5 -4
  6. package/bin/lib/Image/ExifTool/Apple.pm +11 -2
  7. package/bin/lib/Image/ExifTool/Canon.pm +39 -24
  8. package/bin/lib/Image/ExifTool/DJI.pm +60 -1
  9. package/bin/lib/Image/ExifTool/DNG.pm +8 -2
  10. package/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
  11. package/bin/lib/Image/ExifTool/Exif.pm +9 -0
  12. package/bin/lib/Image/ExifTool/FlashPix.pm +23 -2
  13. package/bin/lib/Image/ExifTool/FujiFilm.pm +23 -2
  14. package/bin/lib/Image/ExifTool/GPS.pm +21 -1
  15. package/bin/lib/Image/ExifTool/Geotag.pm +24 -4
  16. package/bin/lib/Image/ExifTool/ICC_Profile.pm +10 -8
  17. package/bin/lib/Image/ExifTool/ID3.pm +5 -5
  18. package/bin/lib/Image/ExifTool/LNK.pm +5 -2
  19. package/bin/lib/Image/ExifTool/MakerNotes.pm +5 -0
  20. package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
  21. package/bin/lib/Image/ExifTool/Nikon.pm +84 -29
  22. package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
  23. package/bin/lib/Image/ExifTool/Olympus.pm +21 -2
  24. package/bin/lib/Image/ExifTool/PDF.pm +2 -1
  25. package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
  26. package/bin/lib/Image/ExifTool/Parrot.pm +96 -2
  27. package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  28. package/bin/lib/Image/ExifTool/Photoshop.pm +6 -5
  29. package/bin/lib/Image/ExifTool/QuickTime.pm +7 -1
  30. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +41 -6
  31. package/bin/lib/Image/ExifTool/README +8 -2
  32. package/bin/lib/Image/ExifTool/Samsung.pm +233 -2
  33. package/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
  34. package/bin/lib/Image/ExifTool/Sony.pm +36 -28
  35. package/bin/lib/Image/ExifTool/TagLookup.pm +2528 -2483
  36. package/bin/lib/Image/ExifTool/TagNames.pod +192 -97
  37. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
  38. package/bin/lib/Image/ExifTool/Writer.pl +4 -3
  39. package/bin/lib/Image/ExifTool.pm +40 -16
  40. package/bin/lib/Image/ExifTool.pod +13 -4
  41. package/bin/perl-Image-ExifTool.spec +1 -1
  42. package/bin/pp_build_exe.args +4 -4
  43. package/package.json +3 -3
@@ -6,14 +6,16 @@
6
6
  # Revisions: 2019-10-23 - P. Harvey Created
7
7
  #
8
8
  # References: 1) https://developer.parrot.com/docs/pdraw/metadata.html
9
+ # --> changed to https://developer.parrot.com/docs/pdraw/video-metadata.html
9
10
  #------------------------------------------------------------------------------
10
11
 
11
12
  package Image::ExifTool::Parrot;
12
13
 
13
14
  use strict;
14
15
  use vars qw($VERSION);
16
+ use Image::ExifTool qw(:DataAccess :Utils);
15
17
 
16
- $VERSION = '1.01';
18
+ $VERSION = '1.02';
17
19
 
18
20
  sub Process_mett($$$);
19
21
 
@@ -21,7 +23,10 @@ sub Process_mett($$$);
21
23
  %Image::ExifTool::Parrot::mett = (
22
24
  PROCESS_PROC => \&Process_mett,
23
25
  # put the 'P' records first in the documentation
24
- VARS => { SORT_PROC => sub { my ($a,$b)=@_; $a=~s/P/A/; $b=~s/P/A/; $a cmp $b } },
26
+ VARS => {
27
+ SORT_PROC => sub { my ($a,$b)=@_; $a=~s/P/A/; $b=~s/P/A/; $a cmp $b },
28
+ LONG_TAGS => 1
29
+ },
25
30
  NOTES => q{
26
31
  Streaming metadata found in Parrot drone videos. See
27
32
  L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
@@ -51,6 +56,23 @@ sub Process_mett($$$);
51
56
  Name => 'ParrotAutomation',
52
57
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
53
58
  },
59
+ # timed metadata written by ARCore (see forum13653)
60
+ 'application/arcore-accel' => {
61
+ Name => 'ARCoreAccel',
62
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
63
+ },
64
+ 'application/arcore-gyro' => {
65
+ Name => 'ARCoreGyro',
66
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
67
+ },
68
+ 'application/arcore-video-0' => {
69
+ Name => 'ARCoreVideo',
70
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
71
+ },
72
+ 'application/arcore-custom-event' => {
73
+ Name => 'ARCoreCustom',
74
+ SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreCustom', ByteOrder => 'II' },
75
+ },
54
76
  );
55
77
 
56
78
  # tags found in the Parrot 'mett' V1 timed metadata (ref 1) [untested]
@@ -629,6 +651,69 @@ sub Process_mett($$$);
629
651
  },
630
652
  );
631
653
 
654
+ # ARCore Accel data (ref PH)
655
+ %Image::ExifTool::Parrot::ARCoreAccel = (
656
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
657
+ GROUPS => { 2 => 'Location' },
658
+ NOTES => 'ARCore accelerometer data.',
659
+ FIRST_ENTRY => 0,
660
+ # 00-04: always 10 34 16 1 29
661
+ 4 => {
662
+ Name => 'AccelerometerUnknown',
663
+ Format => 'undef[16]',
664
+ Unknown => 1,
665
+ ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
666
+ },
667
+ 5 => { # (NC)
668
+ Name => 'Accelerometer',
669
+ Format => 'undef[14]',
670
+ RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
671
+ },
672
+ # 05-08: float Accelerometer X
673
+ # 09: 37
674
+ # 10-13: float Accelerometer Y
675
+ # 14: 45
676
+ # 15-18: float Accelerometer Z
677
+ # 19: 48
678
+ # 20-24: 128-255
679
+ # 25: 246 then 247
680
+ # 26: 188
681
+ # 27: 2
682
+ # 28: 56
683
+ # 29-32: 128-255
684
+ # 33: increments slowly (about once every 56 samples or so)
685
+ );
686
+
687
+ # ARCore Gyro data (ref PH)
688
+ %Image::ExifTool::Parrot::ARCoreGyro = (
689
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
690
+ GROUPS => { 2 => 'Location' },
691
+ NOTES => 'ARCore accelerometer data.',
692
+ FIRST_ENTRY => 0,
693
+ # 00-04: always 10 34 16 3 29
694
+ 4 => {
695
+ Name => 'GyroscopeUnknown',
696
+ Format => 'undef[16]',
697
+ Unknown => 1, # always "29 37 45 48" in my sample, just like AccelerometerUnknown
698
+ ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
699
+ },
700
+ 5 => { # (NC)
701
+ Name => 'Gyroscope',
702
+ Format => 'undef[14]',
703
+ RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
704
+ },
705
+ );
706
+
707
+ %Image::ExifTool::Parrot::ARCoreVideo = (
708
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
709
+ FIRST_ENTRY => 0,
710
+ );
711
+
712
+ %Image::ExifTool::Parrot::ARCoreCustom = (
713
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
714
+ FIRST_ENTRY => 0,
715
+ );
716
+
632
717
  %Image::ExifTool::Parrot::Composite = (
633
718
  GPSDateTime => {
634
719
  Description => 'GPS Date/Time',
@@ -676,9 +761,18 @@ sub Process_mett($$$)
676
761
  my $dataPos = $$dirInfo{DataPos};
677
762
  my $dirEnd = length $$dataPt;
678
763
  my $pos = $$dirInfo{DirStart} || 0;
764
+ my $metaType = $$et{MetaType} || '';
679
765
 
680
766
  $et->VerboseDir('Parrot mett', undef, $dirEnd);
681
767
 
768
+ if ($$tagTbl{$metaType}) {
769
+ $et->HandleTag($tagTbl, $metaType, undef,
770
+ DataPt => $dataPt,
771
+ DataPos => $dataPos,
772
+ Base => $$dirInfo{Base},
773
+ );
774
+ return 1;
775
+ }
682
776
  while ($pos + 4 < $dirEnd) {
683
777
  my ($id, $nwords) = unpack("x${pos}a2n", $$dataPt);
684
778
  my $size;
@@ -171,7 +171,7 @@ sub DecodeAFPoints($$$$;$);
171
171
  '3 255.4' => 'Sigma DF EX Aspherical 28-70mm F2.8', #12
172
172
  '3 255.5' => 'Sigma AF Tele 400mm F5.6 Multi-coated', #JD
173
173
  '3 255.6' => 'Sigma 24-60mm F2.8 EX DG', #PH
174
- '3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD
174
+ '3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD (also DG Macro, ref 27)
175
175
  '3 255.8' => 'Sigma 55-200mm F4-5.6 DC', #JD
176
176
  '3 255.9' => 'Sigma 18-50mm F2.8 EX DC', #JD (also Macro version - PH)
177
177
  '4 1' => 'smc PENTAX-FA SOFT 28mm F2.8',
@@ -248,11 +248,12 @@ my %unicodeString = (
248
248
  Protected => 1,
249
249
  Notes => q{
250
250
  this tag indicates provides a way for XMP-aware applications to indicate
251
- that the XMP is synchronized with the IPTC. When writing, special values of
252
- "new" and "old" represent the digests of the IPTC from the edited and
253
- original files respectively, and are undefined if the IPTC does not exist in
254
- the respective file. Set this to "new" as an indication that the XMP is
255
- synchronized with the IPTC
251
+ that the XMP is synchronized with the IPTC. The MWG recommendation is to
252
+ ignore the XMP if IPTCDigest exists and doesn't match the CurrentIPTCDigest.
253
+ When writing, special values of "new" and "old" represent the digests of the
254
+ IPTC from the edited and original files respectively, and are undefined if
255
+ the IPTC does not exist in the respective file. Set this to "new" as an
256
+ indication that the XMP is synchronized with the IPTC
256
257
  },
257
258
  # also note the 'new' feature requires that the IPTC comes before this tag is written
258
259
  ValueConv => 'unpack("H*", $val)',
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.74';
50
+ $VERSION = '2.75';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -7516,6 +7516,12 @@ my %eeBox2 = (
7516
7516
  Format => 'undef[4]',
7517
7517
  RawConv => '$$self{MetaFormat} = $val',
7518
7518
  },
7519
+ 8 => { # starts at 8 for MetaFormat eq 'camm', and 17 for 'mett'
7520
+ Name => 'MetaType',
7521
+ Format => 'undef[$size-8]',
7522
+ # may start at various locations!
7523
+ RawConv => '$$self{MetaType} = ($val=~/(application[^\0]+)/ ? $1 : undef)',
7524
+ },
7519
7525
  #
7520
7526
  # Observed offsets for child atoms of various MetaFormat types:
7521
7527
  #
@@ -80,7 +80,7 @@ my %processByMetaFormat = (
80
80
 
81
81
  # data lengths for each INSV record type
82
82
  my %insvDataLen = (
83
- 0x300 => 56, # accelerometer
83
+ 0x300 => 0, # accelerometer (could be either 20 or 56 bytes)
84
84
  0x400 => 16, # exposure (ref 6)
85
85
  0x600 => 8, # timestamps (ref 6)
86
86
  0x700 => 53, # GPS
@@ -1527,7 +1527,7 @@ sub ProcessFreeGPS($$$)
1527
1527
  $spd = $9 * $knotsToKph if length $9;
1528
1528
  $trk = $10 if length $10;
1529
1529
 
1530
- } elsif ($$dataPt =~ /^.{64}[\x01-\x0c]\0{3}[\x01-\x1f]\0{3}A[NS][EW]\0/s) {
1530
+ } elsif ($$dataPt =~ /^.{64}[\x01-\x0c]\0{3}[\x01-\x1f]\0{3}A[NS][EW]\0{5}/s) {
1531
1531
 
1532
1532
  # Akaso V1 dascham
1533
1533
  # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 00 00 00 [....freeGPS x...]
@@ -1624,6 +1624,9 @@ sub ProcessFreeGPS($$$)
1624
1624
  # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
1625
1625
  # 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
1626
1626
  # 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
1627
+ # 0030: 10 00 00 00 2d 00 00 00 14 00 00 00 11 00 00 00 [....-...........]
1628
+ # 0040: 0c 00 00 00 1f 00 00 00 41 4e 45 00 5d 9a a9 45 [........ANE.]..E]
1629
+ # 0050: ab 1e e5 44 ec 51 f0 40 b8 5e a5 43 00 00 00 00 [...D.Q.@.^.C....]
1627
1630
  # (records are same structure as Type 3 Novatek GPS in ProcessFreeGPS2() below)
1628
1631
  ($hr,$min,$sec,$yr,$mon,$day,$stat,$latRef,$lonRef,$lat,$lon,$spd,$trk) =
1629
1632
  unpack('x48V6a1a1a1x1V4', $$dataPt);
@@ -2621,8 +2624,33 @@ sub ProcessInsta360($;$)
2621
2624
  if ($verbose) {
2622
2625
  $et->VPrint(0, sprintf("Insta360 Record 0x%x (offset 0x%x, %d bytes):\n", $id, $fileEnd + $epos, $len));
2623
2626
  }
2627
+ # there are 2 types of record 0x300:
2628
+ # 1. 56 byte records
2629
+ # 0000: 4a f7 02 00 00 00 00 00 00 00 00 00 00 1e e7 3f [J..............?]
2630
+ # 0010: 00 00 00 00 00 b2 ef bf 00 00 00 00 00 70 c1 bf [.............p..]
2631
+ # 0020: 00 00 00 e0 91 5c 8c bf 00 00 00 20 8f ff 87 bf [.....\..... ....]
2632
+ # 0030: 00 00 00 00 88 7f c9 bf
2633
+ # 2. 20 byte records
2634
+ # 0000: c1 d8 d9 0b 00 00 00 00 f5 83 14 80 df 7f fe 7f [................]
2635
+ # 0010: fe 7f 01 80
2636
+ if ($id == 0x300) {
2637
+ if ($len % 20 and not $len % 56) {
2638
+ $dlen = 56;
2639
+ } elsif ($len % 56 and not $len % 20) {
2640
+ $dlen = 20;
2641
+ } else {
2642
+ if ($raf->Read($buff, 20) == 20) {
2643
+ if (substr($buff, 16, 3) eq "\0\0\0") {
2644
+ $dlen = 56;
2645
+ } else {
2646
+ $dlen = 20;
2647
+ }
2648
+ }
2649
+ $raf->Seek($epos, 2) or last;
2650
+ }
2651
+ }
2624
2652
  # limit the number of records we read if necessary
2625
- if ($insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
2653
+ if ($dlen and $insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
2626
2654
  $et->Warn("Insta360 $insvLimit{$id}[0] data is huge. Processing only the first $insvLimit{$id}[1] records",2))
2627
2655
  {
2628
2656
  $len = $insvLimit{$id}[1] * $dlen;
@@ -2630,11 +2658,18 @@ sub ProcessInsta360($;$)
2630
2658
  $raf->Read($buff, $len) == $len or last;
2631
2659
  $et->VerboseDump(\$buff) if $verbose > 2;
2632
2660
  if ($dlen) {
2633
- $len % $dlen and $et->Warn(sprintf('Unexpected Insta360 record 0x%x length',$id)), last;
2634
- if ($id == 0x300) {
2661
+ if ($len % $dlen) {
2662
+ $et->Warn(sprintf('Unexpected Insta360 record 0x%x length',$id));
2663
+ } elsif ($id == 0x300) {
2635
2664
  for ($p=0; $p<$len; $p+=$dlen) {
2636
2665
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2637
- my @a = map { GetDouble(\$buff, $p + 8 * $_) } 1..6;
2666
+ my @a;
2667
+ if ($dlen == 56) {
2668
+ @a = map { GetDouble(\$buff, $p + 8 * $_) } 1..6;
2669
+ } else {
2670
+ @a = unpack("x${p}x8v6", $buff);
2671
+ map { $_ = ($_ - 0x8000) / 1000 } @a;
2672
+ }
2638
2673
  $et->HandleTag($tagTbl, TimeCode => sprintf('%.3f', Get64u(\$buff, $p) / 1000));
2639
2674
  $et->HandleTag($tagTbl, Accelerometer => "@a[0..2]"); # (NC)
2640
2675
  $et->HandleTag($tagTbl, AngularVelocity => "@a[3..5]"); # (NC)
@@ -395,7 +395,9 @@ numerical, and generated automatically otherwise.
395
395
  be accessible.
396
396
 
397
397
  'Hidden' - set to hide tag from the TagName documentation.
398
- Also suppresses verbose output of a BinaryData tag.
398
+ Also suppresses verbose output of a BinaryData tag. The
399
+ RawConv of a Hidden tag should return undef so the tag value
400
+ is not seen by the user.
399
401
 
400
402
  'IsComposite' - flag set for Composite tags
401
403
 
@@ -531,7 +533,8 @@ numerical, and generated automatically otherwise.
531
533
  SubIFD's where the PutFirst flag is valid.
532
534
 
533
535
  'Unknown' - this is an unknown tag (only extracted when the
534
- Unknown option is set).
536
+ Unknown option is set). This is set to 2 for Unknown tags in
537
+ binary tables (extracted when Unknown is 2).
535
538
 
536
539
  'WriteNothing' - flag indicating that nothing is actually
537
540
  written when this tag is set. It is a fake writable tag that
@@ -975,6 +978,9 @@ numerical, and generated automatically otherwise.
975
978
  alternate language tags (eg. 'fr'). Only used with formats
976
979
  which support alternate languages (eg. XMP, MIE, etc).
977
980
 
981
+ AddedUnknown : [reserved] Used internally to mark Unknown tags that were
982
+ added to the table at run time.
983
+
978
984
  SubDirectory { If it exists, this specifies the start of a new subdirectory.
979
985
  It contains a collection of variables which specify the type
980
986
  and location of the subdirectory. Note that ValueConv and
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
22
22
  use Image::ExifTool qw(:DataAccess :Utils);
23
23
  use Image::ExifTool::Exif;
24
24
 
25
- $VERSION = '1.51';
25
+ $VERSION = '1.52';
26
26
 
27
27
  sub WriteSTMN($$$);
28
28
  sub ProcessINFO($$$);
@@ -1000,7 +1000,238 @@ my %formatMinMax = (
1000
1000
  '0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
1001
1001
  # 0x0aa1-name - seen 'MCC_Data'
1002
1002
  # 0x0aa1 - seen '204','222','234','302','429'
1003
- '0x0aa1' => 'MCCData', # (unknown meaning)
1003
+ '0x0aa1' => {
1004
+ Name => 'MCCData',
1005
+ Groups => { 2 => 'Location' },
1006
+ PrintConv => {
1007
+ 202 => 'Greece',
1008
+ 204 => 'Netherlands',
1009
+ 206 => 'Belgium',
1010
+ 208 => 'France',
1011
+ 212 => 'Monaco',
1012
+ 213 => 'Andorra',
1013
+ 214 => 'Spain',
1014
+ 216 => 'Hungary',
1015
+ 218 => 'Bosnia & Herzegov.',
1016
+ 219 => 'Croatia',
1017
+ 220 => 'Serbia',
1018
+ 221 => 'Kosovo',
1019
+ 222 => 'Italy',
1020
+ 226 => 'Romania',
1021
+ 228 => 'Switzerland',
1022
+ 230 => 'Czech Rep.',
1023
+ 231 => 'Slovakia',
1024
+ 232 => 'Austria',
1025
+ 234 => 'United Kingdom',
1026
+ 235 => 'United Kingdom',
1027
+ 238 => 'Denmark',
1028
+ 240 => 'Sweden',
1029
+ 242 => 'Norway',
1030
+ 244 => 'Finland',
1031
+ 246 => 'Lithuania',
1032
+ 247 => 'Latvia',
1033
+ 248 => 'Estonia',
1034
+ 250 => 'Russian Federation',
1035
+ 255 => 'Ukraine',
1036
+ 257 => 'Belarus',
1037
+ 259 => 'Moldova',
1038
+ 260 => 'Poland',
1039
+ 262 => 'Germany',
1040
+ 266 => 'Gibraltar',
1041
+ 268 => 'Portugal',
1042
+ 270 => 'Luxembourg',
1043
+ 272 => 'Ireland',
1044
+ 274 => 'Iceland',
1045
+ 276 => 'Albania',
1046
+ 278 => 'Malta',
1047
+ 280 => 'Cyprus',
1048
+ 282 => 'Georgia',
1049
+ 283 => 'Armenia',
1050
+ 284 => 'Bulgaria',
1051
+ 286 => 'Turkey',
1052
+ 288 => 'Faroe Islands',
1053
+ 289 => 'Abkhazia',
1054
+ 290 => 'Greenland',
1055
+ 292 => 'San Marino',
1056
+ 293 => 'Slovenia',
1057
+ 294 => 'Macedonia',
1058
+ 295 => 'Liechtenstein',
1059
+ 297 => 'Montenegro',
1060
+ 302 => 'Canada',
1061
+ 308 => 'St. Pierre & Miquelon',
1062
+ 310 => 'United States / Guam',
1063
+ 311 => 'United States / Guam',
1064
+ 312 => 'United States',
1065
+ 316 => 'United States',
1066
+ 330 => 'Puerto Rico',
1067
+ 334 => 'Mexico',
1068
+ 338 => 'Jamaica',
1069
+ 340 => 'French Guiana / Guadeloupe / Martinique',
1070
+ 342 => 'Barbados',
1071
+ 344 => 'Antigua and Barbuda',
1072
+ 346 => 'Cayman Islands',
1073
+ 348 => 'British Virgin Islands',
1074
+ 350 => 'Bermuda',
1075
+ 352 => 'Grenada',
1076
+ 354 => 'Montserrat',
1077
+ 356 => 'Saint Kitts and Nevis',
1078
+ 358 => 'Saint Lucia',
1079
+ 360 => 'St. Vincent & Gren.',
1080
+ 362 => 'Bonaire, Sint Eustatius and Saba / Curacao / Netherlands Antilles',
1081
+ 363 => 'Aruba',
1082
+ 364 => 'Bahamas',
1083
+ 365 => 'Anguilla',
1084
+ 366 => 'Dominica',
1085
+ 368 => 'Cuba',
1086
+ 370 => 'Dominican Republic',
1087
+ 372 => 'Haiti',
1088
+ 374 => 'Trinidad and Tobago',
1089
+ 376 => 'Turks and Caicos Islands / US Virgin Islands',
1090
+ 400 => 'Azerbaijan',
1091
+ 401 => 'Kazakhstan',
1092
+ 402 => 'Bhutan',
1093
+ 404 => 'India',
1094
+ 405 => 'India',
1095
+ 410 => 'Pakistan',
1096
+ 412 => 'Afghanistan',
1097
+ 413 => 'Sri Lanka',
1098
+ 414 => 'Myanmar (Burma)',
1099
+ 415 => 'Lebanon',
1100
+ 416 => 'Jordan',
1101
+ 417 => 'Syrian Arab Republic',
1102
+ 418 => 'Iraq',
1103
+ 419 => 'Kuwait',
1104
+ 420 => 'Saudi Arabia',
1105
+ 421 => 'Yemen',
1106
+ 422 => 'Oman',
1107
+ 424 => 'United Arab Emirates',
1108
+ 425 => 'Israel / Palestinian Territory',
1109
+ 426 => 'Bahrain',
1110
+ 427 => 'Qatar',
1111
+ 428 => 'Mongolia',
1112
+ 429 => 'Nepal',
1113
+ 430 => 'United Arab Emirates',
1114
+ 431 => 'United Arab Emirates',
1115
+ 432 => 'Iran',
1116
+ 434 => 'Uzbekistan',
1117
+ 436 => 'Tajikistan',
1118
+ 437 => 'Kyrgyzstan',
1119
+ 438 => 'Turkmenistan',
1120
+ 440 => 'Japan',
1121
+ 441 => 'Japan',
1122
+ 450 => 'South Korea',
1123
+ 452 => 'Viet Nam',
1124
+ 454 => 'Hongkong, China',
1125
+ 455 => 'Macao, China',
1126
+ 456 => 'Cambodia',
1127
+ 457 => 'Laos P.D.R.',
1128
+ 460 => 'China',
1129
+ 466 => 'Taiwan',
1130
+ 467 => 'North Korea',
1131
+ 470 => 'Bangladesh',
1132
+ 472 => 'Maldives',
1133
+ 502 => 'Malaysia',
1134
+ 505 => 'Australia',
1135
+ 510 => 'Indonesia',
1136
+ 514 => 'Timor-Leste',
1137
+ 515 => 'Philippines',
1138
+ 520 => 'Thailand',
1139
+ 525 => 'Singapore',
1140
+ 528 => 'Brunei Darussalam',
1141
+ 530 => 'New Zealand',
1142
+ 537 => 'Papua New Guinea',
1143
+ 539 => 'Tonga',
1144
+ 540 => 'Solomon Islands',
1145
+ 541 => 'Vanuatu',
1146
+ 542 => 'Fiji',
1147
+ 544 => 'American Samoa',
1148
+ 545 => 'Kiribati',
1149
+ 546 => 'New Caledonia',
1150
+ 547 => 'French Polynesia',
1151
+ 548 => 'Cook Islands',
1152
+ 549 => 'Samoa',
1153
+ 550 => 'Micronesia',
1154
+ 552 => 'Palau',
1155
+ 553 => 'Tuvalu',
1156
+ 555 => 'Niue',
1157
+ 602 => 'Egypt',
1158
+ 603 => 'Algeria',
1159
+ 604 => 'Morocco',
1160
+ 605 => 'Tunisia',
1161
+ 606 => 'Libya',
1162
+ 607 => 'Gambia',
1163
+ 608 => 'Senegal',
1164
+ 609 => 'Mauritania',
1165
+ 610 => 'Mali',
1166
+ 611 => 'Guinea',
1167
+ 612 => 'Ivory Coast',
1168
+ 613 => 'Burkina Faso',
1169
+ 614 => 'Niger',
1170
+ 615 => 'Togo',
1171
+ 616 => 'Benin',
1172
+ 617 => 'Mauritius',
1173
+ 618 => 'Liberia',
1174
+ 619 => 'Sierra Leone',
1175
+ 620 => 'Ghana',
1176
+ 621 => 'Nigeria',
1177
+ 622 => 'Chad',
1178
+ 623 => 'Central African Rep.',
1179
+ 624 => 'Cameroon',
1180
+ 625 => 'Cape Verde',
1181
+ 626 => 'Sao Tome & Principe',
1182
+ 627 => 'Equatorial Guinea',
1183
+ 628 => 'Gabon',
1184
+ 629 => 'Congo, Republic',
1185
+ 630 => 'Congo, Dem. Rep.',
1186
+ 631 => 'Angola',
1187
+ 632 => 'Guinea-Bissau',
1188
+ 633 => 'Seychelles',
1189
+ 634 => 'Sudan',
1190
+ 635 => 'Rwanda',
1191
+ 636 => 'Ethiopia',
1192
+ 637 => 'Somalia',
1193
+ 638 => 'Djibouti',
1194
+ 639 => 'Kenya',
1195
+ 640 => 'Tanzania',
1196
+ 641 => 'Uganda',
1197
+ 642 => 'Burundi',
1198
+ 643 => 'Mozambique',
1199
+ 645 => 'Zambia',
1200
+ 646 => 'Madagascar',
1201
+ 647 => 'Reunion',
1202
+ 648 => 'Zimbabwe',
1203
+ 649 => 'Namibia',
1204
+ 650 => 'Malawi',
1205
+ 651 => 'Lesotho',
1206
+ 652 => 'Botswana',
1207
+ 653 => 'Swaziland',
1208
+ 654 => 'Comoros',
1209
+ 655 => 'South Africa',
1210
+ 657 => 'Eritrea',
1211
+ 659 => 'South Sudan',
1212
+ 702 => 'Belize',
1213
+ 704 => 'Guatemala',
1214
+ 706 => 'El Salvador',
1215
+ 708 => 'Honduras',
1216
+ 710 => 'Nicaragua',
1217
+ 712 => 'Costa Rica',
1218
+ 714 => 'Panama',
1219
+ 716 => 'Peru',
1220
+ 722 => 'Argentina Republic',
1221
+ 724 => 'Brazil',
1222
+ 730 => 'Chile',
1223
+ 732 => 'Colombia',
1224
+ 734 => 'Venezuela',
1225
+ 736 => 'Bolivia',
1226
+ 738 => 'Guyana',
1227
+ 740 => 'Ecuador',
1228
+ 744 => 'Paraguay',
1229
+ 746 => 'Suriname',
1230
+ 748 => 'Uruguay',
1231
+ 750 => 'Falkland Islands (Malvinas)',
1232
+ 901 => 'International Networks / Satellite Networks',
1233
+ },
1234
+ },
1004
1235
  # 0x0ab0-name - seen 'DualShot_Meta_Info'
1005
1236
  '0x0ab1-name' => {
1006
1237
  Name => 'DepthMapName',
@@ -19,7 +19,7 @@ package Image::ExifTool::Shortcuts;
19
19
  use strict;
20
20
  use vars qw($VERSION);
21
21
 
22
- $VERSION = '1.66';
22
+ $VERSION = '1.67';
23
23
 
24
24
  # this is a special table used to define command-line shortcuts
25
25
  # (documentation Notes may be added for these via %shortcutNotes in BuildTagLookup.pm)
@@ -118,6 +118,7 @@ $VERSION = '1.66';
118
118
  'MakerNoteCasio',
119
119
  'MakerNoteCasio2',
120
120
  'MakerNoteDJI',
121
+ 'MakerNoteDJIInfo',
121
122
  'MakerNoteFLIR',
122
123
  'MakerNoteFujiFilm',
123
124
  'MakerNoteGE',