exiftool-vendored.pl 12.40.0 → 12.43.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 (45) hide show
  1. package/bin/Changes +71 -6
  2. package/bin/META.json +1 -1
  3. package/bin/META.yml +1 -1
  4. package/bin/README +2 -2
  5. package/bin/arg_files/exif2xmp.args +5 -0
  6. package/bin/arg_files/xmp2exif.args +6 -0
  7. package/bin/exiftool +54 -22
  8. package/bin/lib/Image/ExifTool/Apple.pm +11 -2
  9. package/bin/lib/Image/ExifTool/Canon.pm +45 -22
  10. package/bin/lib/Image/ExifTool/DJI.pm +60 -1
  11. package/bin/lib/Image/ExifTool/DNG.pm +8 -2
  12. package/bin/lib/Image/ExifTool/DarwinCore.pm +12 -1
  13. package/bin/lib/Image/ExifTool/Exif.pm +11 -2
  14. package/bin/lib/Image/ExifTool/FlashPix.pm +14 -1
  15. package/bin/lib/Image/ExifTool/FujiFilm.pm +21 -2
  16. package/bin/lib/Image/ExifTool/Geotag.pm +24 -4
  17. package/bin/lib/Image/ExifTool/ICC_Profile.pm +10 -8
  18. package/bin/lib/Image/ExifTool/ID3.pm +5 -5
  19. package/bin/lib/Image/ExifTool/LNK.pm +5 -2
  20. package/bin/lib/Image/ExifTool/MacOS.pm +9 -9
  21. package/bin/lib/Image/ExifTool/MakerNotes.pm +17 -1
  22. package/bin/lib/Image/ExifTool/Nikon.pm +21 -6
  23. package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
  24. package/bin/lib/Image/ExifTool/Olympus.pm +22 -2
  25. package/bin/lib/Image/ExifTool/PDF.pm +2 -1
  26. package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
  27. package/bin/lib/Image/ExifTool/Parrot.pm +1 -0
  28. package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  29. package/bin/lib/Image/ExifTool/Photoshop.pm +6 -5
  30. package/bin/lib/Image/ExifTool/QuickTime.pm +1 -1
  31. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +40 -8
  32. package/bin/lib/Image/ExifTool/README +5 -1
  33. package/bin/lib/Image/ExifTool/Samsung.pm +233 -2
  34. package/bin/lib/Image/ExifTool/Shortcuts.pm +3 -1
  35. package/bin/lib/Image/ExifTool/Sony.pm +35 -31
  36. package/bin/lib/Image/ExifTool/TagLookup.pm +2510 -2479
  37. package/bin/lib/Image/ExifTool/TagNames.pod +137 -85
  38. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
  39. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -2
  40. package/bin/lib/Image/ExifTool/Writer.pl +2 -1
  41. package/bin/lib/Image/ExifTool.pm +40 -16
  42. package/bin/lib/Image/ExifTool.pod +13 -4
  43. package/bin/perl-Image-ExifTool.spec +1 -1
  44. package/bin/pp_build_exe.args +4 -4
  45. package/package.json +14 -3
@@ -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.54';
24
+ $VERSION = '1.55';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -2276,6 +2276,7 @@ XRef:
2276
2276
  # load XRef stream in hybrid file if it exists
2277
2277
  push @xrefOffsets, $$mainDict{XRefStm}, 'XRefStm' if $$mainDict{XRefStm};
2278
2278
  $encrypt = $$mainDict{Encrypt} if $$mainDict{Encrypt};
2279
+ undef $encrypt if $encrypt and $encrypt eq 'null'; # (have seen "null")
2279
2280
  if ($$mainDict{ID} and ref $$mainDict{ID} eq 'ARRAY') {
2280
2281
  $id = ReadPDFValue($mainDict->{ID}->[0]);
2281
2282
  }
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.16';
40
+ $VERSION = '2.17';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -2472,6 +2472,15 @@ my %shootingMode = (
2472
2472
  Start => 12,
2473
2473
  },
2474
2474
  },
2475
+ 0x200080 => { # (GH6)
2476
+ Name => 'ExifData',
2477
+ Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s',
2478
+ SubDirectory => {
2479
+ TagTable => 'Image::ExifTool::Exif::Main',
2480
+ ProcessProc => \&Image::ExifTool::ProcessTIFF,
2481
+ Start => 12,
2482
+ },
2483
+ },
2475
2484
  );
