exiftool_vendored 12.50.0 → 12.52.0
Sign up to get free protection for your applications and to get access to all the features.
- 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) {
|