exiftool-vendored.exe 12.65.0 → 12.69.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 (33) hide show
  1. package/bin/exiftool_files/Changes +60 -2
  2. package/bin/exiftool_files/README +7 -7
  3. package/bin/exiftool_files/exiftool.pl +35 -25
  4. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +6 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +55 -13
  6. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +95 -13
  8. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +20 -1
  9. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +17 -12
  10. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +47 -11
  11. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +19 -4
  12. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +14 -7
  13. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +13 -9
  14. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +8 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +62 -52
  17. package/bin/exiftool_files/lib/Image/ExifTool/README +7 -3
  18. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +8 -2
  19. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +66 -21
  20. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6881 -6709
  21. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +454 -37
  22. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +18 -16
  23. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  24. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
  25. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
  26. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +22 -3
  27. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +53 -11
  28. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
  30. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +36 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool.pm +45 -20
  32. package/bin/exiftool_files/lib/Image/ExifTool.pod +20 -10
  33. package/package.json +2 -2
@@ -31,7 +31,7 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
 
34
- $VERSION = '1.88';
34
+ $VERSION = '1.90';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -428,6 +428,14 @@ my %faceCategories = (
428
428
  Name => 'ShadowTone',
429
429
  Writable => 'int32s',
430
430
  PrintConv => {
431
+ OTHER => sub {
432
+ my ($val, $inv) = @_;
433
+ if ($inv) {
434
+ return int(-$val * 16);
435
+ } else {
436
+ return -$val / 16;
437
+ }
438
+ },
431
439
  -64 => '+4 (hardest)',
432
440
  -48 => '+3 (very hard)',
433
441
  -32 => '+2 (hard)',
@@ -441,6 +449,14 @@ my %faceCategories = (
441
449
  Name => 'HighlightTone',
442
450
  Writable => 'int32s',
443
451
  PrintConv => {
452
+ OTHER => sub {
453
+ my ($val, $inv) = @_;
454
+ if ($inv) {
455
+ return int(-$val * 16);
456
+ } else {
457
+ return -$val / 16;
458
+ }
459
+ },
444
460
  -64 => '+4 (hardest)',
445
461
  -48 => '+3 (very hard)',
446
462
  -32 => '+2 (hard)',
@@ -670,6 +686,7 @@ my %faceCategories = (
670
686
  0x800 => 'Classic Negative', #forum10536
671
687
  0x900 => 'Bleach Bypass', #forum10890
672
688
  0xa00 => 'Nostalgic Neg', #forum12085
689
+ 0xb00 => 'Reala ACE', #forum15190
673
690
  },
674
691
  },
675
692
  0x1402 => { #2
@@ -897,6 +914,8 @@ my %faceCategories = (
897
914
  25 => 'Aircraft Cockpit',
898
915
  26 => 'Train Front',
899
916
  27 => 'Train Cockpit',
917
+ 28 => 'Animal Head (28)', #forum15192
918
+ 29 => 'Animal Body (29)', #forum15192
900
919
  },'REPEAT'],
901
920
  },
902
921
  # 0x4202 int8u[-1] - number of cooredinates in each rectangle? (ref 11)
@@ -29,7 +29,7 @@ use vars qw($VERSION);
29
29
  use Image::ExifTool qw(:Public);
30
30
  use Image::ExifTool::GPS;
31
31
 
32
- $VERSION = '1.72';
32
+ $VERSION = '1.73';
33
33
 
34
34
  sub JITTER() { return 2 } # maximum time jitter
35
35
 
@@ -1109,7 +1109,7 @@ sub SetGeoValues($$;$)
1109
1109
  $iExt = $i1;
1110
1110
  }
1111
1111
  if (abs($time - $tn) > $geoMaxExtSecs) {
1112
- $err or $err = 'Time is too far from nearest GPS fix';
1112
+ $err or $err = 'Time is too far from nearest GPS fix'.' '.abs($time-$tn).' '.$geoMaxExtSecs;
1113
1113
  $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), "\n") if $verbose > 2;
1114
1114
  $fix = { } if $$geotag{DateTimeOnly};
