exiftool_vendored 13.30.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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +57 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +4 -3
  5. data/bin/META.yml +3 -2
  6. data/bin/README +47 -46
  7. data/bin/exiftool +88 -60
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
  9. data/bin/lib/Image/ExifTool/Canon.pm +16 -5
  10. data/bin/lib/Image/ExifTool/Exif.pm +7 -4
  11. data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
  12. data/bin/lib/Image/ExifTool/FujiFilm.pm +13 -3
  13. data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
  14. data/bin/lib/Image/ExifTool/GoPro.pm +23 -4
  15. data/bin/lib/Image/ExifTool/LNK.pm +24 -3
  16. data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
  17. data/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  18. data/bin/lib/Image/ExifTool/Lang/fr.pm +2 -2
  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/LigoGPS.pm +14 -6
  25. data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
  26. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  27. data/bin/lib/Image/ExifTool/Nikon.pm +80 -39
  28. data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
  29. data/bin/lib/Image/ExifTool/Olympus.pm +240 -35
  30. data/bin/lib/Image/ExifTool/PDF.pm +1 -0
  31. data/bin/lib/Image/ExifTool/Panasonic.pm +4 -4
  32. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  33. data/bin/lib/Image/ExifTool/Pentax.pm +276 -56
  34. data/bin/lib/Image/ExifTool/Plot.pm +2 -3
  35. data/bin/lib/Image/ExifTool/QuickTime.pm +13 -5
  36. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +41 -17
  37. data/bin/lib/Image/ExifTool/Sigma.pm +19 -1
  38. data/bin/lib/Image/ExifTool/Sony.pm +5 -2
  39. data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
  40. data/bin/lib/Image/ExifTool/TagLookup.pm +4374 -4262
  41. data/bin/lib/Image/ExifTool/TagNames.pod +259 -22
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
  43. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  44. data/bin/lib/Image/ExifTool/Writer.pl +142 -139
  45. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  46. data/bin/lib/Image/ExifTool.pm +16 -7
  47. data/bin/lib/Image/ExifTool.pod +45 -44
  48. data/bin/perl-Image-ExifTool.spec +46 -45
  49. data/lib/exiftool_vendored/version.rb +1 -1
  50. metadata +3 -2
@@ -13,16 +13,14 @@
13
13
  package Image::ExifTool::NikonCustom;
14
14
 
15
15
  use strict;
16
- use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ9);
16
+ use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ8 %buttonsZ9);
17
17
 
18
- $VERSION = '1.26';
18
+ $VERSION = '1.27';
19
19
 
20
20
  @ISA = qw(Exporter);
21
- @EXPORT_OK = qw(%buttonsZ9);
21
+ @EXPORT_OK = qw(%buttonsZ8 %buttonsZ9);
22
22
 
