exiftool_vendored 12.95.0 → 12.97.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
15
15
  use strict;
16
16
  use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ9);
17
17
 
18
- $VERSION = '1.25';
18
+ $VERSION = '1.26';
19
19
 
20
20
  @ISA = qw(Exporter);
21
21
  @EXPORT_OK = qw(%buttonsZ9);
@@ -94,6 +94,7 @@ $VERSION = '1.25';
94
94
  89 => 'Set Picture Control (HLG)',
95
95
  90 => 'Skin Softening',
96
96
  91 => 'Portrait Impression Balance',
97
+ 92 => 'Fast AF-On',
97
98
  97 => 'High Frequency Flicker Reduction',
98
99
  98 => 'Switch FX/DX',
99
100
  99 => 'View Mode (Photo LV)',
@@ -113,7 +114,7 @@ $VERSION = '1.25';
113
114
  115 => 'Delete',
114
115
  116 => 'Pixel Shift Shooting',
115
116
  117 => 'Cycle AF-area Mode',
116
- 118 => 'Raw Processing (Current)', #118-131 are Retouch options
117
+ 118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
117
118
  119 => 'Raw Processing (Multiple)',
118
119
  120 => 'Trim',
119
120
  121 => 'Resize (Current)',
@@ -129,6 +130,103 @@ $VERSION = '1.25';
129
130
  131 => 'Motion Blend',
130
131
  },
131
132
  );
