exiftool_vendored 12.42.0 → 12.52.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +226 -6
  3. data/bin/MANIFEST +14 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -44
  7. data/bin/config_files/acdsee.config +2 -1
  8. data/bin/config_files/frameCount.config +56 -0
  9. data/bin/config_files/tiff_version.config +1 -1
  10. data/bin/exiftool +116 -97
  11. data/bin/fmt_files/gpx.fmt +3 -0
  12. data/bin/fmt_files/gpx_wpt.fmt +3 -0
  13. data/bin/lib/Image/ExifTool/Apple.pm +16 -3
  14. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
  15. data/bin/lib/Image/ExifTool/Canon.pm +66 -37
  16. data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
  17. data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
  18. data/bin/lib/Image/ExifTool/Casio.pm +3 -3
  19. data/bin/lib/Image/ExifTool/DJI.pm +2 -1
  20. data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
  21. data/bin/lib/Image/ExifTool/EXE.pm +9 -1
  22. data/bin/lib/Image/ExifTool/Exif.pm +17 -12
  23. data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
  24. data/bin/lib/Image/ExifTool/FLIR.pm +9 -7
  25. data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
  26. data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
  27. data/bin/lib/Image/ExifTool/GPS.pm +31 -5
  28. data/bin/lib/Image/ExifTool/Geotag.pm +36 -8
  29. data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
  30. data/bin/lib/Image/ExifTool/ICO.pm +143 -0
  31. data/bin/lib/Image/ExifTool/ID3.pm +6 -6
  32. data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
  33. data/bin/lib/Image/ExifTool/JPEG.pm +1 -0
  34. data/bin/lib/Image/ExifTool/Jpeg2000.pm +24 -3
  35. data/bin/lib/Image/ExifTool/LNK.pm +5 -2
  36. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  37. data/bin/lib/Image/ExifTool/Lang/fr.pm +6015 -759
  38. data/bin/lib/Image/ExifTool/Lang/sk.pm +1927 -0
  39. data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
  40. data/bin/lib/Image/ExifTool/MIE.pm +9 -3
  41. data/bin/lib/Image/ExifTool/MISB.pm +494 -0
  42. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
  43. data/bin/lib/Image/ExifTool/Matroska.pm +272 -48
  44. data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
  45. data/bin/lib/Image/ExifTool/Nikon.pm +746 -382
  46. data/bin/lib/Image/ExifTool/NikonCustom.pm +139 -106
  47. data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
  48. data/bin/lib/Image/ExifTool/Olympus.pm +6 -4
  49. data/bin/lib/Image/ExifTool/PNG.pm +8 -1
  50. data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
  51. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
  52. data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
  53. data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +166 -13
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +161 -22
  57. data/bin/lib/Image/ExifTool/README +15 -4
  58. data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
  59. data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
  60. data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
  61. data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
  62. data/bin/lib/Image/ExifTool/Sony.pm +75 -47
  63. data/bin/lib/Image/ExifTool/TagInfoXML.pm +13 -6
  64. data/bin/lib/Image/ExifTool/TagLookup.pm +4791 -4519
  65. data/bin/lib/Image/ExifTool/TagNames.pod +2056 -1446
  66. data/bin/lib/Image/ExifTool/Text.pm +3 -4
  67. data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
  68. data/bin/lib/Image/ExifTool/Validate.pm +3 -3
  69. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
  70. data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
  71. data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
  72. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
  73. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +12 -7
  74. data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
  75. data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -1
  76. data/bin/lib/Image/ExifTool/Writer.pl +46 -18
  77. data/bin/lib/Image/ExifTool/XMP.pm +78 -59
  78. data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
  79. data/bin/lib/Image/ExifTool/ZIP.pm +19 -7
  80. data/bin/lib/Image/ExifTool.pm +146 -38
  81. data/bin/lib/Image/ExifTool.pod +83 -69
  82. data/bin/perl-Image-ExifTool.spec +43 -43
  83. data/lib/exiftool_vendored/version.rb +1 -1
  84. metadata +10 -4
@@ -15,68 +15,87 @@ package Image::ExifTool::NikonCustom;
15
15
  use strict;
16
16
  use vars qw($VERSION);
17
17
 
18
- $VERSION = '1.20';
18
+ $VERSION = '1.22';
19
19
 