1115
1115
  } else {
@@ -1196,24 +1196,29 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
1196
1196
  # write GPSDateStamp if date included in track log, otherwise delete it
1197
1197
  $gpsDate = sprintf('%.2d:%.2d:%.2d', $t[5]+1900, $t[4]+1, $t[3]) unless $noDate;
1198
1198
  # write GPSAltitude tags if altitude included in track log, otherwise delete them
1199
- if (defined $$fix{alt}) {
1200
- $gpsAlt = abs $$fix{alt};
1201
- $gpsAltRef = ($$fix{alt} < 0 ? 1 : 0);
1202
- } elsif ($$has{alt} and defined $iExt) {
1199
+ my $alt = $$fix{alt};
1200
+ if (not defined $alt and $$has{alt} and defined $iExt) {
1203
1201
  my $tFix = FindFix($et,'alt',$times,$points,$iExt,$iDir,$geoMaxExtSecs);
1204
- if ($tFix) {
1205
- $gpsAlt = abs $$tFix{alt};
1206
- $gpsAltRef = ($$tFix{alt} < 0 ? 1 : 0);
1207
- }
1202
+ $alt = $$tFix{alt} if $tFix;
1208
1203
  }
1209
1204
  # set new GPS tag values (EXIF, or XMP if write group is 'xmp')
1210
- my ($xmp, $exif, @r);
1205
+ my ($xmp, $exif, $qt, @r);
1211
1206
  my %opts = ( Type => 'ValueConv' ); # write ValueConv values
1212
1207
  if ($writeGroup) {
1213
1208
  $opts{Group} = $writeGroup;
1214
1209
  $xmp = ($writeGroup =~ /xmp/i);
1215
1210
  $exif = ($writeGroup =~ /^(exif|gps)$/i);
1211
+ $qt = $writeGroup =~ /^(quicktime|keys|itemlist|userdata)$/i;
1212
+ }
1213
+ # set QuickTime GPSCoordinates
1214
+ my $coords = "$$fix{lat} $$fix{lon}";
1215
+ if (defined $alt) {
1216
+ $gpsAlt = abs $alt;
1217
+ $gpsAltRef = ($alt < 0 ? 1 : 0);
1218
+ $coords .= " $alt";
1216
1219
  }
1220
+ @r = $et->SetNewValue(GPSCoordinates => $coords, %opts);
1221
+ return $err if $qt; # all done if writing to QuickTime only
1217
1222
  # (capture error messages by calling SetNewValue in list context)
1218
1223
  @r = $et->SetNewValue(GPSLatitude => $$fix{lat}, %opts);
1219
1224
  @r = $et->SetNewValue(GPSLongitude => $$fix{lon}, %opts);
@@ -1288,7 +1293,7 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
1288
1293
  GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
1289
1294
  GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection
1290
1295
  GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle
1291
- AmbientTemperature))
1296
+ AmbientTemperature GPSCoordinates))
1292
1297
  {
1293
1298
  my @r = $et->SetNewValue($_, undef, %opts);
1294
1299
  }
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.24';
68
+ $VERSION = '4.27';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -676,6 +676,7 @@ sub GetAFPointGrid($$;$);
676
676
  '07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
677
677
  '71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
678
678
  'FD 00 50 50 18 18 DF 00' => 'Voigtlander APO-Lanthar 50mm F2 Aspherical', #35
679
+ 'FD 00 44 44 18 18 DF 00' => 'Voigtlander APO-Lanthar 35mm F2', #30
679
680
  #
680
681
  '00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
681
682
  '00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
@@ -1188,6 +1189,7 @@ my %subjectDetectionZ9 = (
1188
1189
  2 => 'People',
1189
1190
  3 => 'Animals',
1190
1191
  4 => 'Vehicles',
1192
+ 5 => 'Birds',
1191
1193
  6 => 'Airplanes',
1192
1194
  );
1193
1195
 
@@ -1983,6 +1985,14 @@ my %base64coord = (
1983
1985
  Writable => 'rational64s',
1984
1986
  Count => 2,
1985
1987
  },
