exiftool_vendored 13.31.0 → 13.33.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. checksums.yaml +4 -4
  2. data/bin/Changes +38 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +47 -46
  7. data/bin/exiftool +81 -56
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
  9. data/bin/lib/Image/ExifTool/Canon.pm +10 -2
  10. data/bin/lib/Image/ExifTool/Exif.pm +5 -3
  11. data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
  12. data/bin/lib/Image/ExifTool/FujiFilm.pm +10 -3
  13. data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
  14. data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
  15. data/bin/lib/Image/ExifTool/LNK.pm +4 -1
  16. data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
  17. data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
  18. data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
  19. data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
  20. data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
  21. data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
  22. data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
  23. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
  24. data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
  25. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Nikon.pm +71 -37
  27. data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
  28. data/bin/lib/Image/ExifTool/Olympus.pm +240 -35
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
  30. data/bin/lib/Image/ExifTool/Pentax.pm +271 -53
  31. data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
  32. data/bin/lib/Image/ExifTool/Sony.pm +5 -2
  33. data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
  34. data/bin/lib/Image/ExifTool/TagLookup.pm +4373 -4264
  35. data/bin/lib/Image/ExifTool/TagNames.pod +249 -17
  36. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
  37. data/bin/lib/Image/ExifTool/Writer.pl +15 -11
  38. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  39. data/bin/lib/Image/ExifTool.pm +11 -4
  40. data/bin/lib/Image/ExifTool.pod +45 -44
  41. data/bin/perl-Image-ExifTool.spec +46 -45
  42. data/lib/exiftool_vendored/version.rb +1 -1
  43. metadata +3 -2
@@ -28,6 +28,7 @@
28
28
  # 22) Herbert Kauer private communication
29
29
  # 23) Daniel Pollock private communication (PEN-F)
30
30
  # 24) Sebastian private communication (E-M1 Mark III)
31
+ # 25) Karsten Gieselmann private communication (OM series)
31
32
  # IB) Iliah Borg private communication (LibRaw)
32
33
  # NJ) Niels Kristian Bech Jensen private communication
33
34
  #------------------------------------------------------------------------------
@@ -40,7 +41,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
41
  use Image::ExifTool::Exif;
41
42
  use Image::ExifTool::APP12;
42
43
 
43
- $VERSION = '2.86';
44
+ $VERSION = '2.88';
44
45
 
45
46
  sub PrintLensInfo($$$);
46
47
 