2476
2485
 
2477
2486
  # Panasonic Composite tags
@@ -6,6 +6,7 @@
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;
@@ -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)',
@@ -2232,7 +2232,7 @@ my %eeBox2 = (
2232
2232
  # 4 ? - "1e 00"
2233
2233
  # 6 int16u - record length in bytes
2234
2234
  # 8 ? - "23 01 00 00 00 00 00 00"
2235
- # 16 - start of records (each record ends in an int64u timestamp in ns)
2235
+ # 16 - start of records (each record ends in an int64u timestamp "ts" in ns)
2236
2236
  # RDTA - float[4],ts: "-0.31289672 -0.2245330 11.303817 0 775.780"
2237
2237
  # RDTB - float[4],ts: "-0.04841613 -0.2166595 0.0724792 0 775.780"
2238
2238
  # RDTC - float[4],ts: "27.60925 -27.10037 -13.27285 0 775.829"
@@ -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
@@ -1144,13 +1144,13 @@ sub ProcessSamples($)
1144
1144
  }
1145
1145
  @$size < @$start + $samplesPerChunk and $et->WarnOnce('Sample size error'), last;
1146
1146
  my $sampleStart = $chunkStart;
1147
- for ($i=0; ; ) {
1147
+ Sample: for ($i=0; ; ) {
1148
1148
  push @$start, $sampleStart;
1149
1149
  if (defined $time) {
1150
1150
  until ($timeCount) {
1151
1151
  if (@$stts < 2) {
1152
1152
  undef $time;
1153
- last;
1153
+ last Sample;
1154
1154
  }
1155
1155
  $timeCount = shift @$stts;
1156
1156
  $timeDelta = shift @$stts;
@@ -2621,8 +2621,33 @@ sub ProcessInsta360($;$)
2621
2621
  if ($verbose) {
2622
2622
  $et->VPrint(0, sprintf("Insta360 Record 0x%x (offset 0x%x, %d bytes):\n", $id, $fileEnd + $epos, $len));
2623
2623
  }
2624
+ # there are 2 types of record 0x300:
2625
+ # 1. 56 byte records
2626
+ # 0000: 4a f7 02 00 00 00 00 00 00 00 00 00 00 1e e7 3f [J..............?]
2627
+ # 0010: 00 00 00 00 00 b2 ef bf 00 00 00 00 00 70 c1 bf [.............p..]
2628
+ # 0020: 00 00 00 e0 91 5c 8c bf 00 00 00 20 8f ff 87 bf [.....\..... ....]
2629
+ # 0030: 00 00 00 00 88 7f c9 bf
2630
+ # 2. 20 byte records
2631
+ # 0000: c1 d8 d9 0b 00 00 00 00 f5 83 14 80 df 7f fe 7f [................]
2632
+ # 0010: fe 7f 01 80
2633
+ if ($id == 0x300) {
2634
+ if ($len % 20 and not $len % 56) {
2635
+ $dlen = 56;
2636
+ } elsif ($len % 56 and not $len % 20) {
2637
+ $dlen = 20;
2638
+ } else {
2639
+ if ($raf->Read($buff, 20) == 20) {
2640
+ if (substr($buff, 16, 3) eq "\0\0\0") {
2641
+ $dlen = 56;
2642
+ } else {
2643
+ $dlen = 20;
2644
+ }
2645
+ }
2646
+ $raf->Seek($epos, 2) or last;
2647
+ }
2648
+ }
2624
2649
  # limit the number of records we read if necessary
2625
- if ($insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
2650
+ if ($dlen and $insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
2626
2651
  $et->Warn("Insta360 $insvLimit{$id}[0] data is huge. Processing only the first $insvLimit{$id}[1] records",2))
2627
2652
  {
2628
2653
  $len = $insvLimit{$id}[1] * $dlen;
@@ -2630,11 +2655,18 @@ sub ProcessInsta360($;$)
2630
2655
  $raf->Read($buff, $len) == $len or last;
2631
2656
  $et->VerboseDump(\$buff) if $verbose > 2;
2632
2657
  if ($dlen) {
2633
- $len % $dlen and $et->Warn(sprintf('Unexpected Insta360 record 0x%x length',$id)), last;
2634
- if ($id == 0x300) {
2658
+ if ($len % $dlen) {
2659
+ $et->Warn(sprintf('Unexpected Insta360 record 0x%x length',$id));
2660
+ } elsif ($id == 0x300) {
2635
2661
  for ($p=0; $p<$len; $p+=$dlen) {
2636
2662
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2637
- my @a = map { GetDouble(\$buff, $p + 8 * $_) } 1..6;
2663
+ my @a;
2664
+ if ($dlen == 56) {
2665
+ @a = map { GetDouble(\$buff, $p + 8 * $_) } 1..6;
2666
+ } else {
2667
+ @a = unpack("x${p}x8v6", $buff);
2668
+ map { $_ = ($_ - 0x8000) / 1000 } @a;
2669
+ }
2638
2670
  $et->HandleTag($tagTbl, TimeCode => sprintf('%.3f', Get64u(\$buff, $p) / 1000));
2639
2671
  $et->HandleTag($tagTbl, Accelerometer => "@a[0..2]"); # (NC)
2640
2672
  $et->HandleTag($tagTbl, AngularVelocity => "@a[3..5]"); # (NC)
@@ -2668,7 +2700,7 @@ sub ProcessInsta360($;$)
2668
2700
  $a[$_] = GetDouble(\$a[$_], 0) foreach 4,6,8,9,10;
2669
2701
  $a[4] = -abs($a[4]) if $a[5] eq 'S'; # (abs just in case it was already signed)
2670
2702
  $a[6] = -abs($a[6]) if $a[7] ne 'E';
2671
- $et->HandleTag($tagTbl, GPSDateTime => Image::ExifTool::ConvertUnixTime($a[0]) . 'Z');
2703
+ $et->HandleTag($tagTbl, GPSDateTifme => Image::ExifTool::ConvertUnixTime($a[0]) . 'Z');
2672
2704
  $et->HandleTag($tagTbl, GPSLatitude => $a[4]);
2673
2705
  $et->HandleTag($tagTbl, GPSLongitude => $a[6]);
2674
2706
  $et->HandleTag($tagTbl, GPSSpeed => $a[8] * $mpsToKph);
@@ -531,7 +531,8 @@ numerical, and generated automatically otherwise.
531
531
  SubIFD's where the PutFirst flag is valid.
532
532
 
533
533
  'Unknown' - this is an unknown tag (only extracted when the
534
- Unknown option is set).
534
+ Unknown option is set). This is set to 2 for Unknown tags in
535
+ binary tables (extracted when Unknown is 2).
535
536
 
536
537
  'WriteNothing' - flag indicating that nothing is actually
537
538
  written when this tag is set. It is a fake writable tag that
@@ -975,6 +976,9 @@ numerical, and generated automatically otherwise.
975
976
  alternate language tags (eg. 'fr'). Only used with formats
976
977
  which support alternate languages (eg. XMP, MIE, etc).
977
978
 
979
+ AddedUnknown : [reserved] Used internally to mark Unknown tags that were
980
+ added to the table at run time.
981
+
978
982
  SubDirectory { If it exists, this specifies the start of a new subdirectory.
979
983
  It contains a collection of variables which specify the type
980
984
  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.65';
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.65';
118
118
  'MakerNoteCasio',
119
119
  'MakerNoteCasio2',
120
120
  'MakerNoteDJI',
121
+ 'MakerNoteDJIInfo',
121
122
  'MakerNoteFLIR',
122
123
  'MakerNoteFujiFilm',
123
124
  'MakerNoteGE',
@@ -158,6 +159,7 @@ $VERSION = '1.65';
158
159
  'MakerNoteNintendo',
159
160
  'MakerNoteOlympus',
160
161
  'MakerNoteOlympus2',
162
+ 'MakerNoteOlympus3',
161
163
  'MakerNoteLeica',
162
164
  'MakerNoteLeica2',
163
165
  'MakerNoteLeica3',
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.49';
37
+ $VERSION = '3.50';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -244,7 +244,8 @@ sub PrintInvLensSpec($;$$);
244
244
  50529 => 'Sigma 90mm F2.8 DG DN | C', #JR (021)
245
245
  50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
246
246
  50531 => 'Sigma 18-50mm F2.8 DC DN | C', #IB/JR (021)
247
-
247
+ 50532 => 'Sigma 20mm F2 DG DN | C', #JR (022)
248
+
248
249
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
249
250
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
250
251
  50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
@@ -278,6 +279,7 @@ sub PrintInvLensSpec($;$$);
278
279
  51515 => 'Samyang AF 12mm F2.0', #JR
279
280
  51516 => 'Samyang AF 24-70mm F2.8', #JR
280
281
  51517 => 'Samyang AF 50mm F1.4 II', #JR
282
+ 51518 => 'Samyang AF 135mm F1.8', #JR
281
283
  );
282
284
 
283
285
  # ExposureProgram values (ref PH, mainly decoded from A200)
@@ -1790,7 +1792,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1790
1792
  # 15 0 35 2 2 ILCA-68/77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX60V/HX350/HX400V/QX30/RX10/RX100M3/WX220/WX350
1791
1793
  # 16 0 85 2 2 DSC-HX80/HX90V/WX500
1792
1794
  # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, ILCA-99M2, ZV-1
1793
- # 18 0 20 0 164 ILCE-7SM3
1795
+ # 18 0 20 0 164 ILCE-7SM3
1794
1796
  # other values for Panorama images and several other models
1795
1797
  0x9404 => [{
1796
1798
  Name => 'Tag9404a',
@@ -8386,7 +8388,7 @@ my %isoSetting2010 = (
8386
8388
  DATAMEMBER => [ 0x04 ],
8387
8389
  0x04 => {
8388
8390
  # seen values 0,2,3,18,19,32,49,50,83,130,132,148,213,229,255
8389
- # CameraTemperature is valid for all values above except ==0 and >=130
8391
+ # CameraTemperature is valid for all values above except ==0 and >=130
8390
8392
  Name => 'TempTest2',
8391
8393
  DataMember => 'TempTest2',
8392
8394
  Hidden => 1,
@@ -9935,20 +9937,22 @@ my %isoSetting2010 = (
9935
9937
  WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
9936
9938
  CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
9937
9939
  GROUPS => { 0 => 'MakerNotes', 1 => 'SR2SubIFD', 2 => 'Camera' },
9940
+ WRITE_GROUP => 'SR2SubIFD',
9941
+ PERMANENT => 1,
9938
9942
  SET_GROUP1 => 1, # set group1 name to directory name for all tags in table
9939
9943
  NOTES => 'Tags in the encrypted SR2SubIFD',
9940
- 0x7300 => 'BlackLevel', #IB (R1)
9941
- 0x7302 => 'WB_GRBGLevelsAuto', #IB (R1)
9942
- 0x7303 => 'WB_GRBGLevels', #1 (R1 "as shot", ref IB)
9943
- 0x7310 => 'BlackLevel', #IB (divide by 4)
9944
- 0x7312 => 'WB_RGGBLevelsAuto', #IB
9945
- 0x7313 => 'WB_RGGBLevels', #6
9946
- 0x7480 => 'WB_RGBLevelsDaylight', #IB (R1)
9947
- 0x7481 => 'WB_RGBLevelsCloudy', #IB (R1)
9948
- 0x7482 => 'WB_RGBLevelsTungsten', #IB (R1)
9949
- 0x7483 => 'WB_RGBLevelsFlash', #IB (R1)
9950
- 0x7484 => 'WB_RGBLevels4500K', #IB (R1)
9951
- 0x7486 => 'WB_RGBLevelsFluorescent', #IB (R1)
9944
+ 0x7300 => { Name => 'BlackLevel', Writable => 'int16u', Count => 4, Protected => 1 },
9945
+ 0x7302 => { Name => 'WB_GRBGLevelsAuto', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9946
+ 0x7303 => { Name => 'WB_GRBGLevels', Writable => 'int16s', Count => 4, Protected => 1 }, #1 (R1 "as shot", ref IB)
9947
+ 0x7310 => { Name => 'BlackLevel', Writable => 'int16u', Count => 4, Protected => 1 }, #IB (divide by 4)
9948
+ 0x7312 => { Name => 'WB_RGGBLevelsAuto', Writable => 'int16s', Count => 4, Protected => 1 }, #IB
9949
+ 0x7313 => { Name => 'WB_RGGBLevels', Writable => 'int16s', Count => 4, Protected => 1 }, #6
9950
+ 0x7480 => { Name => 'WB_RGBLevelsDaylight', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9951
+ 0x7481 => { Name => 'WB_RGBLevelsCloudy', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9952
+ 0x7482 => { Name => 'WB_RGBLevelsTungsten', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9953
+ 0x7483 => { Name => 'WB_RGBLevelsFlash', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9954
+ 0x7484 => { Name => 'WB_RGBLevels4500K', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9955
+ 0x7486 => { Name => 'WB_RGBLevelsFluorescent', Writable => 'int16s', Count => 4, Protected => 1 }, #IB (R1)
9952
9956
  0x74a0 => 'MaxApertureAtMaxFocal', #PH
9953
9957
  0x74a1 => 'MaxApertureAtMinFocal', #PH
9954
9958
  0x74a2 => { #IB (R1)
@@ -9970,21 +9974,21 @@ my %isoSetting2010 = (
9970
9974
  },
9971
9975
  },
9972
9976
  0x7800 => 'ColorMatrix', #IB (divide by 1024)
9973
- 0x7820 => 'WB_RGBLevelsDaylight', #6 (or 5300K, ref IB)
9974
- 0x7821 => 'WB_RGBLevelsCloudy', #6 (or 6100K, ref IB)
9975
- 0x7822 => 'WB_RGBLevelsTungsten', #6
9976
- 0x7823 => 'WB_RGBLevelsFlash', #IB
9977
- 0x7824 => 'WB_RGBLevels4500K', #IB
9978
- 0x7825 => 'WB_RGBLevelsShade', #6 (or 7500K, ref IB)
9979
- 0x7826 => 'WB_RGBLevelsFluorescent', #6 (~4000K)
9980
- 0x7827 => 'WB_RGBLevelsFluorescentP1', #IB (~5000K)
9981
- 0x7828 => 'WB_RGBLevelsFluorescentP2', #IB (~6500K) (was Flash, ref 6)
9982
- 0x7829 => 'WB_RGBLevelsFluorescentM1', #IB (~3500K)
9983
- 0x782a => 'WB_RGBLevels8500K', #IB
9984
- 0x782b => 'WB_RGBLevels6000K', #IB
9985
- 0x782c => 'WB_RGBLevels3200K', #IB
9986
- 0x782d => 'WB_RGBLevels2500K', #IB
9987
- 0x787f => 'WhiteLevel', #IB (divide by 4)
9977
+ 0x7820 => { Name => 'WB_RGBLevelsDaylight', Writable => 'int16s', Count => 3, Protected => 1 }, #6 (or 5300K, ref IB)
9978
+ 0x7821 => { Name => 'WB_RGBLevelsCloudy', Writable => 'int16s', Count => 3, Protected => 1 }, #6 (or 6100K, ref IB)
9979
+ 0x7822 => { Name => 'WB_RGBLevelsTungsten', Writable => 'int16s', Count => 3, Protected => 1 }, #6
9980
+ 0x7823 => { Name => 'WB_RGBLevelsFlash', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9981
+ 0x7824 => { Name => 'WB_RGBLevels4500K', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9982
+ 0x7825 => { Name => 'WB_RGBLevelsShade', Writable => 'int16s', Count => 3, Protected => 1 }, #6 (or 7500K, ref IB)
9983
+ 0x7826 => { Name => 'WB_RGBLevelsFluorescent', Writable => 'int16s', Count => 3, Protected => 1 }, #6 (~4000K)
9984
+ 0x7827 => { Name => 'WB_RGBLevelsFluorescentP1', Writable => 'int16s', Count => 3, Protected => 1 }, #IB (~5000K)
9985
+ 0x7828 => { Name => 'WB_RGBLevelsFluorescentP2', Writable => 'int16s', Count => 3, Protected => 1 }, #IB (~6500K) (was Flash, ref 6)
9986
+ 0x7829 => { Name => 'WB_RGBLevelsFluorescentM1', Writable => 'int16s', Count => 3, Protected => 1 }, #IB (~3500K)
9987
+ 0x782a => { Name => 'WB_RGBLevels8500K', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9988
+ 0x782b => { Name => 'WB_RGBLevels6000K', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9989
+ 0x782c => { Name => 'WB_RGBLevels3200K', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9990
+ 0x782d => { Name => 'WB_RGBLevels2500K', Writable => 'int16s', Count => 3, Protected => 1 }, #IB
9991
+ 0x787f => { Name => 'WhiteLevel', Writable => 'int16u', Count => 3, Protected => 1 }, #IB (divide by 4)
9988
9992
  0x797d => 'VignettingCorrParams', #forum7640
9989
9993
  0x7980 => 'ChromaticAberrationCorrParams', #forum6509 (Sony A7 ARW)
9990
9994
  0x7982 => 'DistortionCorrParams', #forum6509 (Sony A7 ARW)