133
+ my %buttonsZ6III= (
134
+ SeparateTable => 'ButtonsZ6III',
135
+ PrintConv => {
136
+ 0 => 'None',
137
+ 1 => 'Preview',
138
+ 3 => 'FV Lock',
139
+ 4 => 'AE/AF Lock',
140
+ 5 => 'AE Lock Only',
141
+ 6 => 'AE Lock (reset on release)',
142
+ 7 => 'AE Lock (hold)',
143
+ 8 => 'AF Lock Only',
144
+ 9 => 'AF-On',
145
+ 10 => 'Flash Disable/Enable',
146
+ 11 => 'Bracketing Burst',
147
+ 12 => '+NEF(RAW)',
148
+ 18 => 'Virtual Horizon',
149
+ 19 => 'Synchronized Release',
150
+ 20 => 'My Menu',
151
+ 21 => 'My Menu Top Item',
152
+ 22 => 'Playback',
153
+ 23 => 'Rating',
154
+ 24 => 'Protect',
155
+ 25 => 'Zoom',
156
+ 26 => 'Focus Peaking',
157
+ 27 => 'Flash Mode/Compensation',
158
+ 28 => 'Image Area',
159
+ 30 => 'Non-CPU Lens',
160
+ 31 => 'Active-D Lighting',
161
+ 32 => 'Exposure Delay Mode',
162
+ 33 => '1 Stop Speed/Aperture',
163
+ 34 => 'White Balance',
164
+ 35 => 'Metering',
165
+ 36 => 'Auto Bracketing',
166
+ 37 => 'Multiple Exposure',
167
+ 38 => 'HDR Overlay',
168
+ 39 => 'Picture Control',
169
+ 40 => 'Quality',
170
+ 41 => 'Focus Mode/AF AreaMode',
171
+ 42 => 'Select Center Focus Point',
172
+ 44 => 'Record Movie',
173
+ 45 => 'Thumbnail On/Off',
174
+ 46 => 'View Histograms',
175
+ 47 => 'Choose Folder',
176
+ 48 => 'Power Aperture (Open)',
177
+ 49 => 'Power Aperture (Close)',
178
+ 52 => 'Microphone Sensitivity',
179
+ 53 => 'Release Mode',
180
+ 57 => 'Preset Focus Point',
181
+ 58 => 'AE/AWB Lock (hold)',
182
+ 59 => 'AF-AreaMode',
183
+ 60 => 'AF-AreaMode + AF-On',
184
+ 61 => 'Recall Shooting Functions',
185
+ 64 => 'Filtered Playback',
186
+ 65 => 'Same as AF-On',
187
+ 66 => 'Voice Memo',
188
+ 70 => 'Photo Shooting Bank',
189
+ 71 => 'ISO',
190
+ 72 => 'Shooting Mode',
191
+ 73 => 'Exposure Compensation',
192
+ 76 => 'Silent Mode',
193
+ 78 => 'LiveView Information',
194
+ 79 => 'AWB Lock (hold)',
195
+ 80 => 'Grid Display',
196
+ 81 => 'Starlight View',
197
+ 82 => 'Select To Send (PC)',
198
+ 83 => 'Select To Send (FTP)',
199
+ 84 => 'Pattern Tone Range',
200
+ 85 => 'Control Lock',
201
+ 86 => 'Save Focus Position',
202
+ 87 => 'Recall Focus Position',
203
+ 88 => 'Recall Shooting Functions (Hold)',
204
+ 89 => 'Set Picture Control (HLG)',
205
+ 90 => 'Skin Softening',
206
+ 91 => 'Portrait Impression Balance',
207
+ 97 => 'High Frequency Flicker Reduction',
208
+ 98 => 'Switch FX/DX',
209
+ 99 => 'View Mode (Photo LV)',
210
+ 100 => 'Photo Flicker Reduction',
211
+ 101 => 'Filtered Playback (Select Criteria)',
212
+ 103 => 'Start Series Playback',
213
+ 104 => 'View Assist',
214
+ 105 => 'Hi-Res Zoom+',
215
+ 106 => 'Hi-Res Zoom-',
216
+ 108 => 'Override Other Cameras',
217
+ 109 => 'DISP - Cycle Information Display (shooting)', # Shooting Mode
218
+ 110 => 'DISP - Cycle Information Display (playback)', # Playback mode
219
+ 111 => 'Resume Shooting',
220
+ 112 => 'Switch Eyes',
221
+ 113 => 'Power Zoom +',
222
+ 114 => 'Power Zoom -',
223
+ 115 => 'Delete',
224
+ 116 => 'Pixel Shift Shooting',
225
+ 117 => 'Cycle AF-area Mode',
226
+ 118 => 'Pixel Shift Shooting',
227
+ 119 => 'Move Focus Point',
228
+ },
229
+ );
132
230
  my %dialsZ9 = (
133
231
  0 => '1 Frame',
134
232
  1 => '10 Frames',
@@ -199,6 +297,17 @@ my %thirdHalfFull = (
199
297
  1 => '1/2 EV',
200
298
  2 => '1 EV',
201
299
  );
300
+ my %touchFnAreaZ6III = (
301
+ 0 => 'Entire Frame',
302
+ 1 => 'Right Half',
303
+ 2 => 'Top Right Quadrant',
304
+ 3 => 'Bottom Right Quadrant',
305
+ 4 => 'Left Half',
306
+ 5 => 'Top Left Quadrant',
307
+ 6 => 'Bottom Left Quadrant',
308
+ 7 => 'Top Half',
309
+ 8 => 'Bottom Half',
310
+ );
202
311
 
203
312
  my %limitNolimit = ( 0 => 'Limit', 1 => 'No Limit' );
204
313
  my %offOn = ( 0 => 'Off', 1 => 'On' );
@@ -9700,6 +9809,308 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9700
9809
  },
9701
9810
  );
9702
9811
 