23
- %buttonsZ9= (
24
- SeparateTable => 'ButtonsZ9',
25
- PrintConv => {
23
+ my %buttonsCommonZ8Z9 = ( #button roles shared by the Z8 & Z9. Assigments began to diverge with Z8 fw 2.00 and became significant with z8 fw 3.0
26
24
  0 => 'None',
27
25
  1 => 'Preview',
28
26
  3 => 'FV Lock',
@@ -112,7 +110,37 @@ $VERSION = '1.26';
112
110
  113 => 'Power Zoom +',
113
111
  114 => 'Power Zoom -',
114
112
  115 => 'Delete',
115
- 116 => 'Pixel Shift Shooting', #Z8 (Z9 fw 5.1 maps as 'Save and Load Power Zoom Position')
113
+ );
114
+ %buttonsZ8 = (
115
+ SeparateTable => 'ButtonsZ8',
116
+ PrintConv => {
117
+ %buttonsCommonZ8Z9,
118
+ 116 => 'Pixel Shift Shooting',
119
+ 117 => 'Cycle AF-area Mode',
120
+ 119 => 'Focus Limiter',
121
+ 120 => 'Jump to Source Image',
122
+ 121 => 'Raw Processing (Current)',
123
+ 122 => 'Raw Processing (Multiple)',
124
+ 123 => 'Trim',
125
+ 124 => 'Resize (Current)',
126
+ 125 => 'Resize (Multiple)',
127
+ 126 => 'D-Lighting',
128
+ 127 => 'Straighten',
129
+ 128 => 'Distortion Control',
130
+ 129 => 'Perspective Control',
131
+ 130 => 'Monochrome',
132
+ 131 => 'Overlay (Add)',
133
+ 132 => 'Lighten',
134
+ 133 => 'Darken',
135
+ 134 => 'Motion Blend',
136
+ 135 => 'Cycle Monitor Mode',
137
+ },
138
+ );
139
+ %buttonsZ9= (
140
+ SeparateTable => 'ButtonsZ9',
141
+ PrintConv => {
142
+ %buttonsCommonZ8Z9,
143
+ 116 => 'Save and Load Power Zoom Position',
116
144
  117 => 'Cycle AF-area Mode',
117
145
  118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
118
146
  119 => 'Raw Processing (Multiple)',
@@ -10243,6 +10271,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10243
10271
  1 => '1 s',
10244
10272
  2 => '2 s',
10245
10273
  3 => '3 s',
10274
+ 4 => 'Min',
10246
10275
  },
10247
10276
  },
10248
10277
  51 => { Name => 'PlaybackMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc3-a
@@ -10404,6 +10433,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10404
10433
  263 => { Name => 'AutoFocusModeRestrictions', PrintConv => \%focusModeRestrictionsZ9, Unknown => 1}, # CSa9
10405
10434
  267 => { Name => 'CHModeShootingSpeed', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1a
10406
10435
  273 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
10436
+ 281 => { Name => 'Func3Button', %buttonsZ9}, # CSf2-c
10407
10437
  335 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10408
10438
  336 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10409
10439
  337 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
@@ -10426,7 +10456,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10426
10456
  463 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
10427
10457
  469 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
10428
10458
 
10429
- 515 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e
10459
+ #515 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e #28 this is incorrect - MovieAFAreaMode is set in the Photo Shooting Menu and the tag is set in Nikon.pm
10430
10460
  529 => { # CSg9-a
10431
10461
  Name => 'ZebraPatternToneRange',
10432
10462
  Unknown => 1,
@@ -10736,7 +10766,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10736
10766
  #119 Func2Button submenu: AreaMode 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-b
10737
10767
  #121 Func2Button submenu: AreaMode+AF-On 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-b
10738
10768
  #125 Func2Button submenu: SynchronizedRelease 1=>'Master', 2=>'Remote' # CSf2-b
10739
- #127 Func2Button submenu: Zoom 0=>'Zoom (Low)', 2=>'Zoom (1:1)', 2=>'Zoom (High)' # CSf2-b
10769
+ #127 Func2Button submenu: Zoom 0=>'Zoom 5', 2=>'Zoom (1:1)', 2=>'Zoom 200%, 2=>'Zoom 400%' # CSf2-b
10740
10770
  #129 Func2Button & Func2ButtonPlayback submenu: Rating # CSf2-b & CSf3b 0=>'Candidate For Deletion' 6=>''None'
10741
10771
  131 => { Name => 'AFOnButton', %buttonsZ9}, # CSf2-c
10742
10772
  143 => { Name => 'SubSelector', %buttonsZ9, Unknown => 1}, # CSf2-g
@@ -11275,7 +11305,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
11275
11305
  493 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
11276
11306
  505 => { Name => 'VerticalMovieFuncButton', %buttonsZ9, Unknown => 1}, # CSg2-d
11277
11307
  529 => { Name => 'VerticalMovieAFOnButton', %buttonsZ9, Unknown => 1}, # CSg2-l
11278
- 539 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e
11308
+ #539 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e #28 this feels incorrect - MovieAFAreaMode is set in the Photo Shooting Menu and the tag should be in Nikon.pm
11279
11309
  #545 => { Name => 'MovieLimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-a
11280
11310
  #546 => { Name => 'MovieLimitAF-AreaModeSelWideAF_W', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-b
11281
11311
  #547 => { Name => 'MovieLimitAF-AreaModeSelSubjectTrack', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-c
@@ -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)
@@ -234,6 +234,7 @@ my %supportedFilter = (
234
234
  Kids => {
235
235
  SubDirectory => { TagTable => 'Image::ExifTool::PDF::Kids' },
236
236
  },
237
+ MediaBox => { Name => 'MediaBox', List => 1 },
237
238
  );
238
239
 
239
240
  # tags in PDF Perms dictionary
@@ -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',
@@ -1439,7 +1439,7 @@ my %shootingMode = (
1439
1439
  0xde => { #forum17299
1440
1440
  Name => 'AFAreaSize',
1441
1441
  Writable => 'rational64u',
1442
- Notes => 'relative to size of image',
1442
+ Notes => 'relative to size of image. "n/a" for manual focus',
1443
1443
  Count => 2,
1444
1444
  PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
1445
1445
  PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
@@ -56,7 +56,7 @@ sub Process_mett($$$);
56
56
  Name => 'ParrotAutomation',
57
57
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
58
58
  },
59
- # timed metadata written by ARCore (see forum13653)
59
+ # MetaType of timed metadata written by ARCore (see forum13653)
60
60
  'application/arcore-accel' => {
61
61
  Name => 'ARCoreAccel',
62
62
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },