exiftool-vendored.exe 12.91.0 → 12.97.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.
- package/README.md +1 -2
- package/bin/exiftool_files/exiftool.pl +23 -2898
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +136 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +15 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +23 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +19 -5
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +17 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +356 -62
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +421 -11
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +56 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +3 -12
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +34 -14
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +118 -37
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6935 -6904
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +293 -7
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +48 -16
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +8 -54
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +66 -4
- package/bin/exiftool_files/windows_exiftool.txt +2836 -0
- package/package.json +6 -6
|
@@ -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.
|
|
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',
|
|
9997
|
-
335 => { Name => 'LimitAF-AreaModeSelDynamic_S',
|
|
9998
|
-
336 => { Name => 'LimitAF-AreaModeSelDynamic_M',
|
|
9999
|
-
337 => { Name => 'LimitAF-AreaModeSelDynamic_L',
|
|
10000
|
-
339 => { Name => 'LimitAF-AreaModeSel3DTracking',
|
|
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',
|
|
10012
|
-
461 => { Name => 'CommandDialVideoPlaybackMode',
|
|
10013
|
-
465 => { Name => 'SubCommandDialVideoPlaybackMode',
|
|
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
|
|
@@ -17,12 +17,57 @@ use strict;
|
|
|
17
17
|
use vars qw($VERSION);
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.08';
|
|
21
21
|
|
|
22
22
|
sub ProcessNikonSettings($$$);
|
|
23
23
|
|
|
24
24
|
my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
|
|
25
25
|
|
|
26
|
+
my %funcButtonZ6 = ( #forum16316
|
|
27
|
+
1 => 'AF-On or Subject Tracking', # (bug in 3.xx firmware?)
|
|
28
|
+
2 => 'AF Lock Only',
|
|
29
|
+
3 => 'AE Lock (hold)',
|
|
30
|
+
4 => 'AE Lock (reset on release)',
|
|
31
|
+
5 => 'AE Lock Only',
|
|
32
|
+
6 => 'AE/AF Lock',
|
|
33
|
+
7 => 'FV Lock',
|
|
34
|
+
8 => 'Flash Disable/Enable',
|
|
35
|
+
9 => 'Preview',
|
|
36
|
+
10 => 'Matrix Metering',
|
|
37
|
+
11 => 'Center-weighted Metering',
|
|
38
|
+
12 => 'Spot Metering',
|
|
39
|
+
13 => 'Highlight-weighted Metering',
|
|
40
|
+
14 => 'Bracketing Burst',
|
|
41
|
+
15 => 'Synchronized Release (Master)',
|
|
42
|
+
16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18
|
|
43
|
+
19 => '+NEF(RAW)',
|
|
44
|
+
20 => 'Framing Grid Display',
|
|
45
|
+
# 21 - missing
|
|
46
|
+
22 => 'Zoom On/Off',
|
|
47
|
+
# 23 - missing
|
|
48
|
+
24 => 'My Menu',
|
|
49
|
+
25 => 'My Menu Top Item',
|
|
50
|
+
26 => 'Playback',
|
|
51
|
+
27 => 'Protect',
|
|
52
|
+
28 => 'Image Area',
|
|
53
|
+
29 => 'Image Quality',
|
|
54
|
+
30 => 'White Balance',
|
|
55
|
+
31 => 'Picture Control',
|
|
56
|
+
32 => 'Active D-Lighting',
|
|
57
|
+
33 => 'Metering',
|
|
58
|
+
34 => 'Flash Mode',
|
|
59
|
+
35 => 'Focus Mode',
|
|
60
|
+
36 => 'Auto Bracketing',
|
|
61
|
+
37 => 'Multiple Exposure',
|
|
62
|
+
38 => 'HDR',
|
|
63
|
+
39 => 'Exposure Delay Mode',
|
|
64
|
+
40 => 'Shutter/Aperture Lock',
|
|
65
|
+
41 => 'Focus Peaking',
|
|
66
|
+
42 => 'Rating',
|
|
67
|
+
43 => 'Non-CPU Lens',
|
|
68
|
+
44 => 'None',
|
|
69
|
+
);
|
|
70
|
+
|
|
26
71
|
my %funcButtonZ7m2 = (
|
|
27
72
|
1 => 'AF-On',
|
|
28
73
|
2 => 'AF Lock Only',
|
|
@@ -1117,6 +1162,11 @@ my %infoZSeries = (
|
|
|
1117
1162
|
Name => 'Func1Button',
|
|
1118
1163
|
PrintConv => \%previewButtonD6,
|
|
1119
1164
|
%infoD6,
|
|
1165
|
+
},{ # CSf2-a (Z6)
|
|
1166
|
+
Name => 'Func1Button',
|
|
1167
|
+
Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
|
|
1168
|
+
Notes => 'Z6 and Z7',
|
|
1169
|
+
PrintConv => \%funcButtonZ6,
|
|
1120
1170
|
},{ # CSf2-a (Z7_2)
|
|
1121
1171
|
Name => 'Func1Button',
|
|
1122
1172
|
PrintConv => \%funcButtonZ7m2,
|
|
@@ -1126,6 +1176,11 @@ my %infoZSeries = (
|
|
|
1126
1176
|
Name => 'Func2Button',
|
|
1127
1177
|
PrintConv => \%previewButtonD6,
|
|
1128
1178
|
%infoD6,
|
|
1179
|
+
},{ # CSf2-b (Z6)
|
|
1180
|
+
Name => 'Func2Button',
|
|
1181
|
+
Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
|
|
1182
|
+
Notes => 'Z6 and Z7',
|
|
1183
|
+
PrintConv => \%funcButtonZ6,
|
|
1129
1184
|
},{ # CSf2-b (Z7_2)
|
|
1130
1185
|
Name => 'Func2Button',
|
|
1131
1186
|
PrintConv => \%funcButtonZ7m2,
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::GPS;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.07';
|
|
20
20
|
|
|
21
21
|
# supported EXR value format types (other types are extracted as undef binary data)
|
|
22
22
|
my %formatType = (
|
|
@@ -91,6 +91,8 @@ my %formatType = (
|
|
|
91
91
|
5 => 'PXR24',
|
|
92
92
|
6 => 'B44',
|
|
93
93
|
7 => 'B44A',
|
|
94
|
+
8 => 'DWAA', #github276
|
|
95
|
+
9 => 'DWAB', #github276
|
|
94
96
|
},
|
|
95
97
|
},
|
|
96
98
|
dataWindow => { },
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION $AUTOLOAD);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.46';
|
|
20
20
|
|
|
21
21
|
sub WritePS($$);
|
|
22
22
|
sub ProcessPS($$;$);
|
|
@@ -156,15 +156,6 @@ sub AUTOLOAD
|
|
|
156
156
|
return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
#------------------------------------------------------------------------------
|
|
160
|
-
# Is this a PC system
|
|
161
|
-
# Returns: true for PC systems
|
|
162
|
-
my %isPC = (MSWin32 => 1, os2 => 1, dos => 1, NetWare => 1, symbian => 1, cygwin => 1);
|
|
163
|
-
sub IsPC()
|
|
164
|
-
{
|
|
165
|
-
return $isPC{$^O};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
159
|
#------------------------------------------------------------------------------
|
|
169
160
|
# Get image width or height
|
|
170
161
|
# Inputs: 0) value list ref (ImageData, BoundingBox), 1) true to get height
|
|
@@ -284,7 +275,7 @@ sub GetNextLine($$)
|
|
|
284
275
|
$$raf{PSEnd} and CheckPSEnd($raf, \$data);
|
|
285
276
|
# split line if it contains other newline sequences
|
|
286
277
|
if ($data =~ /$altnl/) {
|
|
287
|
-
if (length($data) > 500000 and IsPC()) {
|
|
278
|
+
if (length($data) > 500000 and Image::ExifTool::IsPC()) {
|
|
288
279
|
# patch for Windows memory problem
|
|
289
280
|
unless ($changedNL) {
|
|
290
281
|
$changedNL = $/;
|
|
@@ -537,7 +528,7 @@ sub ProcessPS($$;$)
|
|
|
537
528
|
$raf->ReadLine($data) or last;
|
|
538
529
|
# check for alternate newlines as efficiently as possible
|
|
539
530
|
if ($data =~ /$altnl/) {
|
|
540
|
-
if (length($data) > 500000 and IsPC()) {
|
|
531
|
+
if (length($data) > 500000 and Image::ExifTool::IsPC()) {
|
|
541
532
|
# Windows can't split very long lines due to poor memory handling,
|
|
542
533
|
# so re-read the file with the other newline character instead
|
|
543
534
|
# (slower but uses less memory)
|