1988
+ 0x0044 => { #28
1989
+ Name => 'JPGCompression',
1990
+ RawConv => '($val) ? $val : undef', # undef for raw files
1991
+ PrintConv => {
1992
+ 1 => 'Size Priority',
1993
+ 3 => 'Optimal Quality',
1994
+ },
1995
+ },
1986
1996
  0x0045 => { #IB
1987
1997
  Name => 'CropArea',
1988
1998
  Notes => 'left, top, width, height',
@@ -2413,8 +2423,8 @@ my %base64coord = (
2413
2423
  },
2414
2424
  },
2415
2425
  { # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
2416
- # 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30
2417
- Condition => '$$valPt =~ /^080[012347]/',
2426
+ # 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
2427
+ Condition => '$$valPt =~ /^080[0123478]/',
2418
2428
  Name => 'ShotInfoZ7II',
2419
2429
  SubDirectory => {
2420
2430
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
@@ -2473,7 +2483,7 @@ my %base64coord = (
2473
2483
  },
2474
2484
  0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
2475
2485
  0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
2476
- 0x0096 => {
2486
+ 0x0096 => { # (not found in NRW files, but also not in all NEF's)
2477
2487
  Name => 'NEFLinearizationTable', # same table as DNG LinearizationTable (ref JD)
2478
2488
  Writable => 'undef',
2479
2489
  Flags => [ 'Binary', 'Protected' ],
@@ -4578,7 +4588,7 @@ my %base64coord = (
4578
4588
  RawConv => '$$self{AFInfo2Version} = $val',
4579
4589
  },
4580
4590
  5 => { #28
4581
- Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
4591
+ Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
4582
4592
  PrintConv => {
4583
4593
  192 => 'Pinpoint',
4584
4594
  193 => 'Single',
@@ -4594,7 +4604,7 @@ my %base64coord = (
4594
4604
  },
4595
4605
  10 => {
4596
4606
  Name => 'AFPointsUsed',
4597
- Condition => '$$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4607
+ Condition => 'defined $$self{AFAreaMode} and $$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4598
4608
  Format => 'undef[51]',
4599
4609
  ValueConv => 'join(" ", unpack("H2"x51, $val))',
4600
4610
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
@@ -5432,6 +5442,13 @@ my %nikonFocalConversions = (
5432
5442
  37 => 'Nikkor Z 600mm f/4 TC VR S', #28
5433
5443
  38 => 'Nikkor Z 85mm f/1.2 S', #28
5434
5444
  39 => 'Nikkor Z 17-28mm f/2.8', #IB
5445
+ 40 => 'NIKKOR Z 26mm f/2.8', #28
5446
+ 41 => 'NIKKOR Z DX 12-28mm f/3.5-5.6 PZ VR', #28
5447
+ 42 => 'Nikkor Z 180-600mm f/5.6-6.3 VR', #30
5448
+ 43 => 'NIKKOR Z DX 24mm f/1.7', #28
5449
+ 44 => 'NIKKOR Z 70-180mm f/2.8', #28
5450
+ 45 => 'NIKKOR Z 600mm f/6.3 VR S', #28
5451
+ 48 => 'Nikkor Z 135mm f/1.8 S Plena', #28
5435
5452
  32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
5436
5453
  32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
5437
5454
  },
@@ -6048,6 +6065,24 @@ my %nikonFocalConversions = (
6048
6065
  Format => 'int32u',
6049
6066
  Priority => 0,
6050
6067
  },
6068
+ 671.1 => { # 0x29f
6069
+ Name => 'JPGCompression',
6070
+ Mask => 0x40,
6071
+ PrintConv => {
6072
+ 0 => 'Size Priority',
6073
+ 1 => 'Optimal Quality',
6074
+ },
6075
+ },
6076
+ # this works for one set of D3S samples, but is 0 in some others
6077
+ #671.2 => { # 0x29f
6078
+ # Name => 'Quality',
6079
+ # Mask => 0x03,
6080
+ # PrintConv => {
6081
+ # 1 => 'Fine',
6082
+ # 2 => 'Normal',
6083
+ # 3 => 'Basic',
6084
+ # },
6085
+ #},
6051
6086
  0x2ce => { #(NC)
6052
6087
  Name => 'CustomSettingsD3S',
6053
6088
  Format => 'undef[27]',
@@ -8492,7 +8527,7 @@ my %nikonFocalConversions = (
8492
8527
  DATAMEMBER => [ 0x0bea, 0x0beb ],
8493
8528
  0x0be8 => {
8494
8529
  Name => 'AFAreaInitialXPosition', #stored as a representation of the horizontal position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8495
- Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8530
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8496
8531
  Format => 'int8s',
8497
8532
  PrintConv => q{
8498
8533
  #in FX mode and Single-point, the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754. Spacing is the same for Wide(L/C1/C2) with different start points.
@@ -8554,7 +8589,7 @@ my %nikonFocalConversions = (
8554
8589
  },
8555
8590
  0x0be9 => {
8556
8591
  Name =>'AFAreaInitialYPosition', #stored as a representation of the vertical position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8557
- Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8592
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8558
8593
  Format => 'int8s',
8559
8594
  PrintConv => q{
8560
8595
  #in FX mode and Single-point, the 17 vertical focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080. Spacing is the same for Wide(L/C1/C2)
@@ -8618,13 +8653,13 @@ my %nikonFocalConversions = (
8618
8653
  },
8619
8654
  0x0bea => {
8620
8655
  Name => 'AFAreaInitialWidth',
8621
- Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8656
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8622
8657
  ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8623
8658
  RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
8624
8659
  },
8625
8660
  0x0beb => {
8626
8661
  Name => 'AFAreaInitialHeight',
8627
- Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8662
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8628
8663
  ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8629
8664
  RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
8630
8665
  },
@@ -8840,7 +8875,7 @@ my %nikonFocalConversions = (
8840
8875
  %binaryDataAttrs,
8841
8876
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8842
8877
  DATAMEMBER => [ 90, 176, 180, 328, 352, 858 ],
8843
- NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and Zfc.',
8878
+ NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50, Zfc and Zf.',
8844
8879
  #48 SelfTimer' #0=> no 1=> yes works for Z7II firmware 1.40, but not 1.30. Follow-up required.
8845
8880
  90 => {
8846
8881
  Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
@@ -9808,6 +9843,7 @@ my %nikonFocalConversions = (
9808
9843
  290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9809
9844
  292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9810
9845
  328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9846
+ #334 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
9811
9847
  342 => { Name => 'AutoISO', PrintConv => \%offOn },
9812
9848
  344 => {
9813
9849
  Name => 'ISOAutoHiLimit',
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool::XMP;
16
16
 
17
- $VERSION = '1.00';
17
+ $VERSION = '1.02';
18
18
 
19
19
  sub ValidateMediaSummary($);
20
20
 
@@ -2311,12 +2311,13 @@ my %mediaMatrix = (
2311
2311
  GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
2312
2312
  NAMESPACE => 'plus',
2313
2313
  NOTES => q{
2314
- PLUS (Picture Licensing Universal System) License Data Format 1.2.1 XMP
2314
+ PLUS (Picture Licensing Universal System) License Data Format 2.0.1 XMP
2315
2315
  tags. Note that all controlled-vocabulary tags in this table (ie. tags with
2316
2316
  a fixed set of values) have raw values which begin with
2317
2317
  "http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has
2318
- been removed from the values shown below. See L<http://ns.useplus.org/> for
2319
- the complete specification.
2318
+ been removed from the values shown below, and from the values read and
2319
+ written with the -n option. See L<http://ns.useplus.org/> for the complete
2320
+ specification.
2320
2321
  },
2321
2322
  Version => { Name => 'PLUSVersion' },
2322
2323
  Licensee => {
@@ -2529,6 +2530,20 @@ my %mediaMatrix = (
2529
2530
  Custom8 => { List => 'Bag', Writable => 'lang-alt' },
2530
2531
  Custom9 => { List => 'Bag', Writable => 'lang-alt' },
2531
2532
  Custom10 => { List => 'Bag', Writable => 'lang-alt' },
2533
+ DataMining => {
2534
+ %plusVocab,
2535
+ PrintConv => {
2536
+ 'DMI-UNSPECIFIED' => 'Unspecified - no prohibition defined',
2537
+ 'DMI-ALLOWED' => 'Allowed',
2538
+ 'DMI-PROHIBITED-AIMLTRAINING' => 'Prohibited for AI/ML training',
2539
+ 'DMI-PROHIBITED-GENAIMLTRAINING' => 'Prohibited for Generative AI/ML training',
2540
+ 'DMI-PROHIBITED-EXCEPTSEARCHENGINEINDEXING' => 'Prohibited except for search engine indexing',
2541
+ 'DMI-PROHIBITED' => 'Prohibited',
2542
+ 'DMI-PROHIBITED-SEECONSTRAINT' => 'Prohibited, see plus:OtherConstraints',
2543
+ 'DMI-PROHIBITED-SEEEMBEDDEDRIGHTSEXPR' => 'Prohibited, see iptcExt:EmbdEncRightsExpr',
2544
+ 'DMI-PROHIBITED-SEELINKEDRIGHTSEXPR' => 'Prohibited, see iptcExt:LinkedEncRightsExpr',
2545
+ },
2546
+ },
2532
2547
  );
2533
2548
 
2534
2549
  #------------------------------------------------------------------------------
@@ -36,7 +36,7 @@ use strict;
36
36
  use vars qw($VERSION $AUTOLOAD %stdCase);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
 
39
- $VERSION = '1.64';
39
+ $VERSION = '1.65';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -973,13 +973,20 @@ sub FoundPNG($$$$;$$$$)
973
973
  undef $processProc if $wasCompressed and $processProc and $processProc eq \&ProcessPNG_Compressed;
974
974
  # rewrite this directory if necessary (but always process TextualData normally)
975
975
  if ($outBuff and not $processProc and $subTable ne \%Image::ExifTool::PNG::TextualData) {
976
- return 1 unless $$et{EDIT_DIRS}{$dirName};
977
- $$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
978
- if ($tagName eq 'XMP' and $$outBuff) {
979
- # make sure the XMP is marked as read-only
980
- Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
976
+ # allow JUMBF to be deleted (may want to expand this for other types too?)
977
+ if ($dirName eq 'JUMBF' and $$et{DEL_GROUP}{$dirName}) {
978
+ $$outBuff = '';
979
+ ++$$et{CHANGED};
980
+ $et->VPrint(0, " Deleting $dirName");
981
+ } else {
982
+ return 1 unless $$et{EDIT_DIRS}{$dirName};
983
+ $$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
984
+ if ($tagName eq 'XMP' and $$outBuff) {
985
+ # make sure the XMP is marked as read-only
986
+ Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
987
+ }
988
+ DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
981
989
  }
982
- DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
983
990
  } else {
984
991
  $processed = $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc);
985
992
  }
@@ -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.18';
40
+ $VERSION = '2.20';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -1070,18 +1070,18 @@ my %shootingMode = (
1070
1070
  },
1071
1071
  },
1072
1072
  # 0x71 - undef[128] (maybe text stamp text?)
1073
+ # 0x72,0x73,0x74,0x75,0x77,0x78: 0
1074
+ # 0x76: 0, (3 for G6 with HDR on, ref 18)
1075
+ 0x76 => { #18/21/forum15298
1076
+ Name => 'MergedImages',
1077
+ Writable => 'int16u',
1078
+ Notes => 'number of images in HDR or Live View Composite picture',
1079
+ },
1073
1080
  0x77 => { #18
1074
1081
  Name => 'BurstSpeed',
1075
1082
  Writable => 'int16u',
1076
1083
  Notes => 'images per second',
1077
1084
  },
1078
- # 0x72,0x73,0x74,0x75,0x77,0x78: 0
1079
- # 0x76: 0, (3 for G6 with HDR on, ref 18)
1080
- 0x76 => { #18/21
1081
- Name => 'HDRShot',
1082
- Writable => 'int16u',
1083
- PrintConv => { 0 => 'Off', 3 => 'On' },
1084
- },
1085
1085
  0x79 => { #PH (GH2)
1086
1086
  Name => 'IntelligentD-Range',
1087
1087
  Writable => 'int16u',
@@ -2834,10 +2834,14 @@ sub ProcessLeicaTrailer($;$)
2834
2834
  my $val = Image::ExifTool::Exif::RebuildMakerNotes($et, \%dirInfo, $tagTablePtr);
2835
2835
  unless (defined $val) {
2836
2836
  $et->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4;
2837
- $val = $buff,
2837
+ $val = $buff;
2838
2838
  }
2839
2839
  my $key = $et->FoundTag($tagInfo, $val);
2840
2840
  $et->SetGroup($key, 'ExifIFD');
2841
+ if ($$et{MAKER_NOTE_FIXUP}) {
2842
+ $$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
2843
+ delete $$et{MAKER_NOTE_FIXUP};
2844
+ }
2841
2845
  }
2842
2846
  }
2843
2847
  SetByteOrder($oldOrder);
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.42';
61
+ $VERSION = '3.44';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -175,6 +175,7 @@ sub DecodeAFPoints($$$$;$);
175
175
  '4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6',
176
176
  '4 3' => 'smc PENTAX-FA 43mm F1.9 Limited',
177
177
  '4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
178
+ '4 7' => 'Irix 45mm F1.4', #27
178
179
  '4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
179
180
  '4 9' => 'Irix 11mm F4 Firefly', #27
180
181
  '4 10' => 'Irix 15mm F2.4', #27
@@ -265,6 +266,7 @@ sub DecodeAFPoints($$$$;$);
265
266
  '6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]',
266
267
  '7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13
267
268
  '7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;)
269
+ # '7 58' also 'HD PENTAX-D FA MACRO 100mm F2.8 ED AW' (ref 27)
268
270
  '7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar)
269
271
  '7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk)
270
272
  '7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29
@@ -554,6 +556,8 @@ my %pentaxModelID = (
554
556
  0x13240 => 'K-1 Mark II', # (Ricoh)
555
557
  0x13254 => 'K-3 Mark III', #IB (Ricoh)
556
558
  0x13290 => 'WG-70', # (Ricoh)
559
+ 0x1329a => 'GR IIIx', # (Ricoh)
560
+ 0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
557
561
  );
558
562
 
559
563
  # Pentax city codes - (PH, Optio WP)
@@ -969,6 +973,7 @@ my %binaryDataAttrs = (
969
973
  5 => 'Premium', #PH (K20D)
970
974
  7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
971
975
  8 => 'Dynamic Pixel Shift', #IB
976
+ 9 => 'Monochrome', #github226
972
977
  65535 => 'n/a', #PH (Q MOV video)
973
978
  },
974
979
  },
@@ -2142,6 +2147,7 @@ my %binaryDataAttrs = (
2142
2147
  11 => 'Flat', #31 (K-70)
2143
2148
  # 256 - seen for GR III
2144
2149
  # 262 - seen for GR III
2150
+ 32768 => 'n/a',
2145
2151
  },
2146
2152
  },
2147
2153
  0x0050 => { #PH
@@ -2228,6 +2234,7 @@ my %binaryDataAttrs = (
2228
2234
  18 => '18 (KP)', #PH
2229
2235
  19 => '19 (GR III)', #PH
2230
2236
  20 => '20 (K-3III)', #PH
2237
+ 21 => '21 (K-3IIIMonochrome)', #github226
2231
2238
  },
2232
2239
  },
2233
2240
  0x0067 => { #PH (K-5)
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
15
15
  use Image::ExifTool::IPTC;
16
16
  use Image::ExifTool::XMP;
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.08';
19
19
 
20
20
  sub ProcessPhotoMechanic($$);
21
21
 
@@ -138,6 +138,7 @@ my %rawCropConv = (
138
138
  ValueConv => 'Image::ExifTool::Exif::ExifTime($val)',
139
139
  ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)',
140
140
  },
141
+ CreatorIdentity => { List => 'Seq' },
141
142
  );
142
143
 
143
144
  #------------------------------------------------------------------------------