20
20
  my %buttonsZ9= (
21
- 0 => 'None',
22
- 1 => 'Preview',
23
- 3 => 'FV Lock',
24
- 4 => 'AE/AF Lock',
25
- 5 => 'AE Lock Only',
26
- 6 => 'AE Lock (reset on release)',
27
- 7 => 'AE Lock (hold)',
28
- 8 => 'AF Lock Only',
29
- 9 => 'AF-On',
30
- 10 => 'Flash Disable/Enable',
31
- 11 => 'Bracketing Burst',
32
- 12 => '+NEF(RAW)',
33
- 18 => 'Virtual Horizon',
34
- 19 => 'Synchronized Release',
35
- 20 => 'My Menu',
36
- 21 => 'My Menu Top Item',
37
- 22 => 'Playback',
38
- 23 => 'Rating',
39
- 24 => 'Protect',
40
- 25 => 'Zoom',
41
- 26 => 'Focus Peaking',
42
- 28 => 'Image Area',
43
- 30 => 'Non-CPU Lens',
44
- 31 => 'Active-D Lighting',
45
- 33 => '1 Stop Speed/Aperture',
46
- 35 => 'Metering',
47
- 36 => 'Auto Bracketing',
48
- 37 => 'Multiple Exposure',
49
- 38 => 'HDR Overlay',
50
- 39 => 'Picture Control',
51
- 40 => 'Quality',
52
- 41 => 'Focus Mode/AF AreaMode',
53
- 42 => 'Select Center Focus Point',
54
- 44 => 'Record Movie',
55
- 47 => 'Choose Folder',
56
- 48 => 'Power Aperture (Open)',
57
- 49 => 'Power Aperture (Close)',
58
- 52 => 'Microphone Sensitivity',
59
- 57 => 'Preset Focus Point',
60
- 58 => 'AE/AWB Lock (hold)',
61
- 59 => 'AF-AreaMode',
62
- 60 => 'AF-AreaMode + AF-On',
63
- 61 => 'Recall Shooting Functions',
64
- 64 => 'Filtered Playback',
65
- 65 => 'Same as AF-On',
66
- 66 => 'Voice Memo',
67
- 70 => 'Photo Shooting Bank',
68
- 73 => 'Exposure Compensation',
69
- 76 => 'Silent Mode',
70
- 78 => 'LiveView Information',
71
- 79 => 'AWB Lock (hold)',
72
- 80 => 'Grid Display',
73
- 81 => 'Starlight View',
74
- 82 => 'Select To Send (PC)',
75
- 83 => 'Select To Send (FTP)',
76
- 85 => 'Control Lock',
77
- 86 => 'Save Focus Position',
78
- 87 => 'Recall Focus Position',
79
- 88 => 'Recall Shooting Functions (Hold)',
21
+ SeparateTable => 'ButtonsZ9',
22
+ PrintConv => {
23
+ 0 => 'None',
24
+ 1 => 'Preview',
25
+ 3 => 'FV Lock',
26
+ 4 => 'AE/AF Lock',
27
+ 5 => 'AE Lock Only',
28
+ 6 => 'AE Lock (reset on release)',
29
+ 7 => 'AE Lock (hold)',
30
+ 8 => 'AF Lock Only',
31
+ 9 => 'AF-On',
32
+ 10 => 'Flash Disable/Enable',
33
+ 11 => 'Bracketing Burst',
34
+ 12 => '+NEF(RAW)',
35
+ 18 => 'Virtual Horizon',
36
+ 19 => 'Synchronized Release',
37
+ 20 => 'My Menu',
38
+ 21 => 'My Menu Top Item',
39
+ 22 => 'Playback',
40
+ 23 => 'Rating',
41
+ 24 => 'Protect',
42
+ 25 => 'Zoom',
43
+ 26 => 'Focus Peaking',
44
+ 28 => 'Image Area',
45
+ 30 => 'Non-CPU Lens',
46
+ 31 => 'Active-D Lighting',
47
+ 33 => '1 Stop Speed/Aperture',
48
+ 34 => 'White Balance',
49
+ 35 => 'Metering',
50
+ 36 => 'Auto Bracketing',
51
+ 37 => 'Multiple Exposure',
52
+ 38 => 'HDR Overlay',
53
+ 39 => 'Picture Control',
54
+ 40 => 'Quality',
55
+ 41 => 'Focus Mode/AF AreaMode',
56
+ 42 => 'Select Center Focus Point',
57
+ 44 => 'Record Movie',
58
+ 47 => 'Choose Folder',
59
+ 48 => 'Power Aperture (Open)',
60
+ 49 => 'Power Aperture (Close)',
61
+ 52 => 'Microphone Sensitivity',
62
+ 57 => 'Preset Focus Point',
63
+ 58 => 'AE/AWB Lock (hold)',
64
+ 59 => 'AF-AreaMode',
65
+ 60 => 'AF-AreaMode + AF-On',
66
+ 61 => 'Recall Shooting Functions',
67
+ 64 => 'Filtered Playback',
68
+ 65 => 'Same as AF-On',
69
+ 66 => 'Voice Memo',
70
+ 70 => 'Photo Shooting Bank',
71
+ 71 => 'ISO',
72
+ 73 => 'Exposure Compensation',
73
+ 76 => 'Silent Mode',
74
+ 78 => 'LiveView Information',
75
+ 79 => 'AWB Lock (hold)',
76
+ 80 => 'Grid Display',
77
+ 81 => 'Starlight View',
78
+ 82 => 'Select To Send (PC)',
79
+ 83 => 'Select To Send (FTP)',
80
+ 84 => 'Pattern Tone Range',
81
+ 85 => 'Control Lock',
82
+ 86 => 'Save Focus Position',
83
+ 87 => 'Recall Focus Position',
84
+ 88 => 'Recall Shooting Functions (Hold)',
85
+ 97 => 'High Frequency Flicker Reduction',
86
+ 98 => 'Switch FX/DX',
87
+ 99 => 'View Mode (Photo LV)',
88
+ 100 => 'Photo Flicker Reduction',
89
+ 101 => 'Filtered Playback (Select Criteria)',
90
+ 103 => 'Start Series Playback',
91
+ 104 => 'View Assist',
92
+ 105 => 'Hi-Res Zoom+',
93
+ 106 => 'Hi-Res Zoom-',
94
+ 108 => 'Override Other Cameras',
95
+ 109 => 'DISP - Cycle Information Display (shooting)', # Shooting Mode
96
+ 110 => 'DISP - Cycle Information Display (playback)', # Playback mode
97
+ 111 => 'Resume Shooting',
98
+ },
80
99
  );
81
100
  my %dialsZ9 = (
82
101
  0 => '1 Frame',
@@ -116,16 +135,19 @@ my %focusModeRestrictionsZ9 = (
116
135
  4 => 'No Restrictions',
117
136
  );
118
137
  my %powerOffDelayTimesZ9 = (
119
- 0 => '2 s',
120
- 1 => '4 s',
121
- 3 => '10 s',
122
- 4 => '20 s',
123
- 5 => '30 s',
124
- 6 => '1 min',
125
- 7 => '5 min',
126
- 8 => '10 min',
127
- 11 => '30 min',
128
- 12 => 'No Limit',
138
+ SeparateTable => 'DelaysZ9',
139
+ PrintConv => {
140
+ 0 => '2 s',
141
+ 1 => '4 s',
142
+ 3 => '10 s',
143
+ 4 => '20 s',
144
+ 5 => '30 s',
145
+ 6 => '1 min',
146
+ 7 => '5 min',
147
+ 8 => '10 min',
148
+ 11 => '30 min',
149
+ 12 => 'No Limit',
150
+ },
129
151
  );
130
152
  my %thirdHalfFull = (
131
153
  0 => '1/3 EV',
@@ -9767,10 +9789,10 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9767
9789
  3 => '3 s',
9768
9790
  },
9769
9791
  },
