exiftool_vendored 12.50.0 → 12.52.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.
- checksums.yaml +4 -4
- data/bin/Changes +39 -2
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +5 -4
- data/bin/lib/Image/ExifTool/Casio.pm +3 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +6 -5
- data/bin/lib/Image/ExifTool/GPS.pm +11 -5
- data/bin/lib/Image/ExifTool/Geotag.pm +12 -4
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -0
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +24 -3
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +6015 -759
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1927 -0
- data/bin/lib/Image/ExifTool/Matroska.pm +261 -45
- data/bin/lib/Image/ExifTool/Nikon.pm +470 -272
- data/bin/lib/Image/ExifTool/NikonCustom.pm +139 -106
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -2
- data/bin/lib/Image/ExifTool/PNG.pm +8 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +4 -1
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +44 -11
- data/bin/lib/Image/ExifTool/README +2 -1
- data/bin/lib/Image/ExifTool/Sony.pm +4 -4
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +11 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +4543 -4491
- data/bin/lib/Image/ExifTool/TagNames.pod +227 -37
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +12 -7
- data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -1
- data/bin/lib/Image/ExifTool/Writer.pl +33 -13
- data/bin/lib/Image/ExifTool/ZIP.pm +19 -7
- data/bin/lib/Image/ExifTool.pm +36 -15
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
|
@@ -15,68 +15,87 @@ package Image::ExifTool::NikonCustom;
|
|
|
15
15
|
use strict;
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.22';
|
|
19
19
|
|
|
20
20
|
my %buttonsZ9= (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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',
|
|
9771
|
-
53 => { Name => 'MenuMonitorOffTime',
|
|
9772
|
-
55 => { Name => 'ShootingInfoMonitorOffTime'
|
|
9773
|
-
57 => { Name => 'ImageReviewMonitorOffTime',
|
|
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',
|
|
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',
|
|
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',
|
|
9866
|
-
143 => { Name => 'SubSelector',
|
|
9867
|
-
155 => { Name => 'AssignMovieRecordButton',
|
|
9868
|
-
159 => { Name => 'LensFunc1Button',
|
|
9869
|
-
167 => { Name => 'LensFunc2Button',
|
|
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',
|
|
9881
|
-
179 => { Name => 'MultiSelectorPlaybackMode',
|
|
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',
|
|
9906
|
-
|
|
9907
|
-
|
|
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',
|
|
9935
|
-
281 => { Name => 'Func3Button',
|
|
9936
|
-
285 => { Name => 'VerticalAFOnButton',
|
|
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',
|
|
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',
|
|
9951
|
-
379 => { Name => 'AudioButton',
|
|
9952
|
-
381 => { Name => 'QualityButton',
|
|
9953
|
-
399 => { Name => 'VerticalMultiSelector',
|
|
9954
|
-
421 => { Name => 'Func1ButtonPlaybackMode',
|
|
9955
|
-
423 => { Name => 'Func2ButtonPlaybackMode',
|
|
9956
|
-
425 => { Name => 'Func3ButtonPlaybackMode',
|
|
9957
|
-
431 => { Name => 'Func4ButtonPlaybackMode',
|
|
9958
|
-
437 => { Name => 'MovieRecordButtonPlaybackMode',
|
|
9959
|
-
439 => { Name => 'VerticalFuncButtonPlaybackMode',
|
|
9960
|
-
441 => { Name => 'AudioButtonPlaybackMode',
|
|
9961
|
-
447 => { Name => 'QualityButtonPlaybackMode',
|
|
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',
|
|
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',
|
|
9968
|
-
505 => { Name => 'VerticalMovieAFOnButton',
|
|
9969
|
-
515 => { Name => 'MovieAFAreaMode',
|
|
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
|
|
@@ -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
|
|
@@ -1835,7 +1836,7 @@ my %indexInfo = (
|
|
|
1835
1836
|
1 => 'Sequential shooting AF',
|
|
1836
1837
|
2 => 'Continuous AF',
|
|
1837
1838
|
3 => 'Multi AF',
|
|
1838
|
-
4 => 'Face
|
|
1839
|
+
4 => 'Face Detect', #11
|
|
1839
1840
|
10 => 'MF',
|
|
1840
1841
|
}, {
|
|
1841
1842
|
0 => '(none)',
|
|
@@ -1843,7 +1844,7 @@ my %indexInfo = (
|
|
|
1843
1844
|
0 => 'S-AF',
|
|
1844
1845
|
2 => 'C-AF',
|
|
1845
1846
|
4 => 'MF',
|
|
1846
|
-
5 => 'Face
|
|
1847
|
+
5 => 'Face Detect',
|
|
1847
1848
|
6 => 'Imager AF',
|
|
1848
1849
|
7 => 'Live View Magnification Frame',
|
|
1849
1850
|
8 => 'AF sensor',
|
|
@@ -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.
|
|
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' },
|
|
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
47
47
|
use Image::ExifTool::Exif;
|
|
48
48
|
use Image::ExifTool::GPS;
|
|
49
49
|
|
|
50
|
-
$VERSION = '2.
|
|
50
|
+
$VERSION = '2.81';
|
|
51
51
|
|
|
52
52
|
sub ProcessMOV($$;$);
|
|
53
53
|
sub ProcessKeys($$$);
|
|
@@ -1352,12 +1352,14 @@ my %eeBox2 = (
|
|
|
1352
1352
|
},
|
|
1353
1353
|
{ #https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md
|
|
1354
1354
|
Name => 'SphericalVideoXML',
|
|
1355
|
+
# (this tag is readable/writable as a block through the Extra SphericalVideoXML tags)
|
|
1355
1356
|
Condition => '$$valPt=~/^\xff\xcc\x82\x63\xf8\x55\x4a\x93\x88\x14\x58\x7a\x02\x52\x1f\xdd/',
|
|
1356
1357
|
WriteGroup => 'GSpherical', # write only GSpherical XMP tags here
|
|
1357
1358
|
HandlerType => 'vide', # only write in video tracks
|
|
1358
1359
|
SubDirectory => {
|
|
1359
1360
|
TagTable => 'Image::ExifTool::XMP::Main',
|
|
1360
1361
|
Start => 16,
|
|
1362
|
+
ProcessProc => 'Image::ExifTool::XMP::ProcessGSpherical',
|
|
1361
1363
|
WriteProc => 'Image::ExifTool::XMP::WriteGSpherical',
|
|
1362
1364
|
},
|
|
1363
1365
|
},
|
|
@@ -6034,6 +6036,7 @@ my %eeBox2 = (
|
|
|
6034
6036
|
plID => { #10 (or TV season)
|
|
6035
6037
|
Name => 'PlayListID',
|
|
6036
6038
|
Format => 'int8u', # actually int64u, but split it up
|
|
6039
|
+
Count => 8,
|
|
6037
6040
|
Writable => 'int32s', #27
|
|
6038
6041
|
},
|
|
6039
6042
|
purd => 'PurchaseDate', #7
|
|
@@ -26,6 +26,7 @@ sub ProcessFreeGPS($$$);
|
|
|
26
26
|
sub ProcessFreeGPS2($$$);
|
|
27
27
|
sub Process360Fly($$$);
|
|
28
28
|
sub ProcessFMAS($$$);
|
|
29
|
+
sub ProcessCAMM($$$);
|
|
29
30
|
|
|
30
31
|
my $debug; # set to 1 for extra debugging messages
|
|
31
32
|
|
|
@@ -236,7 +237,7 @@ my %insvLimit = (
|
|
|
236
237
|
camm => [{
|
|
237
238
|
Name => 'camm0',
|
|
238
239
|
# (according to the spec. the first 2 bytes are reserved and should be zero,
|
|
239
|
-
# but I have
|
|
240
|
+
# but I have samples where these bytes are non-zero, so allow anything here)
|
|
240
241
|
Condition => '$$valPt =~ /^..\0\0/s',
|
|
241
242
|
SubDirectory => {
|
|
242
243
|
TagTable => 'Image::ExifTool::QuickTime::camm0',
|
|
@@ -318,7 +319,7 @@ my %insvLimit = (
|
|
|
318
319
|
|
|
319
320
|
# tags found in 'camm' type 0 timed metadata (ref 4)
|
|
320
321
|
%Image::ExifTool::QuickTime::camm0 = (
|
|
321
|
-
PROCESS_PROC => \&
|
|
322
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
322
323
|
GROUPS => { 2 => 'Location' },
|
|
323
324
|
FIRST_ENTRY => 0,
|
|
324
325
|
NOTES => q{
|
|
@@ -336,7 +337,7 @@ my %insvLimit = (
|
|
|
336
337
|
|
|
337
338
|
# tags found in 'camm' type 1 timed metadata (ref 4)
|
|
338
339
|
%Image::ExifTool::QuickTime::camm1 = (
|
|
339
|
-
PROCESS_PROC => \&
|
|
340
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
340
341
|
GROUPS => { 2 => 'Camera' },
|
|
341
342
|
FIRST_ENTRY => 0,
|
|
342
343
|
4 => {
|
|
@@ -355,7 +356,7 @@ my %insvLimit = (
|
|
|
355
356
|
|
|
356
357
|
# tags found in 'camm' type 2 timed metadata (ref PH, Insta360Pro)
|
|
357
358
|
%Image::ExifTool::QuickTime::camm2 = (
|
|
358
|
-
PROCESS_PROC => \&
|
|
359
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
359
360
|
GROUPS => { 2 => 'Location' },
|
|
360
361
|
FIRST_ENTRY => 0,
|
|
361
362
|
4 => {
|
|
@@ -367,7 +368,7 @@ my %insvLimit = (
|
|
|
367
368
|
|
|
368
369
|
# tags found in 'camm' type 3 timed metadata (ref PH, Insta360Pro)
|
|
369
370
|
%Image::ExifTool::QuickTime::camm3 = (
|
|
370
|
-
PROCESS_PROC => \&
|
|
371
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
371
372
|
GROUPS => { 2 => 'Location' },
|
|
372
373
|
FIRST_ENTRY => 0,
|
|
373
374
|
4 => {
|
|
@@ -379,7 +380,7 @@ my %insvLimit = (
|
|
|
379
380
|
|
|
380
381
|
# tags found in 'camm' type 4 timed metadata (ref 4)
|
|
381
382
|
%Image::ExifTool::QuickTime::camm4 = (
|
|
382
|
-
PROCESS_PROC => \&
|
|
383
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
383
384
|
GROUPS => { 2 => 'Location' },
|
|
384
385
|
FIRST_ENTRY => 0,
|
|
385
386
|
4 => {
|
|
@@ -391,7 +392,7 @@ my %insvLimit = (
|
|
|
391
392
|
|
|
392
393
|
# tags found in 'camm' type 5 timed metadata (ref 4)
|
|
393
394
|
%Image::ExifTool::QuickTime::camm5 = (
|
|
394
|
-
PROCESS_PROC => \&
|
|
395
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
395
396
|
GROUPS => { 2 => 'Location' },
|
|
396
397
|
FIRST_ENTRY => 0,
|
|
397
398
|
4 => {
|
|
@@ -416,7 +417,7 @@ my %insvLimit = (
|
|
|
416
417
|
|
|
417
418
|
# tags found in 'camm' type 6 timed metadata (ref PH/4, Insta360)
|
|
418
419
|
%Image::ExifTool::QuickTime::camm6 = (
|
|
419
|
-
PROCESS_PROC => \&
|
|
420
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
420
421
|
GROUPS => { 2 => 'Location' },
|
|
421
422
|
FIRST_ENTRY => 0,
|
|
422
423
|
0x04 => {
|
|
@@ -482,7 +483,7 @@ my %insvLimit = (
|
|
|
482
483
|
|
|
483
484
|
# tags found in 'camm' type 7 timed metadata (ref 4)
|
|
484
485
|
%Image::ExifTool::QuickTime::camm7 = (
|
|
485
|
-
PROCESS_PROC => \&
|
|
486
|
+
PROCESS_PROC => \&ProcessCAMM,
|
|
486
487
|
GROUPS => { 2 => 'Location' },
|
|
487
488
|
FIRST_ENTRY => 0,
|
|
488
489
|
4 => {
|
|
@@ -1481,8 +1482,12 @@ sub ProcessFreeGPS($$$)
|
|
|
1481
1482
|
$lon = GetFloat($dataPt, 0x30);
|
|
1482
1483
|
$spd = GetFloat($dataPt, 0x34) * $knotsToKph; # (convert knots to km/h)
|
|
1483
1484
|
$trk = GetFloat($dataPt, 0x38);
|
|
1484
|
-
|
|
1485
|
-
|
|
1485
|
+
# (may be all zeros or int16u counting from 1 to 6 if not valid)
|
|
1486
|
+
my $tmp = substr($$dataPt, 60, 12);
|
|
1487
|
+
if ($tmp ne "\0\0\0\0\0\0\0\0\0\0\0\0" and $tmp ne "\x01\0\x02\0\x03\0\x04\0\x05\0\x06\0") {
|
|
1488
|
+
@acc = unpack('V3', $tmp);
|
|
1489
|
+
map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
|
|
1490
|
+
}
|
|
1486
1491
|
SetByteOrder('MM');
|
|
1487
1492
|
$debug and $et->FoundTag(GPSType => '1C');
|
|
1488
1493
|
|
|
@@ -2773,6 +2778,34 @@ sub ProcessInsta360($;$)
|
|
|
2773
2778
|
return 1;
|
|
2774
2779
|
}
|
|
2775
2780
|
|
|
2781
|
+
#------------------------------------------------------------------------------
|
|
2782
|
+
# Process CAMM metadata (ref PH)
|
|
2783
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
2784
|
+
# Returns: 1 on success
|
|
2785
|
+
sub ProcessCAMM($$$)
|
|
2786
|
+
{
|
|
2787
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
2788
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
2789
|
+
my $pos = $$dirInfo{DirStart} || 0;
|
|
2790
|
+
my $end = $pos + ($$dirInfo{DirLen} || length($$dataPt) - $pos);
|
|
2791
|
+
# camm record size for each type, including 4-byte header
|
|
2792
|
+
my %size = ( 1 => 12, 2 => 16, 3 => 16, 4 => 16, 5 => 28, 6 => 60, 7 => 16 );
|
|
2793
|
+
my $rtnVal = 0;
|
|
2794
|
+
while ($pos + 4 < $end) {
|
|
2795
|
+
my $type = Get16u($dataPt, $pos + 2);
|
|
2796
|
+
my $size = $size{$type} or $et->WarnOnce("Unknown camm record type $type"), last;
|
|
2797
|
+
$pos + $size > $end and $et->WarnOnce("Truncated camm record $type"), last;
|
|
2798
|
+
my $tagTbl = GetTagTable("Image::ExifTool::QuickTime::camm$type");
|
|
2799
|
+
$$dirInfo{DirStart} = $pos;
|
|
2800
|
+
$$dirInfo{DirLen} = $size;
|
|
2801
|
+
$et->ProcessBinaryData($dirInfo, $tagTbl) and $rtnVal = 1;
|
|
2802
|
+
# not sure if this is according to specification, but I have seen multiple
|
|
2803
|
+
# camm records all in a single sample, so step forward to process the next one
|
|
2804
|
+
$pos += $size;
|
|
2805
|
+
}
|
|
2806
|
+
return $rtnVal;
|
|
2807
|
+
}
|
|
2808
|
+
|
|
2776
2809
|
#------------------------------------------------------------------------------
|
|
2777
2810
|
# Process Garmin GPS 'uuid' atom (ref PH)
|
|
2778
2811
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -641,7 +641,8 @@ numerical, and generated automatically otherwise.
|
|
|
641
641
|
expression, a code reference or a list reference. In this
|
|
642
642
|
expression, $self, $val and $tag may be used as with
|
|
643
643
|
ValueConv, but if ValueConv was defined then $val is the
|
|
644
|
-
ValueConv value instead of the Raw value.
|
|
644
|
+
ValueConv value instead of the Raw value. Composite tags
|
|
645
|
+
may also use the @val, @prt and @raw lists. The returned value
|
|
645
646
|
should always be defined. Note that the print conversion is
|
|
646
647
|
only done if the PrintConv option is enabled (which it is by
|
|
647
648
|
default), and if the result of the ValueConv is not a scalar
|
|
@@ -10191,10 +10191,10 @@ my %isoSetting2010 = (
|
|
|
10191
10191
|
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
10192
10192
|
},
|
|
10193
10193
|
0x8001 => { Name => 'Sony_rtmd_0x8001', Format => 'int16u', %hidUnk },
|
|
10194
|
-
0x8004 => { Name => 'Sony_rtmd_0x8004', Format => 'int16u', %hidUnk },
|
|
10195
|
-
0x8005 => { Name => 'Sony_rtmd_0x8005', Format => 'int16u', %hidUnk },
|
|
10196
|
-
0x800a => { Name => 'Sony_rtmd_0x800a', Format => 'int16u', %hidUnk },
|
|
10197
|
-
0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk },
|
|
10194
|
+
0x8004 => { Name => 'Sony_rtmd_0x8004', Format => 'int16u', %hidUnk }, # (FocalLength35efl?, forum14315)
|
|
10195
|
+
0x8005 => { Name => 'Sony_rtmd_0x8005', Format => 'int16u', %hidUnk }, # (FocalLength?, forum14315)
|
|
10196
|
+
0x800a => { Name => 'Sony_rtmd_0x800a', Format => 'int16u', %hidUnk }, # (FocusRingPosition?, forum14315)
|
|
10197
|
+
0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk }, # (ZoomRingPosition?, forum14315)
|
|
10198
10198
|
# 0x8100 - 16 bytes starting with 0x060e2b340401
|
|
10199
10199
|
0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
|
|
10200
10200
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION @ISA $makeMissing);
|
|
|
15
15
|
use Image::ExifTool qw(:Utils :Vars);
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.35';
|
|
19
19
|
@ISA = qw(Exporter);
|
|
20
20
|
|
|
21
21
|
# set this to a language code to generate Lang module with 'MISSING' entries
|
|
@@ -31,13 +31,14 @@ my %credits = (
|
|
|
31
31
|
de => 'Jens Duttke, Herbert Kauer and Jobi',
|
|
32
32
|
es => 'Jens Duttke, Santiago del BrE<iacute>o GonzE<aacute>lez and Emilio Sancha',
|
|
33
33
|
fi => 'Jens Duttke and Jarkko ME<auml>kineva',
|
|
34
|
-
fr => 'Jens Duttke, Bernard Guillotin, Jean Glasser, Jean Piquemal, Harry Nizard and
|
|
34
|
+
fr => 'Jens Duttke, Bernard Guillotin, Jean Glasser, Jean Piquemal, Harry Nizard, Alphonse Philippe and Philippe Bonnaure (GraphicConverter)',
|
|
35
35
|
it => 'Jens Duttke, Ferdinando Agovino, Emilio Dati and Michele Locati',
|
|
36
36
|
ja => 'Jens Duttke and Kazunari Nishina',
|
|
37
37
|
ko => 'Jens Duttke and Jeong Beom Kim',
|
|
38
38
|
nl => 'Jens Duttke, Peter Moonen, Herman Beld and Peter van der Laan',
|
|
39
39
|
pl => 'Jens Duttke, Przemyslaw Sulek and Kacper Perschke',
|
|
40
40
|
ru => 'Jens Duttke, Sergey Shemetov, Dmitry Yerokhin, Anton Sukhinov and Alexander',
|
|
41
|
+
sk => 'Peter Bagin',
|
|
41
42
|
sv => 'Jens Duttke and BjE<ouml>rn SE<ouml>derstrE<ouml>m',
|
|
42
43
|
'tr' => 'Jens Duttke, Hasan Yildirim and Cihan Ulusoy',
|
|
43
44
|
zh_cn => 'Jens Duttke and Haibing Zhong',
|
|
@@ -401,10 +402,14 @@ sub BuildLangModules($;$)
|
|
|
401
402
|
my $val = ucfirst $tval;
|
|
402
403
|
$val = $tval if $tval =~ /^(cRAW|iTun)/; # special-case non-capitalized values
|
|
403
404
|
my $cap = ($tval ne $val);
|
|
404
|
-
if ($makeMissing
|
|
405
|
-
$lang
|
|
406
|
-
|
|
407
|
-
|
|
405
|
+
if ($makeMissing) {
|
|
406
|
+
if ($lang eq 'en') {
|
|
407
|
+
$lang = $makeMissing;
|
|
408
|
+
$val = 'MISSING';
|
|
409
|
+
undef $cap;
|
|
410
|
+
}
|
|
411
|
+
} elsif ($val eq 'MISSING') {
|
|
412
|
+
next; # ignore "MISSING" entries
|
|
408
413
|
}
|
|
409
414
|
my $isDefault = ($lang eq $Image::ExifTool::defaultLang);
|
|
410
415
|
unless ($langInfo{$lang} or $isDefault) {
|