@@ -447,6 +448,7 @@ my %olympusCameraTypes = (
447
448
  S0101 => 'OM-5', #IB
448
449
  S0121 => 'OM-1MarkII', #forum15652
449
450
  S0123 => 'OM-3', #forum17208
451
+ S0130 => 'OM-5MarkII', #forum17465
450
452
  SR45 => 'D220',
451
453
  SR55 => 'D320L',
452
454
  SR83 => 'D340L',
@@ -1932,20 +1934,39 @@ my %indexInfo = (
1932
1934
  0x309 => { #forum13341
1933
1935
  Name => 'AISubjectTrackingMode',
1934
1936
  Writable => 'int16u',
1935
- ValueConv => '($val >> 8) . " " . ($val & 0xff)',
1936
- ValueConvInv => 'my @a = split " ", $val; $val = $a[0]*256 + $a[1]',
1937
- PrintConv => [{
1938
- 0 => 'Off',
1939
- 1 => 'Motorsports',
1940
- 2 => 'Airplanes',
1941
- 3 => 'Trains',
1942
- 4 => 'Birds',
1943
- 5 => 'Dogs & Cats',
1944
- 6 => 'Human', #forum16072
1945
- },{
1946
- 0 => 'Object Not Found',
1947
- 1 => 'Object Found',
1948
- }],
1937
+ PrintConv => { #25 (OM models)
1938
+ 0 => 'Off',
1939
+ 0x100 => 'Motorsports; Object Not Found',
1940
+ 0x101 => 'Motorsports; Racing Car Found',
1941
+ 0x102 => 'Motorsports; Car Found',
1942
+ 0x103 => 'Motorsports; Motorcyle Found',
1943
+ 0x200 => 'Airplanes; Object Not Found',
1944
+ 0x201 => 'Airplanes; Passenger/Transport Plane Found',
1945
+ 0x202 => 'Airplanes; Small Plane/Fighter Jet Found',
1946
+ 0x203 => 'Airplanes; Helicopter Found',
1947
+ 0x300 => 'Trains, Object Not Found',
1948
+ 0x301 => 'Trains, Object Found',
1949
+ 0x400 => 'Birds, Object Not Found',
1950
+ 0x401 => 'Birds Object Found',
1951
+ 0x500 => 'Dogs & Cats, Object Not Found',
1952
+ 0x501 => 'Dogs & Cats, Object Found',
1953
+ 0x600 => 'Human, Object Not Found',
1954
+ 0x601 => 'Human, Object Found',
1955
+ },
1956
+ },
1957
+ 0x030a => {
1958
+ Name => 'AFTargetInfo',
1959
+ Format => 'undef',
1960
+ Writable => 'int16u',
1961
+ Count => 10,
1962
+ SubDirectory => { TagTable => 'Image::ExifTool::Olympus::AFTargetInfo' },
1963
+ },
1964
+ 0x030b => {
1965
+ Name => 'SubjectDetectInfo',
1966
+ Format => 'undef',
1967
+ Writable => 'int16u',
1968
+ Count => 11,
1969
+ SubDirectory => { TagTable => 'Image::ExifTool::Olympus::SubjectDetectInfo' },
1949
1970
  },
1950
1971
  0x400 => { #6
1951
1972
  Name => 'FlashMode',
@@ -2489,15 +2510,22 @@ my %indexInfo = (
2489
2510
  Name => 'DriveMode',
2490
2511
  Writable => 'int16u',
2491
2512
  Count => -1,
2492
- Notes => '2, 3 or 5 numbers: 1. Mode, 2. Shot number, 3. Mode bits, 5. Shutter mode',
2493
- PrintConv => q{
2494
- my ($a,$b,$c,$d,$e) = split ' ',$val;
2495
- if ($e) {
2496
- $e = '; ' . ({ 2 => 'Anti-shock 0', 4 => 'Electronic shutter' }->{$e} || "Unknown ($e)");
2513
+ Notes => q{
2514
+ 2, 3, 5 or numbers: 1. Mode, 2. Shot number, 3. Mode bits, 5. Shutter mode,
2515
+ 6. Shooting mode (E-M1 II and later models)
2516
+ },
2517
+ PrintConv => q {
2518
+ my ($a,$b,$c,$d,$e,$f) = split ' ',$val;
2519
+ if ($b) {
2520
+ $b = ', Shot ' . $b;
2497
2521
  } else {
2522
+ $b = '';
2523
+ }
2524
+ if (not defined $e or $e == 4) { #KG: personally, I'd like to skip 'Electronic shutter' since this is the defacto default setting
2498
2525
  $e = '';
2526
+ } else {
2527
+ $e = '; ' . ({ 0 => 'Mechanical shutter' , 2 => 'Anti-shock' }->{$e} || "Unknown ($e)");
2499
2528
  }
2500
- return "Single Shot$e" unless $a;
2501
2529
  if ($a == 5 and defined $c) {
2502
2530
  $a = DecodeBits($c, { #6
2503
2531
  0 => 'AE',
@@ -2509,16 +2537,51 @@ my %indexInfo = (
2509
2537
  6 => 'Focus', #PH
2510
2538
  }) . ' Bracketing';
2511
2539
  $a =~ s/, /+/g;
2540
+ } elsif ($f) { #25
2541
+ # for newer models (E-M1 and later) look at byte 6 for other shooting modes
2542
+ my %f = (
2543
+ # Mechanical shutter modes
2544
+ 0x01 => 'Single Shot',
2545
+ 0x02 => 'Sequential L',
2546
+ 0x03 => 'Sequential H',
2547
+ 0x07 => 'Sequential',
2548
+ # Anti-shock modes
2549
+ 0x11 => 'Single Shot',
2550
+ 0x12 => 'Sequential L',
2551
+ 0x13 => 'Sequential H',
2552
+ 0x14 => 'Self-Timer 12 sec',
2553
+ 0x15 => 'Self-Timer 2 sec',
2554
+ 0x16 => 'Custom Self-Timer',
2555
+ 0x17 => 'Sequential',
2556
+ # Electronical shutter modes
2557
+ 0x21 => 'Single Shot',
2558
+ 0x22 => 'Sequential L',
2559
+ 0x23 => 'Sequential H',
2560
+ 0x24 => 'Self-Timer 2 sec',
2561
+ 0x25 => 'Self-Timer 12 sec',
2562
+ 0x26 => 'Custom Self-Timer',
2563
+ 0x27 => 'Sequential',
2564
+ 0x28 => 'Sequential SH1',
2565
+ 0x29 => 'Sequential SH2',
2566
+ 0x30 => 'HighRes Shot', # only E-M models
2567
+ 0x41 => 'ProCap H',
2568
+ 0x42 => 'ProCap L',
2569
+ 0x43 => 'ProCap',
2570
+ 0x48 => 'ProCap SH1',
2571
+ 0x49 => 'ProCap SH2',
2572
+ );
2573
+ $a = $f{$f} || "Unknown ($f)";
2512
2574
  } else {
2513
- my %a = (
2514
- 1 => 'Continuous Shooting',
2515
- 2 => 'Exposure Bracketing',
2516
- 3 => 'White Balance Bracketing',
2517
- 4 => 'Exposure+WB Bracketing', #6
2518
- );
2519
- $a = $a{$a} || "Unknown ($a)";
2575
+ my %a = (
2576
+ 0 => 'Single Shot',
2577
+ 1 => 'Continuous Shooting',
2578
+ 2 => 'Exposure Bracketing',
2579
+ 3 => 'White Balance Bracketing',
2580
+ 4 => 'Exposure+WB Bracketing', #6
2581
+ );
2582
+ $a = $a{$a} || "Unknown ($a)";
2520
2583
  }
2521
- return "$a, Shot $b$e";
2584
+ return "$a$b$e";
2522
2585
  },
2523
2586
  },
2524
2587
  0x601 => { #6
@@ -2555,10 +2618,10 @@ my %indexInfo = (
2555
2618
  RawConv => '$$self{ImageStabilization} = $val',
2556
2619
  PrintConv => {
2557
2620
  0 => 'Off',
2558
- 1 => 'On, Mode 1',
2559
- 2 => 'On, Mode 2',
2560
- 3 => 'On, Mode 3',
2561
- 4 => 'On, Mode 4', # (NC, E-P5)
2621
+ 1 => 'On, S-IS1 (All Direction Shake I.S.)', #25
2622
+ 2 => 'On, S-IS2 (Vertical Shake I.S.)', #25
2623
+ 3 => 'On, S-IS3 (Horizontal Shake I.S.)', #25
2624
+ 4 => 'On, S-IS Auto (Auto I.S.)', #25
2562
2625
  },
2563
2626
  },
2564
2627
  0x804 => { #PH (E-M1 with firmware update)
@@ -2581,6 +2644,9 @@ my %indexInfo = (
2581
2644
  '9 *' => 'Focus-stacked (* images)', #IB (* = 2-15)
2582
2645
  '11 12' => 'Hand-held high resolution (11 12)', #forum13341 (OM-1)
2583
2646
  '11 16' => 'Hand-held high resolution (11 16)', #IB (perhaps '11 15' would be possible, ref 24)
2647
+ '13 2' => 'GND2 (1EV)', #25
2648
+ '13 4' => 'GND4 (2EV)', #25
2649
+ '13 8' => 'GND8 (3EV)', #25
2584
2650
  OTHER => sub {
2585
2651
  my ($val, $inv, $conv) = @_;
2586
2652
  if ($inv) {
@@ -2601,6 +2667,73 @@ my %indexInfo = (
2601
2667
  },
2602
2668
  },
2603
2669
  },
2670
+ 0x0821 => { #25
2671
+ Name => 'ISOAutoSettings',
2672
+ Writable => 'int16u',
2673
+ Count => 2,
2674
+ Notes => '2 numbers: 1. Default sensitivty, 2. Maximum sensitivity',
2675
+ PrintConv => [{
2676
+ 0 => 'n/a',
2677
+ 0x0600 => '200',
2678
+ 0x0655 => '250',
2679
+ 0x06aa => '320',
2680
+ 0x0700 => '400',
2681
+ 0x0755 => '500',
2682
+ 0x07aa => '640',
2683
+ 0x0800 => '800',
2684
+ 0x0855 => '1000',
2685
+ 0x08aa => '1250',
2686
+ 0x0900 => '1600',
2687
+ 0x0955 => '2000',
2688
+ 0x09aa => '2500',
2689
+ 0x0a00 => '3200',
2690
+ 0x0a55 => '4000',
2691
+ 0x0aaa => '5000',
2692
+ 0x0b00 => '6400',
2693
+ 0x0b55 => '8000',
2694
+ 0x0baa => '10000',
2695
+ 0x0c00 => '12800',
2696
+ 0x0c55 => '16000',
2697
+ 0x0caa => '20000',
2698
+ 0x0d00 => '25600',
2699
+ 0x0d55 => '32000',
2700
+ 0x0daa => '40000',
2701
+ 0x0e00 => '51200',
2702
+ 0x0e55 => '64000',
2703
+ 0x0eaa => '80000',
2704
+ 0x0f00 => '102400',
2705
+ },{
2706
+ 0 => 'n/a',
2707
+ 0x0600 => '200',
2708
+ 0x0655 => '250',
2709
+ 0x06aa => '320',
2710
+ 0x0700 => '400',
2711
+ 0x0755 => '500',
2712
+ 0x07aa => '640',
2713
+ 0x0800 => '800',
2714
+ 0x0855 => '1000',
2715
+ 0x08aa => '1250',
2716
+ 0x0900 => '1600',
2717
+ 0x0955 => '2000',
2718
+ 0x09aa => '2500',
2719
+ 0x0a00 => '3200',
2720
+ 0x0a55 => '4000',
2721
+ 0x0aaa => '5000',
2722
+ 0x0b00 => '6400',
2723
+ 0x0b55 => '8000',
2724
+ 0x0baa => '10000',
2725
+ 0x0c00 => '12800',
2726
+ 0x0c55 => '16000',
2727
+ 0x0caa => '20000',
2728
+ 0x0d00 => '25600',
2729
+ 0x0d55 => '32000',
2730
+ 0x0daa => '40000',
2731
+ 0x0e00 => '51200',
2732
+ 0x0e55 => '64000',
2733
+ 0x0eaa => '80000',
2734
+ 0x0f00 => '102400',
2735
+ }],
2736
+ },
2604
2737
  0x900 => { #11
2605
2738
  Name => 'ManometerPressure',
2606
2739
  Writable => 'int16u',
@@ -2651,6 +2784,51 @@ my %indexInfo = (
2651
2784
  },
2652
2785
  );
2653
2786
 
2787
+ # ref 25
2788
+ %Image::ExifTool::Olympus::AFTargetInfo = (
2789
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2790
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
2791
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
2792
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
2793
+ FIRST_ENTRY => 0,
2794
+ FORMAT => 'int16u',
2795
+ WRITABLE => 1,
2796
+ 0 => { Name => 'AFFrameSize', Format => 'int16u[2]' },
2797
+ 2 => { Name => 'AFFocusArea', Format => 'int16u[4]' },
2798
+ 6 => {
2799
+ Name => 'AFSelectedArea',
2800
+ Format => 'int16u[4]',
2801
+ Notes => q{
2802
+ X Y width height. Subject Detection OFF: User selected AF target area.
2803
+ Subject Detection ON: Area related to subject
2804
+ }
2805
+ },
2806
+ );
2807
+
2808
+ # ref 25
2809
+ %Image::ExifTool::Olympus::SubjectDetectInfo = (
2810
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2811
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
2812
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
2813
+ NOTES => 'Subject Detection for OM cameras.',
2814
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
2815
+ FIRST_ENTRY => 0,
2816
+ FORMAT => 'int16u',
2817
+ WRITABLE => 1,
2818
+ 0 => { Name => 'SubjectDetectFrameSize', Format => 'int16u[2]' },
2819
+ 2 => { Name => 'SubjectDetectArea', Format => 'int16u[4]', Notes => 'X Y width height' },
2820
+ 6 => { Name => 'SubjectDetectDetail', Format => 'int16u[4]' },
2821
+ 10 => {
2822
+ Name => 'SubjectDetectStatus',
2823
+ PrintConv => {
2824
+ 256 => 'Level 2 Detail', # (eye, airplane cockpit, ...)
2825
+ 257 => 'Level 1 Detail', # (head, airplane nose, ...)
2826
+ 260 => 'Subject Detected, No Detail',
2827
+ 772 => 'No Detection',
2828
+ },
2829
+ },
2830
+ );
2831
+
2654
2832
  # Olympus RAW processing IFD (ref 6)
2655
2833
  %Image::ExifTool::Olympus::RawDevelopment = (
2656
2834
  WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
@@ -2835,6 +3013,23 @@ my %indexInfo = (
2835
3013
  PrintConvColumns => 2,
2836
3014
  PrintConv => [ \%filters ],
2837
3015
  },
3016
+ 0x8000 => {
3017
+ Name => 'RawDevSubIFD',
3018
+ Groups => { 1 => 'MakerNotes' },
3019
+ Flags => 'SubIFD',
3020
+ FixFormat => 'ifd',
3021
+ SubDirectory => {
3022
+ TagTable => 'Image::ExifTool::Olympus::RawDevSubIFD',
3023
+ Start => '$val',
3024
+ },
3025
+ },
3026
+ );
3027
+
3028
+ %Image::ExifTool::Olympus::RawDevSubIFD = (
3029
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
3030
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
3031
+ WRITABLE => 1,
3032
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
2838
3033
  );
2839
3034
 
2840
3035
  # Olympus Image processing IFD
@@ -3073,6 +3268,11 @@ my %indexInfo = (
3073
3268
  # (use in conjunction with KeystoneDirection, -ve is Top or Right, +ve is Bottom or Left)
3074
3269
  Notes => '3 numbers: 1. Keystone Value, 2. Min, 3. Max',
3075
3270
  },
3271
+ 0x2110 => { #25
3272
+ Name => 'GNDFilterType',
3273
+ Format => 'int8u',
3274
+ PrintConv => { 0 => 'High', 1 => 'Medium', 2 => 'Soft' },
3275
+ },
3076
3276
  );
3077
3277
 
3078
3278
  # Olympus Focus Info IFD
@@ -3238,7 +3438,7 @@ my %indexInfo = (
3238
3438
  ],
3239
3439
  # 0x31a Continuous AF parameters?
3240
3440
  0x31b => [ #herb, based on investigations of abgestumpft: https://exiftool.org/forum/index.php?topic=14527.0
3241
- # for newer models E-Mxxx and OM-x
3441
+ # for newer models E-Mxxx and OM-x
3242
3442
  {
3243
3443
  Name => 'AFPointDetails',
3244
3444
  Condition => '$$self{Model} =~ m/^E-M|^OM-/ ',
@@ -3250,7 +3450,7 @@ my %indexInfo = (
3250
3450
  (($val >> 8) & 0x3) . " " . (($val >> 7) & 0x1) . " " . (($val >> 5) & 0x1) . " " .
3251
3451
  # eye AF face detect x-AF with MF
3252
3452
  (($val >> 4) & 0x1) . " " . (($val >> 3) & 0x1) . " " . ($val & 0x7)',
3253
- # release object found MF...
3453
+ # release object found MF...
3254
3454
  PrintConvColumns => 4,
3255
3455
  PrintConv => [
3256
3456
  {
@@ -3405,6 +3605,7 @@ my %indexInfo = (
3405
3605
  },
3406
3606
  },
3407
3607
  # 0x102a same as Subdir4-0x300
3608
+ 0x2100 => 'AntiShockWaitingTime', #25
3408
3609
  );
3409
3610
 
3410
3611
  # AF information (ref PH)
@@ -3419,6 +3620,10 @@ my %indexInfo = (
3419
3620
  # 0x36 - int16u: AFAreaHeight? (50)
3420
3621
  # (AF area positions above give the top-left coordinates of the AF area in the
3421
3622
  # AF frame. Increasing Y is downwards, and the AF frame size is about 1280x256)
3623
+ 0x062c => { #25
3624
+ Name => 'CAFSensitivity',
3625
+ Format => 'int8s',
3626
+ },
3422
3627
  );
3423
3628
 
3424
3629
  # Olympus raw information tags (ref 6)
@@ -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.25';
40
+ $VERSION = '2.26';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -1374,10 +1374,10 @@ my %shootingMode = (
1374
1374
  Writable => 'int16u',
1375
1375
  Format => 'int16s',
1376
1376
  },
1377
- 0xbe => { #forum11194
1377
+ 0xbe => { #forum11194/17508
1378
1378
  Name => 'LongExposureNRUsed',
1379
1379
  Writable => 'int16u',
1380
- PrintConv => { 0 => 'No', 1 => 'Yes' },
1380
+ PrintConv => { 1 => 'No', 2 => 'Yes' },
1381
1381
  },
1382
1382
  0xbf => { #forum11194
1383
1383
  Name => 'PostFocusMerging',