9770
- 51 => { Name => 'PlaybackMonitorOffTime', PrintConv => \%powerOffDelayTimesZ9 }, # CSc4-a
9771
- 53 => { Name => 'MenuMonitorOffTime', PrintConv => \%powerOffDelayTimesZ9 }, # CSc4-b
9772
- 55 => { Name => 'ShootingInfoMonitorOffTime',PrintConv => \%powerOffDelayTimesZ9 }, # CSc4-c
9773
- 57 => { Name => 'ImageReviewMonitorOffTime', PrintConv => \%powerOffDelayTimesZ9 }, # CSc4-d
9792
+ 51 => { Name => 'PlaybackMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc4-a
9793
+ 53 => { Name => 'MenuMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc4-b
9794
+ 55 => { Name => 'ShootingInfoMonitorOffTime',%powerOffDelayTimesZ9 }, # CSc4-c
9795
+ 57 => { Name => 'ImageReviewMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc4-d
9774
9796
  59 => { Name => 'CLModeShootingSpeed', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1b
9775
9797
  61 => { # CSd2 # values: 1-200 & 'No Limit'
9776
9798
  Name => 'MaxContinuousRelease',
@@ -9848,25 +9870,25 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9848
9870
  },
9849
9871
  },
9850
9872
  97 => { Name => 'AutoBracketOrder', PrintConv => { 0 => '0,-,+',1 => '-,0,+' } }, # CSe7
9851
- 99 => { Name => 'Func1Button', PrintConv => \%buttonsZ9}, # CSf2-a
9873
+ 99 => { Name => 'Func1Button', %buttonsZ9}, # CSf2-a
9852
9874
  #101 Func1Button submenu: Preview 0 => 'Press To Recall', 1=> 'Hold To Recall' # CSf2-a
9853
9875
  #103 Func1Button submenu: AreaMode 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-a
9854
9876
  #105 Func1Button submenu: AreaMode+AF-On 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-a
9855
9877
  #109 Func1Button submenu: SynchronizedRelease 1=>'Master', 2=>'Remote' # CSf2-a
9856
9878
  #111 Func1Button submenu: Zoom 0=>'Zoom (Low)', 2=>'Zoom (1:1)', 2=>'Zoom (High)' # CSf2-a
9857
9879
  #113 Func1Button & Func1ButtonPlayback submenu: Rating # CSf2-a & CSf3a 0=>'Candidate For Deletion' 6=>''None'
9858
- 115 => { Name => 'Func2Button', PrintConv => \%buttonsZ9}, # CSf2-b
9880
+ 115 => { Name => 'Func2Button', %buttonsZ9}, # CSf2-b
9859
9881
  #117 Func2Button submenu: Preview 0 => 'Press To Recall', 1=> 'Hold To Recall' # CSf2-b
9860
9882
  #119 Func2Button submenu: AreaMode 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-b
9861
9883
  #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
9862
9884
  #125 Func2Button submenu: SynchronizedRelease 1=>'Master', 2=>'Remote' # CSf2-b
9863
9885
  #127 Func2Button submenu: Zoom 0=>'Zoom (Low)', 2=>'Zoom (1:1)', 2=>'Zoom (High)' # CSf2-b
9864
9886
  #129 Func2Button & Func2ButtonPlayback submenu: Rating # CSf2-b & CSf3b 0=>'Candidate For Deletion' 6=>''None'
9865
- 131 => { Name => 'AFOnButton', PrintConv => \%buttonsZ9}, # CSf2-c
9866
- 143 => { Name => 'SubSelector', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-g
9867
- 155 => { Name => 'AssignMovieRecordButton', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-m
9868
- 159 => { Name => 'LensFunc1Button', PrintConv => \%buttonsZ9}, # CSf2-o
9869
- 167 => { Name => 'LensFunc2Button', PrintConv => \%buttonsZ9}, # CSf2-p
9887
+ 131 => { Name => 'AFOnButton', %buttonsZ9}, # CSf2-c
9888
+ 143 => { Name => 'SubSelector', %buttonsZ9, Unknown => 1}, # CSf2-g
9889
+ 155 => { Name => 'AssignMovieRecordButton', %buttonsZ9, Unknown => 1}, # CSf2-m
9890
+ 159 => { Name => 'LensFunc1Button', %buttonsZ9}, # CSf2-o
9891
+ 167 => { Name => 'LensFunc2Button', %buttonsZ9}, # CSf2-p
9870
9892
  173 => { # CSf2-q
9871
9893
  Name => 'LensControlRing',
9872
9894
  PrintConv => {
@@ -9877,8 +9899,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9877
9899
  4 => 'Aperture',
9878
9900
  },
9879
9901
  },
9880
- 175 => { Name => 'MultiSelectorShootMode', PrintConv => \%buttonsZ9}, # CSf2-h called the OK button in camera, tag name retained for compatibility
9881
- 179 => { Name => 'MultiSelectorPlaybackMode', PrintConv => \%buttonsZ9}, # CSf3f
9902
+ 175 => { Name => 'MultiSelectorShootMode', %buttonsZ9}, # CSf2-h called the OK button in camera, tag name retained for compatibility
9903
+ 179 => { Name => 'MultiSelectorPlaybackMode', %buttonsZ9}, # CSf3f
9882
9904
  183 => { Name => 'ShutterSpeedLock', PrintConv => \%offOn }, # CSf4-a
9883
9905
  184 => { Name => 'ApertureLock', PrintConv => \%offOn }, # CSf4-b
9884
9906
  185 => { # CSf5-a Previous cameras reported this tag as part of CmdDialsReverseRotation. Blend with CSf5-b separate settings together to match extant tag name and values
@@ -9902,9 +9924,20 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9902
9924
  }],
9903
9925
  191 => { Name => 'UseDialWithoutHold', PrintConv => \%offOn, Unknown => 1 }, # CSf6
9904
9926
  193 => { Name => 'ReverseIndicators', PrintConv => { 0 => '+ 0 -', 1 => '- 0 +' }, Unknown => 1 }, # CSf7
9905
- 195 => { Name => 'MovieFunc1Button', PrintConv => \%buttonsZ9}, # CSg2-a
9906
- 203 => { Name => 'MovieAF-OnButton', PrintConv => \%buttonsZ9}, # CSg2-f
9907
- 217 => { Name => 'MovieMultiSelector', PrintConv => \%buttonsZ9, Unknown => 1}, # CSg2-h
9927
+ 195 => { Name => 'MovieFunc1Button', %buttonsZ9}, # CSg2-a
9928
+ 199 => { Name => 'MovieFunc2Button', %buttonsZ9}, # CSg2-b
9929
+ 203 => { Name => 'MovieAF-OnButton', %buttonsZ9}, # CSg2-f
9930
+ 215 => { # CSg2-z
9931
+ Name => 'MovieLensControlRing',
9932
+ PrintConv => {
9933
+ 0 => 'None (Disabled)',
9934
+ 2 => 'ISO Sensitivity',
9935
+ 3 => 'Exposure Compensation',
9936
+ 4 => 'Power Aperture',
9937
+ 5 => 'Hi-Res Zoom',
9938
+ },
9939
+ },
9940
+ 217 => { Name => 'MovieMultiSelector', %buttonsZ9, Unknown => 1}, # CSg2-h
9908
9941
  221 => { Name => 'MovieAFSpeed', ValueConv => '$val - 5', ValueConvInv => '$val + 6' }, # CSg6-a
9909
9942
  223 => { Name => 'MovieAFSpeedApply', rintConv => {0 => 'Always', 1 => 'Only During Recording'},}, # CSg6-b
9910
9943
  225 => { # CSg7
@@ -9931,11 +9964,11 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9931
9964
  269.4 => { Name => 'LimitReleaseModeSelC120', Mask => 0x40, PrintConv => \%limitNolimit, Unknown => 1 }, # CSd3-c
9932
9965
  269.5 => { Name => 'LimitReleaseModeSelSelf', Mask => 0x80, PrintConv => \%limitNolimit, Unknown => 1 }, # CSd3-d
9933
9966
  273 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
9934
- 277 => { Name => 'VerticalFuncButton', PrintConv => \%buttonsZ9}, # CSf2-c
9935
- 281 => { Name => 'Func3Button', PrintConv => \%buttonsZ9}, # CSf2-c
9936
- 285 => { Name => 'VerticalAFOnButton', PrintConv => \%buttonsZ9}, # CSf2-l
9967
+ 277 => { Name => 'VerticalFuncButton', %buttonsZ9}, # CSf2-c
9968
+ 281 => { Name => 'Func3Button', %buttonsZ9}, # CSf2-c
9969
+ 285 => { Name => 'VerticalAFOnButton', %buttonsZ9}, # CSf2-l
9937
9970
  293 => { Name => 'VerticalMultiSelectorPlaybackMode', PrintConv => { 0 => 'Image Scroll L/R', 1 => 'Image Scroll Up/Down' }, Unknown => 1}, # CSf3-j
9938
- 295 => { Name => 'MovieFunc3Button', PrintConv => \%buttonsZ9}, # CSg2-c
9971
+ 295 => { Name => 'MovieFunc3Button', %buttonsZ9}, # CSg2-c
9939
9972
  335 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9940
9973
  336 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9941
9974
  337 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
@@ -9947,26 +9980,26 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9947
9980
  356 => { Name => 'EVFImageFrame', PrintConv => \%offOn, Unknown => 1 }, # CSd14
9948
9981
  357 => { Name => 'EVFGrid', PrintConv => \%evfGridsZ9, Unknown => 1 }, # CSd15
9949
9982
  359 => { Name => 'VirtualHorizonStyle', PrintConv => {0 => 'Type A (Cockpit)', 1 => 'Type B (Sides)' }, Unknown => 1}, #CSd16
9950
- 373 => { Name => 'Func4Button', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-e
9951
- 379 => { Name => 'AudioButton', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-i
9952
- 381 => { Name => 'QualityButton', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-j
9953
- 399 => { Name => 'VerticalMultiSelector', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf2-k
9954
- 421 => { Name => 'Func1ButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-a
9955
- 423 => { Name => 'Func2ButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-b
9956
- 425 => { Name => 'Func3ButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-c
9957
- 431 => { Name => 'Func4ButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-e
9958
- 437 => { Name => 'MovieRecordButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-m
9959
- 439 => { Name => 'VerticalFuncButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-d
9960
- 441 => { Name => 'AudioButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-g
9961
- 447 => { Name => 'QualityButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-h
9983
+ 373 => { Name => 'Func4Button', %buttonsZ9, Unknown => 1}, # CSf2-e
9984
+ 379 => { Name => 'AudioButton', %buttonsZ9, Unknown => 1}, # CSf2-i
9985
+ 381 => { Name => 'QualityButton', %buttonsZ9, Unknown => 1}, # CSf2-j
9986
+ 399 => { Name => 'VerticalMultiSelector', %buttonsZ9, Unknown => 1}, # CSf2-k
9987
+ 421 => { Name => 'Func1ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-a
9988
+ 423 => { Name => 'Func2ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-b
9989
+ 425 => { Name => 'Func3ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-c
9990
+ 431 => { Name => 'Func4ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-e
9991
+ 437 => { Name => 'MovieRecordButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-m
9992
+ 439 => { Name => 'VerticalFuncButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-d
9993
+ 441 => { Name => 'AudioButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-g
9994
+ 447 => { Name => 'QualityButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-h
9962
9995
  467 => { Name => 'FocusPointLock', PrintConv => \%offOn, Unknown => 1}, # CSf4-c
9963
- 453 => { Name => 'WhiteBalanceButtonPlaybackMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSf3-i
9996
+ 453 => { Name => 'WhiteBalanceButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-i
9964
9997
  459 => { Name => 'CommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-k
9965
9998
  463 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
9966
9999
  469 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
9967
- 481 => { Name => 'VerticalMovieFuncButton', PrintConv => \%buttonsZ9, Unknown => 1}, # CSg2-d
9968
- 505 => { Name => 'VerticalMovieAFOnButton', PrintConv => \%buttonsZ9, Unknown => 1}, # CSg2-l
9969
- 515 => { Name => 'MovieAFAreaMode', PrintConv => \%buttonsZ9, Unknown => 1}, # CSg2-e
10000
+ 481 => { Name => 'VerticalMovieFuncButton', %buttonsZ9, Unknown => 1}, # CSg2-d
10001
+ 505 => { Name => 'VerticalMovieAFOnButton', %buttonsZ9, Unknown => 1}, # CSg2-l
10002
+ 515 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e
9970
10003
  #521 => { Name => 'MovieLimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-a
9971
10004
  #522 => { Name => 'MovieLimitAF-AreaModeSelWideAF_W', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-b
9972
10005
  #523 => { Name => 'MovieLimitAF-AreaModeSelSubjectTrack', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-c
@@ -2036,11 +2036,13 @@ sub ProcessNikonSettings($$$)
2036
2036
  for ($i=0; $i<$num; ++$i) {
2037
2037
  my $entry = $start + 0x18 + $i * 8;
2038
2038
  my $tag = Get16u($dataPt, $entry);
2039
- my $fmt = Get16u($dataPt, $entry + 2);
2039
+ # this is odd, but either the format is 16-bit and always big-endian,
2040
+ # or it is 8-bit and we have an unknown byte in the entry...
2041
+ my $fmt = Get8u($dataPt, $entry + 3);
2040
2042
  my $val = Get32u($dataPt, $entry + 4);
2041
2043
  # abort if the tag has a format that we haven't yet seen
2042
- # (assuming this is a size/format code. So far we have only seen 0x400)
2043
- $fmt == 0x400 or $et->Warn(sprintf('Unknown format 0x%x for NikonSettings tag 0x%.4x',$fmt,$tag)), last;
2044
+ # (assuming this is a size/format code. So far we have only seen a code of 4)
2045
+ $fmt == 4 or $et->Warn(sprintf('Unknown format $fmt for NikonSettings tag 0x%.4x',$tag)), last;
2044
2046
  $et->HandleTag($tagTablePtr, $tag, $val,
2045
2047
  DataPt => $dataPt,
2046
2048
  DataPos => $$dirInfo{DataPos},
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.78';
43
+ $VERSION = '2.79';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -115,6 +115,7 @@ my %olympusLensTypes = (
115
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
116
116
  '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
117
117
  '0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
118
+ '0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
118
119
  # Sigma lenses
119
120
  '1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
120
121
  '1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
@@ -433,6 +434,7 @@ my %olympusCameraTypes = (
433
434
  S0092 => 'E-M1MarkIII', #IB
434
435
  S0093 => 'E-P7', #IB
435
436
  S0095 => 'OM-1', #IB
437
+ S0101 => 'OM-5', #IB
436
438
  SR45 => 'D220',
437
439
  SR55 => 'D320L',
438
440
  SR83 => 'D340L',
@@ -1834,7 +1836,7 @@ my %indexInfo = (
1834
1836
  1 => 'Sequential shooting AF',
1835
1837
  2 => 'Continuous AF',
1836
1838
  3 => 'Multi AF',
1837
- 4 => 'Face detect', #11
1839
+ 4 => 'Face Detect', #11
1838
1840
  10 => 'MF',
1839
1841
  }, {
1840
1842
  0 => '(none)',
@@ -1842,7 +1844,7 @@ my %indexInfo = (
1842
1844
  0 => 'S-AF',
1843
1845
  2 => 'C-AF',
1844
1846
  4 => 'MF',
1845
- 5 => 'Face detect',
1847
+ 5 => 'Face Detect',
1846
1848
  6 => 'Imager AF',
1847
1849
  7 => 'Live View Magnification Frame',
1848
1850
  8 => 'AF sensor',
@@ -1919,7 +1921,7 @@ my %indexInfo = (
1919
1921
  PrintConv => [{
1920
1922
  0 => 'Off',
1921
1923
  1 => 'Motorsports',
1922
- 2 => 'Airplnes',
1924
+ 2 => 'Airplanes',
1923
1925
  3 => 'Trains',
1924
1926
  4 => 'Birds',
1925
1927
  5 => 'Dogs & Cats',
@@ -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.60';
39
+ $VERSION = '1.61';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -339,6 +339,11 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
339
339
  # int32u DividedHeight2
340
340
  # int32u IDAT_Offset2 [location of IDAT with start of DividedHeight2 segment]
341
341
  },
342
+ caBX => { # C2PA metadata
343
+ Name => 'JUMBF',
344
+ SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
345
+ },
346
+ # cICP - Coding-independent code points (added in 2022 specification)
342
347
  );
343
348
 
344
349
  # PNG IHDR chunk
@@ -536,6 +541,8 @@ my %unreg = ( Notes => 'unregistered' );
536
541
  Label => { %unreg },
537
542
  Make => { %unreg, Groups => { 2 => 'Camera' } },
538
543
  Model => { %unreg, Groups => { 2 => 'Camera' } },
544
+ # parameters (written by Stable Diffusion)
545
+ # aesthetic_score (written by Stable Diffusion)
539
546
  'create-date'=> {
540
547
  Name => 'CreateDate',
541
548
  Groups => { 2 => 'Time' },
@@ -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.17';
40
+ $VERSION = '2.18';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -543,7 +543,11 @@ my %shootingMode = (
543
543
  0x2c => [
544
544
  {
545
545
  Name => 'ContrastMode',
546
- Condition => '$$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/',
546
+ Condition => q{
547
+ $$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/ and
548
+ # tested for DC-GH6, but rule out other DC- models just in case - PH
549
+ $$self{Model} !~ /^DC-/
550
+ },
547
551
  Flags => 'PrintHex',
548
552
  Writable => 'int16u',
549
553
  Notes => q{
@@ -1129,7 +1133,10 @@ my %shootingMode = (
1129
1133
  8 => 'Cinelike D', #forum11194
1130
1134
  9 => 'Cinelike V', #forum11194
1131
1135
  11 => 'L. Monochrome', #forum11194
1136
+ 12 => 'Like709', #forum14033
1132
1137
  15 => 'L. Monochrome D', #forum11194
1138
+ 17 => 'V-Log', #forum14033
1139
+ 18 => 'Cinelike D2', #forum14033
1133
1140
  },
1134
1141
  },
1135
1142
  0x8a => { #18
@@ -1255,8 +1262,9 @@ my %shootingMode = (
1255
1262
  Writable => 'rational64u',
1256
1263
  Format => 'int32u',
1257
1264
  PrintConv => {
1258
- '0 0' => 'Expressive',
1259
- # '0 1' => have seen this for XS1 (PH)
1265
+ # '0 0' => 'Expressive', #forum11194
1266
+ '0 0' => 'Off', #forum14033 (GH6)
1267
+ '0 1' => 'Expressive', #forum14033 (GH6) (have also seen this for XS1)
1260
1268
  '0 2' => 'Retro',
1261
1269
  '0 4' => 'High Key',
1262
1270
  '0 8' => 'Sepia',
@@ -1435,6 +1443,15 @@ my %shootingMode = (
1435
1443
  ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
1436
1444
  ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
1437
1445
  },
1446
+ 0xe8 => { #PH (DC-GH6)
1447
+ Name => 'MinimumISO',
1448
+ Writable => 'int32u',
1449
+ },
1450
+ 0xee => { #PH (DC-GH6)
1451
+ Name => 'DynamicRangeBoost',
1452
+ Writable => 'int16u',
1453
+ PrintConv => { 0 => 'Off', 1 => 'On' },
1454
+ },
1438
1455
  0x0e00 => {
1439
1456
  Name => 'PrintIM',
1440
1457
  Description => 'Print Image Matching',
@@ -21,7 +21,7 @@ use vars qw($VERSION);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  use Image::ExifTool::Exif;
23
23
 
24
- $VERSION = '1.25';
24
+ $VERSION = '1.27';
25
25
 
26
26
  sub ProcessJpgFromRaw($$$);
27
27
  sub WriteJpgFromRaw($$$);
@@ -218,6 +218,7 @@ my %panasonicWhiteBalance = ( #forum9396
218
218
  0x30 => { Name => 'CropLeft', Writable => 'int16u' },
219
219
  0x31 => { Name => 'CropBottom', Writable => 'int16u' },
220
220
  0x32 => { Name => 'CropRight', Writable => 'int16u' },
221
+ # 0x44 - may contain another pointer to the raw data starting at byte 2 in this data (DC-GH6)
221
222
  0x10f => {
222
223
  Name => 'Make',
223
224
  Groups => { 2 => 'Camera' },
@@ -737,6 +738,8 @@ sub WriteDistortionInfo($$$)
737
738
  # 2 - value count
738
739
  # 3 - reference to list of original offset values
739
740
  # 4 - IFD format number
741
+ # 5 - (pointer to StripOffsets value added by this PatchRawDataOffset routine)
742
+ # 6 - flag set if this is a fixed offset (Panasonic GH6 fixed-offset hack)
740
743
  sub PatchRawDataOffset($$$)
741
744
  {
742
745
  my ($offsetInfo, $raf, $ifd) = @_;
@@ -745,15 +748,32 @@ sub PatchRawDataOffset($$$)
745
748
  my $rawDataOffset = $$offsetInfo{0x118};
746
749
  my $err;
747
750
  $err = 1 unless $ifd == 0;
748
- $err = 1 unless $stripOffsets and $stripByteCounts and $$stripOffsets[2] == 1;
749
- if ($rawDataOffset) {
751
+ if ($stripOffsets or $stripByteCounts) {
752
+ $err = 1 unless $stripOffsets and $stripByteCounts and $$stripOffsets[2] == 1;
753
+ } else {
754
+ # the DC-GH6 and DC-GH5M2 write RawDataOffset with no Strip tags, so we need
755
+ # to create fake StripByteCounts information for copying the data
756
+ if ($$offsetInfo{0x118}) { # (just to be safe)
757
+ $stripByteCounts = $$offsetInfo{0x117} = [ $PanasonicRaw::Main{0x117}, 0, 1, [ 0 ], 4 ];
758
+ # set flag so the offset will be fixed (GH6 hack, see https://exiftool.org/forum/index.php?topic=13861.0)
759
+ # (of course, fixing up the offset is now unnecessary, but continue to do this even
760
+ # though the fixup adjustment will be 0 because this allows us to delete the following
761
+ # line to remove the fix-offset restriction if Panasonic ever sees the light, but note
762
+ # that in this case we should investigate the purpose of the seemily-duplicate raw
763
+ # data offset contained within PanasonicRaw_0x0044)
764
+ $$offsetInfo{0x118}[6] = 1;
765
+ }
766
+ }
767
+ if ($rawDataOffset and not $err) {
750
768
  $err = 1 unless $$rawDataOffset[2] == 1;
751
- $err = 1 unless $$stripOffsets[3][0] == 0xffffffff or $$stripByteCounts[3][0] == 0;
769
+ if ($stripOffsets) {
770
+ $err = 1 unless $$stripOffsets[3][0] == 0xffffffff or $$stripByteCounts[3][0] == 0;
771
+ }
752
772
  }
753
773
  $err and return 'Unsupported Panasonic/Leica RAW variant';
754
774
  if ($rawDataOffset) {
755
775
  # update StripOffsets along with this tag if it contains a reasonable value
756
- unless ($$stripOffsets[3][0] == 0xffffffff) {
776
+ if ($stripOffsets and $$stripOffsets[3][0] != 0xffffffff) {
757
777
  # save pointer to StripOffsets value for updating later
758
778
  push @$rawDataOffset, $$stripOffsets[1];
759
779
  }