9812
+ # Z6III custom settings (ref 1) #base at offset27 + 1255 (firmware 1.0.0)
9813
+ %Image::ExifTool::NikonCustom::SettingsZ6III = (
9814
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
9815
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
9816
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
9817
+ WRITABLE => 1,
9818
+ FIRST_ENTRY => 0,
9819
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9820
+ NOTES => 'Custom settings for the Z6III.',
9821
+ DATAMEMBER => [ 189 ],
9822
+ 3 => { # CSa1
9823
+ Name => 'AF-CPrioritySelection',
9824
+ PrintConv => {
9825
+ 0 => 'Release',
9826
+ 1 => 'Release + Focus',
9827
+ 3 => 'Focus',
9828
+ },
9829
+ },
9830
+ 5 => { Name => 'AF-SPrioritySelection', PrintConv => {0 => 'Release',1 => 'Focus'}}, #CSa2
9831
+ 7 => { # CSa3 #when AFAreaMode is 3D-tracking, blocked shot response will be 3, regardless of this setting
9832
+ Name => 'BlockShotAFResponse',
9833
+ PrintConv => {
9834
+ 1 => '1 (Quick)',
9835
+ 2 => '2',
9836
+ 3 => '3 (Normal)',
9837
+ 4 => '4',
9838
+ 5 => '5 (Delayed)',
9839
+ },
9840
+ },
9841
+ 11 => {Name => 'AFPointSel',PrintConv => { 0 => 'Use All',1 => 'Use Half' }}, # CSa4
9842
+ 13 => { # CSa5
9843
+ Name => 'StoreByOrientation',
9844
+ PrintConv => {
9845
+ 0 => 'Off',
9846
+ 1 => 'Focus Point',
9847
+ 2 => 'Focus Point and AF-area mode',
9848
+ },
9849
+ },
9850
+ 15 => { Name => 'AFActivation', PrintConv => {0 => 'AF-On Only', 1 => 'Shutter/AF-On'}}, # CSa6-a
9851
+ 16 => { Name => 'AF-OnOutOfFocusRelease', PrintConv => {0 => 'Disable', 1 => 'Enable'}, Unknown => 1}, # CSa6-b
9852
+ 17 => { Name => 'LimitAF-AreaModeSelPinpoint', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9853
+ 19 => { Name => 'LimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9854
+ 20 => { Name => 'LimitAF-AreaModeSelWideAF_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9855
+ 21 => { Name => 'LimitAFAreaModeSelAuto', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9856
+ 22 => { Name => 'FocusPointWrap', PrintConv => { 0 => 'No Wrap', 1 => 'Wrap' }, Unknown => 1 }, # CSa10
9857
+ 23 => { Name => 'ManualFocusPointIllumination', PrintConv => {0 => 'On During Focus Point Selection Only', 1 => 'On', }, Unknown => 1 }, # CSa10a
9858
+ 24 => { Name => 'DynamicAreaAFAssist', PrintConv => { 0 => 'Focus Point Only',1 => 'Focus and Surrounding Points',}, Unknown => 1 }, # CSa10b
9859
+
9860
+ 26 => { Name => 'AF-AssistIlluminator', PrintConv => \%offOn }, # CSa11
9861
+ 27 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%offOn }, # CSa14
9862
+ 29 => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2
9863
+ 31 => { # CSb3
9864
+ Name => 'EasyExposureCompensation',
9865
+ PrintConv => {
9866
+ 0 => 'Off',
9867
+ 1 => 'On',
9868
+ 2 => 'On (auto reset)',
9869
+ },
9870
+ },
9871
+ 33 => { # CSb5
9872
+ Name => 'CenterWeightedAreaSize',
9873
+ PrintConv => {
9874
+ 0 => 'Standard',
9875
+ 1 => 'Small',
9876
+ 4 => 'Average',
9877
+ },
9878
+ },
9879
+ 35 => { # CSb6-a
9880
+ Name => 'FineTuneOptMatrixMetering',
9881
+ Format => 'int8s',
9882
+ ValueConv => '$val / 6',
9883
+ ValueConvInv => 'int($val*6)',
9884
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
9885
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9886
+ },
9887
+ 37 => { # CSb6-b
9888
+ Name => 'FineTuneOptCenterWeighted',
9889
+ Format => 'int8s',
9890
+ ValueConv => '$val / 6',
9891
+ ValueConvInv => 'int($val*6)',
9892
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
9893
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9894
+ },
9895
+ 39 => { # CSb6-c
9896
+ Name => 'FineTuneOptSpotMetering',
9897
+ Format => 'int8s',
9898
+ ValueConv => '$val / 6',
9899
+ ValueConvInv => 'int($val*6)',
9900
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
9901
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9902
+ },
9903
+ 41 => { # CSb6-d
9904
+ Name => 'FineTuneOptHighlightWeighted',
9905
+ Format => 'int8s',
9906
+ ValueConv => '$val / 6',
9907
+ ValueConvInv => 'int($val*6)',
9908
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
9909
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9910
+ },
9911
+ 43 => { # CSc1
9912
+ Name => 'ShutterReleaseButtonAE-L',
9913
+ PrintConv => {
9914
+ 0 => 'Off',
9915
+ 1 => 'On (Half Press)',
9916
+ 2 => 'On (Burst Mode)',
9917
+ },
9918
+ },
9919
+ 45 => { # CSc2-a
9920
+ Name => 'SelfTimerTime',
9921
+ PrintConv => {
9922
+ 0 => '2 s',
9923
+ 1 => '5 s',
9924
+ 2 => '10 s',
9925
+ 3 => '20 s',
9926
+ },
9927
+ },
9928
+ 49 => { Name => 'SelfTimerShotCount', }, # CSc2-b 1-9
9929
+ 53 => { # CSc2-c
9930
+ Name => 'SelfTimerShotInterval',
9931
+ PrintConv => {
9932
+ 0 => '0.5 s',
9933
+ 1 => '1 s',
9934
+ 2 => '2 s',
9935
+ 3 => '3 s',
9936
+ },
9937
+ },
9938
+ 55 => { Name => 'PlaybackMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc3-a
9939
+ 57 => { Name => 'MenuMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc3-b
9940
+ 59 => { Name => 'ImageReviewMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc3-d
9941
+ 61 => { Name => 'ShootingInfoMonitorOffTime',%powerOffDelayTimesZ9 }, # CSc3-c
9942
+
9943
+ 63 => { Name => 'CLModeShootingSpeed', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1b
9944
+ 65 => { # CSd2 # values: 1-200 & 'No Limit'
9945
+ Name => 'MaxContinuousRelease',
9946
+ Format => 'int16s',
9947
+ ValueConv => '($val eq -1 ? \'No Limit\' : $val ) ',
9948
+ },
9949
+ 69 => { Name => 'SyncReleaseMode', PrintConv => { 0 => 'No Sync', 1 => 'Sync' }, Unknown => 1 }, # CSd4
9950
+ 75 => { Name => 'LimitSelectableImageAreaDX', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd6-1
9951
+ 76 => { Name => 'LimitSelectableImageArea1To1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd6-2
9952
+ 77 => { Name => 'LimitSelectableImageArea16To9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd6-3
9953
+ 78 => { Name => 'FileNumberSequence', PrintConv => \%offOn }, # CSd7
9954
+ 81 => { #CSa12b
9955
+ Name => 'FocusPeakingLevel',
9956
+ Unknown => 1,
9957
+ PrintConv => {
9958
+ 0 => 'High Sensitivity',
9959
+ 1 => 'Standard Sensitivity',
9960
+ 2 => 'Low Sensitivity',
9961
+ },
9962
+ },
9963
+ 83 => { #CSa12c
9964
+ Name => 'FocusPeakingHighlightColor',
9965
+ Unknown => 1,
9966
+ PrintConv => {
9967
+ 0 => 'Red',
9968
+ 1 => 'Yellow',
9969
+ 2 => 'Blue',
9970
+ 3 => 'White',
9971
+ },
9972
+ },
9973
+ 85 => { Name => 'ContinuousModeDisplay', PrintConv => \%offOn }, # CSd14
9974
+ 87 => { # CSe1-a Previous cameras reported this with HighSpeedSync indicator appended as '(Auto FP)'.
9975
+ Name => 'FlashSyncSpeed',
9976
+ ValueConv => '($val-144)/8',
9977
+ PrintConv => {
9978
+ 0 => '1/60 s',
9979
+ 1 => '1/80 s',
9980
+ 2 => '1/100 s',
9981
+ 3 => '1/125 s',
9982
+ 4 => '1/160 s',
9983
+ 5 => '1/200 s',
9984
+ },
9985
+ },
9986
+ 89 => { Name => 'HighSpeedSync', PrintConv => \%offOn }, # CSe1-b
9987
+ 91 => { # CSe2
9988
+ Name => 'FlashShutterSpeed',
9989
+ ValueConv => 'my $t = ($val - 16) % 24; $t ? $val / 24 : 2 + ($val - 16) / 24', #unusual decode perhaps due to need to accommodate 4 new values?
9990
+ PrintConv => {
9991
+ 0 => '1 s',
9992
+ 1 => '1/2 s',
9993
+ 2 => '1/4 s',
9994
+ 3 => '1/8 s',
9995
+ 4 => '1/15 s',
9996
+ 5 => '1/30 s',
9997
+ 6 => '1/60 s',
9998
+ 7 => '30 s',
9999
+ 8 => '15 s',
10000
+ 9 => '8 s',
10001
+ 10 => '4 s',
10002
+ 11 => '2 s',
10003
+ },
10004
+ },
10005
+ 93 => { Name => 'FlashExposureCompArea', PrintConv => { 0 => 'Entire Frame', 1 => 'Background Only' } }, # CSe3
10006
+ 95 => { Name => 'AutoFlashISOSensitivity', PrintConv => { 0 => 'Subject and Background',1 => 'Subject Only'} }, # CSe4
10007
+ 97 => { Name => 'ModelingFlash', PrintConv => \%offOn }, # CSe5
10008
+ 99 => { # CSe6
10009
+ Name => 'AutoBracketModeM',
10010
+ PrintConv => {
10011
+ 0 => 'Flash/Speed',
10012
+ 1 => 'Flash/Speed/Aperture',
10013
+ 2 => 'Flash/Aperture',
10014
+ 3 => 'Flash Only',
10015
+ 4 => 'Flash/ISO',
10016
+ },
10017
+ },
10018
+ 101 => { Name => 'AutoBracketOrder', PrintConv => { 0 => '0,-,+',1 => '-,0,+' } }, # CSe7
10019
+ 103 => { Name => 'Func1Button', %buttonsZ6III }, # CSf2-a
10020
+ 119 => { Name => 'Func2Button', %buttonsZ6III }, # CSf2-b
10021
+ 135 => { Name => 'AFOnButton', %buttonsZ6III }, # CSf2-d
10022
+ 147 => { Name => 'SubSelector', %buttonsZ6III , Unknown => 1}, # CSf2-g
10023
+ 159 => { Name => 'AssignMovieRecordButton', %buttonsZ6III , Unknown => 1}, # CSf2-m
10024
+ 163 => { Name => 'LensFunc1Button', %buttonsZ6III }, # CSf2-q
10025
+ 171 => { Name => 'LensFunc2Button', %buttonsZ6III }, # CSf2-p
10026
+ 177 => { # CSf2-u
10027
+ Name => 'LensControlRing',
10028
+ PrintConv => {
10029
+ 0 => 'None (Disabled)',
10030
+ 1 => 'Focus (M/A)',
10031
+ 2 => 'ISO Sensitivity',
10032
+ 3 => 'Exposure Compensation',
10033
+ 4 => 'Aperture',
10034
+ },
10035
+ },
10036
+ 179 => { Name => 'MultiSelectorShootMode', %buttonsZ6III }, # CSf2-h called the OK button in camera, tag name retained for compatibility
10037
+ 183 => { Name => 'MultiSelectorPlaybackMode', %buttonsZ6III }, # CSf3f
10038
+ 187 => { Name => 'ShutterSpeedLock', PrintConv => \%offOn }, # CSf5-a
10039
+ 188 => { Name => 'ApertureLock', PrintConv => \%offOn }, # CSf5-b
10040
+ 189 => { # CSf6-a Previous cameras reported this tag as part of CmdDialsReverseRotation. Blend with CSf5-b separate settings together to match extant tag name and values
10041
+ Name => 'CmdDialsReverseRotExposureComp',
10042
+ RawConv => '$$self{CmdDialsReverseRotExposureComp} = $val',
10043
+ Hidden => 1,
10044
+ },
10045
+ 190 => [{ # CSf6-b (continued from above)
10046
+ Name => 'CmdDialsReverseRotation',
10047
+ Condition => '$$self{CmdDialsReverseRotExposureComp} == 0',
10048
+ PrintConv => {
10049
+ 0 => 'No',
10050
+ 1 => 'Shutter Speed & Aperture',
10051
+ },
10052
+ },{
10053
+ Name => 'CmdDialsReverseRotation',
10054
+ PrintConv => {
10055
+ 0 => 'Exposure Compensation',
10056
+ 1 => 'Exposure Compensation, Shutter Speed & Aperture',
10057
+ },
10058
+ }],
10059
+ 195 => { Name => 'UseDialWithoutHold', PrintConv => \%offOn, Unknown => 1 }, # CSf7
10060
+ 197 => { Name => 'ReverseIndicators', PrintConv => { 0 => '+ 0 -', 1 => '- 0 +' }, Unknown => 1 }, # CSf8
10061
+ 199 => { Name => 'MovieFunc1Button', %buttonsZ6III }, # CSg2-a
10062
+ 205 => { Name => 'MovieFunc2Button', %buttonsZ6III }, # CSg2-b
10063
+ 211 => { Name => 'MovieAF-OnButton', %buttonsZ6III }, # CSg2-f
10064
+ 223 => { # CSg2-z
10065
+ Name => 'MovieLensControlRing',
10066
+ PrintConv => {
10067
+ 0 => 'None (Disabled)',
10068
+ 2 => 'ISO Sensitivity',
10069
+ 3 => 'Exposure Compensation',
10070
+ 4 => 'Power Aperture',
10071
+ 5 => 'Hi-Res Zoom',
10072
+ },
10073
+ },
10074
+ 225 => { Name => 'MovieMultiSelector', %buttonsZ6III, Unknown => 1}, # CSg2-h
10075
+ 229 => { Name => 'MovieAFSpeed', ValueConv => '$val - 5', ValueConvInv => '$val + 5' }, # CSg5-a
10076
+ 231 => { Name => 'MovieAFSpeedApply', PrintConv => {0 => 'Always', 1 => 'Only During Recording'},}, # CSg5-b
10077
+ 233 => { # CSg6
10078
+ Name => 'MovieAFTrackingSensitivity',
10079
+ PrintConv => {
10080
+ 0 => '1 (High)',
10081
+ 1 => '2',
10082
+ 2 => '3',
10083
+ 3 => '4 (Normal)',
10084
+ 4 => '5',
10085
+ 5 => '6',
10086
+ 6 => '7 (Low)',
10087
+ },
10088
+ },
10089
+ 241 => { Name => 'LCDIllumination', PrintConv => \%offOn, Unknown => 1 }, # CSd13
10090
+ 242 => { Name => 'ExtendedShutterSpeeds', PrintConv => \%offOn }, # CSd7
10091
+ 245 => { Name => 'FocusPointPersistence', PrintConv => {0 => 'Auto', 1 => 'Off'} }, # CSa7
10092
+ 257 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
10093
+ 319 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10094
+ 320 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10095
+ 321 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10096
+ 323 => { Name => 'LimitAF-AreaModeSel3DTracking', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10097
+ 325 => { Name => 'PlaybackFlickUp', PrintConv => \%flicksZ9, Unknown => 1}, # CSf14-a
10098
+ 329 => { Name => 'PlaybackFlickDown', PrintConv => \%flicksZ9, Unknown => 1}, # CSf14-b
10099
+ 333 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1
10100
+ 340 => { Name => 'TouchFn', PrintConv => \%offOn, Unknown => 1}, # CSf4a
10101
+ 341 => { Name => 'TouchFnRole', %buttonsZ6III , Unknown => 1}, # CSf4b
10102
+ 345 => { Name => 'TouchFnAreaWide', PrintConv => \%touchFnAreaZ6III, Unknown => 1}, # CSf4c-1
10103
+ 347 => { Name => 'TouchFnAreaTall', PrintConv => \%touchFnAreaZ6III, Unknown => 1}, # CSf4c-2
10104
+ 350 => { Name => 'EVFImageFrame', PrintConv => \%offOn, Unknown => 1 }, # CSd16
10105
+ 351 => { Name => 'EVFGrid', PrintConv => \%evfGridsZ9, Unknown => 1 }, # CSd17
10106
+ 353 => { Name => 'VirtualHorizonStyle', PrintConv => {0 => 'Type A (Cockpit)', 1 => 'Type B (Sides)' }, Unknown => 1}, #CSd18
10107
+ 415 => { Name => 'Func1ButtonPlaybackMode', %buttonsZ6III , Unknown => 1}, # CSf3-a
10108
+ 417 => { Name => 'Func2ButtonPlaybackMode', %buttonsZ6III , Unknown => 1}, # CSf3-b
10109
+ 431 => { Name => 'MovieRecordButtonPlaybackMode', %buttonsZ6III , Unknown => 1}, # CSf3-m
10110
+ 463 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf11
10111
+ 559 => { Name => 'FocusPeakingDisplay', PrintConv => \%offOn, Unknown => 1}, # CSa12a
10112
+ );
10113
+
9703
10114
  # Z8 custom settings (ref 1) #base at offset26 + 1195 (firmware 1.0.0)
9704
10115
  %Image::ExifTool::NikonCustom::SettingsZ8 = (
9705
10116
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -9960,7 +10371,6 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9960
10371
  193 => { Name => 'ReverseIndicators', PrintConv => { 0 => '+ 0 -', 1 => '- 0 +' }, Unknown => 1 }, # CSf7
9961
10372
  195 => { Name => 'MovieFunc1Button', %buttonsZ9}, # CSg2-a
9962
10373
  199 => { Name => 'MovieFunc2Button', %buttonsZ9}, # CSg2-b
9963
-
9964
10374
  203 => { Name => 'MovieAF-OnButton', %buttonsZ9}, # CSg2-f
9965
10375
  215 => { # CSg2-z
9966
10376
  Name => 'MovieLensControlRing',
@@ -9993,11 +10403,11 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
9993
10403
  261 => { Name => 'FocusPointPersistence', PrintConv => {0 => 'Auto', 1 => 'Off'} }, # CSa7
9994
10404
  263 => { Name => 'AutoFocusModeRestrictions', PrintConv => \%focusModeRestrictionsZ9, Unknown => 1}, # CSa9
9995
10405
  267 => { Name => 'CHModeShootingSpeed', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1a
9996
- 273 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
9997
- 335 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9998
- 336 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
9999
- 337 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10000
- 339 => { Name => 'LimitAF-AreaModeSel3DTracking', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10406
+ 273 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
10407
+ 335 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10408
+ 336 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10409
+ 337 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10410
+ 339 => { Name => 'LimitAF-AreaModeSel3DTracking', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
10001
10411
  341 => { Name => 'PlaybackFlickUp', PrintConv => \%flicksZ9, Unknown => 1}, # CSf12-a
10002
10412
  345 => { Name => 'PlaybackFlickDown', PrintConv => \%flicksZ9, Unknown => 1}, # CSf12-b
10003
10413
  349 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1
@@ -10008,9 +10418,9 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
10008
10418
  421 => { Name => 'Func1ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-a
10009
10419
  423 => { Name => 'Func2ButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-b
10010
10420
  437 => { Name => 'MovieRecordButtonPlaybackMode', %buttonsZ9, Unknown => 1}, # CSf3-m
10011
- 453 => { Name => 'WBButtonPlaybackMode', %buttonsZ9}, #CSf2
10012
- 461 => { Name => 'CommandDialVideoPlaybackMode', PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
10013
- 465 => { Name => 'SubCommandDialVideoPlaybackMode', PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
10421
+ 453 => { Name => 'WBButtonPlaybackMode', %buttonsZ9}, # CSf2
10422
+ 461 => { Name => 'CommandDialVideoPlaybackMode', PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
10423
+ 465 => { Name => 'SubCommandDialVideoPlaybackMode',PrintConv => \%dialsVideoZ9, Unknown => 1}, # CSf3-b
10014
10424
  467 => { Name => 'FocusPointLock', PrintConv => \%offOn, Unknown => 1}, # CSf4-c
10015
10425
  459 => { Name => 'CommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-k
10016
10426
  463 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
48
48
  use Image::ExifTool::Exif;
49
49
  use Image::ExifTool::GPS;
50
50
 
51
- $VERSION = '3.01';
51
+ $VERSION = '3.02';
52
52
 
53
53
  sub ProcessMOV($$;$);
54
54
  sub ProcessKeys($$$);
@@ -9528,7 +9528,7 @@ sub ProcessMOV($$;$)
9528
9528
  my $dirID = $$dirInfo{DirID} || '';
9529
9529
  my $charsetQuickTime = $et->Options('CharsetQuickTime');
9530
9530
  my ($buff, $tag, $size, $track, $isUserData, %triplet, $doDefaultLang, $index);
9531
- my ($dirEnd, $unkOpt, %saveOptions, $atomCount, $warnStr);
9531
+ my ($dirEnd, $unkOpt, %saveOptions, $atomCount, $warnStr, $trailer);
9532
9532
 
9533
9533
  my $topLevel = not $$et{InQuickTime};
9534
9534
  $$et{InQuickTime} = 1;
@@ -9557,6 +9557,17 @@ sub ProcessMOV($$;$)
9557
9557
  $tagTablePtr = GetTagTable('Image::ExifTool::QuickTime::Main');
9558
9558
  }
9559
9559
  ($size, $tag) = unpack('Na4', $buff);
9560
+ my $fast = $$et{OPTIONS}{FastScan} || 0;
9561
+ # check for Insta360 trailer
9562
+ if ($topLevel and not $fast) {
9563
+ my $pos = $raf->Tell();
9564
+ if ($raf->Seek(-40, 2) and $raf->Read($buff, 40) == 40 and
9565
+ substr($buff, 8) eq '8db42d694ccc418790edff439fe026bf')
9566
+ {
9567
+ $trailer = [ 'Insta360', $raf->Tell() - unpack('V',$buff) ];
9568
+ }
9569
+ $raf->Seek($pos,0) or return 0;
9570
+ }
9560
9571
  if ($dataPt) {
9561
9572
  $verbose and $et->VerboseDir($$dirInfo{DirName});
9562
9573
  } else {
@@ -9595,7 +9606,6 @@ sub ProcessMOV($$;$)
9595
9606
  # have XMP take priority except for HEIC
9596
9607
  $$et{PRIORITY_DIR} = 'XMP' unless $fileType and $fileType eq 'HEIC';
9597
9608
  }
9598
- my $fast = $$et{OPTIONS}{FastScan} || 0;
9599
9609
  $$raf{NoBuffer} = 1 if $fast; # disable buffering in FastScan mode
9600
9610
 
9601
9611
  my $ee = $$et{OPTIONS}{ExtractEmbedded};
@@ -10136,6 +10146,10 @@ ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
10136
10146
  $dataPos += $size + 8; # point to start of next atom data
10137
10147
  last if $dirEnd and $dataPos >= $dirEnd; # (note: ignores last value if 0 bytes)
10138
10148
  $lastPos = $raf->Tell() + $dirBase;
10149
+ if ($trailer and $lastPos >= $$trailer[1]) {
10150
+ $et->Warn(sprintf('%s trailer at offset 0x%x', @$trailer), 1);
10151
+ last;
10152
+ }
10139
10153
  $raf->Read($buff, 8) == 8 or last;
10140
10154
  $lastTag = $tag if $$tagTablePtr{$tag} and $tag ne 'free'; # (Insta360 sometimes puts free block before trailer)
10141
10155
  ($size, $tag) = unpack('Na4', $buff);
@@ -10143,19 +10157,11 @@ ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
10143
10157
  }
10144
10158
  if ($warnStr) {
10145
10159
  # assume this is an unknown trailer if it comes immediately after
10146
- # mdat or moov or free and has a tag name we don't recognize
10147
- # (Insta360 can write trailer after a 'free' atom)
10148
- if (($lastTag eq 'mdat' or $lastTag eq 'moov' or $lastTag eq 'free') and
10160
+ # mdat or moov and has a tag name we don't recognize
10161
+ if (($lastTag eq 'mdat' or $lastTag eq 'moov') and
10149
10162
  (not $$tagTablePtr{$tag} or ref $$tagTablePtr{$tag} eq 'HASH' and $$tagTablePtr{$tag}{Unknown}))
10150
10163
  {
10151
- if ($raf->Seek(-40, 2) and $raf->Read($buff, 40) == 40 and
10152
- substr($buff, 8) eq '8db42d694ccc418790edff439fe026bf' and
10153
- $lastPos == $raf->Tell() - unpack('V',$buff))
10154
- {
10155
- $et->Warn(sprintf('Insta360 trailer at offset 0x%x', $lastPos), 1);
10156
- } else {
10157
- $et->Warn('Unknown trailer with '.lcfirst($warnStr));
10158
- }
10164
+ $et->Warn('Unknown trailer with '.lcfirst($warnStr));
10159
10165
  } else {
10160
10166
  $et->Warn($warnStr);
10161
10167
  }
@@ -341,6 +341,7 @@ my %insvLimit = (
341
341
  },
342
342
  # djmd - DJI AC003 Osmo Action 4 cam
343
343
  #TODO djmd => { SubDirectory => { TagTable => 'Image::ExifTool::DJI::djmd', ByteOrder => 'Little-Endian' } },
344
+ # (also DJI_20240615181302_0006_D.LRF)
344
345
  # dbgi - DJI AC003 Osmo Action 4 cam -- lots more unknown stuff
345
346
  Unknown00 => { Unknown => 1 },
346
347
  Unknown01 => { Unknown => 1 },