exiftool_vendored 13.12.0 → 13.16.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 +79 -22
- data/bin/MANIFEST +7 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/arg_files/exif2xmp.args +4 -0
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/build_geolocation +1 -1
- data/bin/exiftool +6 -5
- data/bin/lib/Image/ExifTool/AFCP.pm +5 -5
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +20 -15
- data/bin/lib/Image/ExifTool/Canon.pm +5 -3
- data/bin/lib/Image/ExifTool/DJI.pm +64 -11
- data/bin/lib/Image/ExifTool/EXE.pm +17 -3
- data/bin/lib/Image/ExifTool/Geolocation.pm +16 -7
- data/bin/lib/Image/ExifTool/ID3.pm +4 -4
- data/bin/lib/Image/ExifTool/JPEG.pm +5 -1
- data/bin/lib/Image/ExifTool/LigoGPS.pm +1 -0
- data/bin/lib/Image/ExifTool/MIE.pm +6 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +328 -4
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +7 -1
- data/bin/lib/Image/ExifTool/Protobuf.pm +25 -7
- data/bin/lib/Image/ExifTool/QuickTime.pm +215 -59
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +12 -12
- data/bin/lib/Image/ExifTool/README +4 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +11 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4821 -4811
- data/bin/lib/Image/ExifTool/TagNames.pod +231 -25
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -2
- data/bin/lib/Image/ExifTool/Vivo.pm +124 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +114 -63
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +3 -1
- data/bin/lib/Image/ExifTool/Writer.pl +16 -11
- data/bin/lib/Image/ExifTool.pm +24 -8
- data/bin/lib/Image/ExifTool.pod +52 -49
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
65
65
|
use Image::ExifTool::GPS;
|
66
66
|
use Image::ExifTool::XMP;
|
67
67
|
|
68
|
-
$VERSION = '4.
|
68
|
+
$VERSION = '4.41';
|
69
69
|
|
70
70
|
sub LensIDConv($$$);
|
71
71
|
sub ProcessNikonAVI($$$);
|
@@ -5710,6 +5710,8 @@ my %nikonFocalConversions = (
|
|
5710
5710
|
45 => 'Nikkor Z 600mm f/6.3 VR S', #28
|
5711
5711
|
46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
5712
5712
|
48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
|
5713
|
+
51 => 'Nikkor Z 35mm f/1.4', #28
|
5714
|
+
52 => 'Nikkor Z 50mm f/1.4', #28
|
5713
5715
|
2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
|
5714
5716
|
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
5715
5717
|
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
@@ -9069,13 +9071,23 @@ my %nikonFocalConversions = (
|
|
9069
9071
|
},
|
9070
9072
|
{
|
9071
9073
|
Name => 'MenuSettingsOffsetZ9v4',
|
9072
|
-
|
9074
|
+
Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} lt "05.01"',
|
9075
|
+
Notes => 'Firmware versions 4.x and 5.0',
|
9073
9076
|
Format => 'int32u',
|
9074
9077
|
SubDirectory => {
|
9075
9078
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v4',
|
9076
9079
|
Start => '$dirStart + $val',
|
9077
9080
|
},
|
9078
9081
|
},
|
9082
|
+
{
|
9083
|
+
Name => 'MenuSettingsOffsetZ9v4',
|
9084
|
+
Notes => 'Firmware versions 4.x and 5.0',
|
9085
|
+
Format => 'int32u',
|
9086
|
+
SubDirectory => {
|
9087
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v5',
|
9088
|
+
Start => '$dirStart + $val',
|
9089
|
+
},
|
9090
|
+
},
|
9079
9091
|
],
|
9080
9092
|
);
|
9081
9093
|
|
@@ -10583,12 +10595,13 @@ my %nikonFocalConversions = (
|
|
10583
10595
|
#1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
|
10584
10596
|
);
|
10585
10597
|
|
10598
|
+
# firmware version 4.x menu settings (ref 28)
|
10586
10599
|
%Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
|
10587
10600
|
%binaryDataAttrs,
|
10588
10601
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
10589
10602
|
DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 570, 596 ],
|
10590
10603
|
IS_SUBDIR => [ 847 ],
|
10591
|
-
NOTES => 'These tags are used by the Z9 firmware 4.0.0 and 4.1.0',
|
10604
|
+
NOTES => 'These tags are used by the Z9 firmware 4.0.0 and 4.1.0.',
|
10592
10605
|
72 => {
|
10593
10606
|
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
10594
10607
|
PrintConv => \%highFrameRateZ9,
|
@@ -10894,6 +10907,318 @@ my %nikonFocalConversions = (
|
|
10894
10907
|
2072 => { Name => 'FlashModeButtonPlaybackMode', %buttonsZ9}, #CSf2
|
10895
10908
|
);
|
10896
10909
|
|
10910
|
+
# menu settings for the Z9 with firmware version 5.1 (ref 28)
|
10911
|
+
%Image::ExifTool::Nikon::MenuSettingsZ9v5 = (
|
10912
|
+
%binaryDataAttrs,
|
10913
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
10914
|
+
DATAMEMBER => [ 158, 208, 212, 252, 332, 448, 552, 558, 574, 600 ],
|
10915
|
+
IS_SUBDIR => [ 851 ],
|
10916
|
+
NOTES => 'These tags are used by the Z9 firmware 5.1.',
|
10917
|
+
72 => {
|
10918
|
+
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
10919
|
+
PrintConv => \%highFrameRateZ9,
|
10920
|
+
},
|
10921
|
+
158 => {
|
10922
|
+
Name => 'MultipleExposureMode',
|
10923
|
+
RawConv => '$$self{MultipleExposureMode} = $val',
|
10924
|
+
PrintConv => \%multipleExposureModeZ9,
|
10925
|
+
},
|
10926
|
+
160 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
|
10927
|
+
208 => {
|
10928
|
+
Name => 'Intervals',
|
10929
|
+
Format => 'int32u',
|
10930
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
10931
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
|
10932
|
+
},
|
10933
|
+
212 => {
|
10934
|
+
Name => 'ShotsPerInterval',
|
10935
|
+
Format => 'int32u',
|
10936
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
10937
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
|
10938
|
+
},
|
10939
|
+
252 => {
|
10940
|
+
Name => 'FocusShiftNumberShots', #1-300
|
10941
|
+
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
10942
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
10943
|
+
},
|
10944
|
+
256 => {
|
10945
|
+
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
10946
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
10947
|
+
},
|
10948
|
+
260 => {
|
10949
|
+
Name => 'FocusShiftInterval',
|
10950
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
10951
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
10952
|
+
},
|
10953
|
+
264 => {
|
10954
|
+
Name => 'FocusShiftExposureLock',
|
10955
|
+
Unknown => 1,
|
10956
|
+
PrintConv => \%offOn,
|
10957
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
10958
|
+
},
|
10959
|
+
294 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
10960
|
+
296 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
10961
|
+
332 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
|
10962
|
+
#338 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
|
10963
|
+
346 => { Name => 'AutoISO', PrintConv => \%offOn },
|
10964
|
+
348 => {
|
10965
|
+
Name => 'ISOAutoHiLimit',
|
10966
|
+
Format => 'int16u',
|
10967
|
+
Unknown => 1,
|
10968
|
+
ValueConv => '($val-104)/8',
|
10969
|
+
ValueConvInv => '8 * ($val + 104)',
|
10970
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
10971
|
+
},
|
10972
|
+
350 => {
|
10973
|
+
Name => 'ISOAutoFlashLimit',
|
10974
|
+
Format => 'int16u',
|
10975
|
+
Unknown => 1,
|
10976
|
+
ValueConv => '($val-104)/8',
|
10977
|
+
ValueConvInv => '8 * ($val + 104)',
|
10978
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
10979
|
+
},
|
10980
|
+
358 => {
|
10981
|
+
Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
|
10982
|
+
ValueConv => '$val / 8',
|
10983
|
+
Format => 'int16s',
|
10984
|
+
PrintConv => \%iSOAutoShutterTimeZ9,
|
10985
|
+
},
|
10986
|
+
440 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
|
10987
|
+
442 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
10988
|
+
444 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
|
10989
|
+
448 => {
|
10990
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
10991
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
10992
|
+
PrintConv => \%flashControlModeZ7,
|
10993
|
+
},
|
10994
|
+
450 => {
|
10995
|
+
Name => 'FlashMasterCompensation',
|
10996
|
+
Format => 'int8s',
|
10997
|
+
Unknown => 1,
|
10998
|
+
ValueConv => '$val/6',
|
10999
|
+
ValueConvInv => '6 * $val',
|
11000
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
11001
|
+
PrintConvInv => '$val',
|
11002
|
+
},
|
11003
|
+
454 => {
|
11004
|
+
Name => 'FlashGNDistance',
|
11005
|
+
Condition => '$$self{FlashControlMode} == 2',
|
11006
|
+
Unknown => 1,
|
11007
|
+
ValueConv => '$val + 3',
|
11008
|
+
PrintConv => \%flashGNDistance,
|
11009
|
+
},
|
11010
|
+
458 => {
|
11011
|
+
Name => 'FlashOutput', # range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). also found in FlashInfoUnknown at offset 0x0a (with different mappings)
|
11012
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
11013
|
+
Unknown => 1,
|
11014
|
+
ValueConv => '2 ** (-$val/3)',
|
11015
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
11016
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
11017
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
11018
|
+
},
|
11019
|
+
#466 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
|
11020
|
+
#468 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
|
11021
|
+
#480 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
|
11022
|
+
552 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
|
11023
|
+
554 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
11024
|
+
558 => {
|
11025
|
+
Name => 'BracketSet',
|
11026
|
+
RawConv => '$$self{BracketSet} = $val',
|
11027
|
+
PrintConv => \%bracketSetZ9,
|
11028
|
+
},
|
11029
|
+
560 => {
|
11030
|
+
Name => 'BracketProgram',
|
11031
|
+
Condition => '$$self{BracketSet} < 3',
|
11032
|
+
Notes => 'AE and/or Flash Bracketing',
|
11033
|
+
PrintConv => \%bracketProgramZ9,
|
11034
|
+
},
|
11035
|
+
562 => {
|
11036
|
+
Name => 'BracketIncrement',
|
11037
|
+
Condition => '$$self{BracketSet} < 3',
|
11038
|
+
Notes => 'AE and/or Flash Bracketing',
|
11039
|
+
PrintConv => \%bracketIncrementZ9,
|
11040
|
+
},
|
11041
|
+
574 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
|
11042
|
+
580 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
11043
|
+
586 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
|
11044
|
+
590 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
|
11045
|
+
596 => { Name => 'DXCropAlert', PrintConv => \%offOn },
|
11046
|
+
598 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
|
11047
|
+
600 => {
|
11048
|
+
Name => 'DynamicAFAreaSize',
|
11049
|
+
Condition => '$$self{AFAreaMode} == 2',
|
11050
|
+
RawConv => '$$self{DynamicAFAreaSize} = $val',
|
11051
|
+
PrintConv => \%dynamicAfAreaModesZ9,
|
11052
|
+
},
|
11053
|
+
640 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
|
11054
|
+
650 => {
|
11055
|
+
Name => 'MovieImageArea',
|
11056
|
+
Unknown => 1,
|
11057
|
+
Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
|
11058
|
+
PrintConv => \%imageAreaZ9b,
|
11059
|
+
},
|
11060
|
+
660 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
|
11061
|
+
662 => {
|
11062
|
+
Name => 'MovieISOAutoHiLimit',
|
11063
|
+
Format => 'int16u',
|
11064
|
+
Unknown => 1,
|
11065
|
+
ValueConv => '($val-104)/8',
|
11066
|
+
ValueConvInv => '8 * ($val + 104)',
|
11067
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
11068
|
+
},
|
11069
|
+
664 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
|
11070
|
+
666 => {
|
11071
|
+
Name => 'MovieISOAutoManualMode',
|
11072
|
+
Format => 'int16u',
|
11073
|
+
Unknown => 1,
|
11074
|
+
ValueConv => '($val-104)/8',
|
11075
|
+
ValueConvInv => '8 * ($val + 104)',
|
11076
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
11077
|
+
},
|
11078
|
+
740 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
|
11079
|
+
742 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
|
11080
|
+
748 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
|
11081
|
+
750 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
|
11082
|
+
752 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
|
11083
|
+
754 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
|
11084
|
+
756 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
|
11085
|
+
760 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
|
11086
|
+
762 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
|
11087
|
+
764 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
|
11088
|
+
766 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
|
11089
|
+
768 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
|
11090
|
+
770 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
|
11091
|
+
792 => { Name => 'MovieToneMap', PrintConv => \%movieToneMapZ9, Unknown => 1 },
|
11092
|
+
798 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
|
11093
|
+
800 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
|
11094
|
+
806 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
|
11095
|
+
807 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
|
11096
|
+
808 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
|
11097
|
+
816 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
|
11098
|
+
851 => {
|
11099
|
+
Name => 'CustomSettingsZ9v4',
|
11100
|
+
Format => 'undef[632]',
|
11101
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9v4' },
|
11102
|
+
},
|
11103
|
+
1502 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
|
11104
|
+
1504 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
|
11105
|
+
1510 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
|
11106
|
+
1532 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
|
11107
|
+
1536 => { Name => 'NonCPULens1FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
|
11108
|
+
1540 => { Name => 'NonCPULens2FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11109
|
+
1542 => { Name => 'NonCPULens3FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11110
|
+
1548 => { Name => 'NonCPULens4FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11111
|
+
1552 => { Name => 'NonCPULens5FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11112
|
+
1556 => { Name => 'NonCPULens6FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11113
|
+
1560 => { Name => 'NonCPULens7FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11114
|
+
1564 => { Name => 'NonCPULens8FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11115
|
+
1568 => { Name => 'NonCPULens9FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11116
|
+
1572 => { Name => 'NonCPULens10FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11117
|
+
1576 => { Name => 'NonCPULens11FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11118
|
+
1580 => { Name => 'NonCPULens12FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11119
|
+
1584 => { Name => 'NonCPULens13FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11120
|
+
1588 => { Name => 'NonCPULens14FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11121
|
+
1592 => { Name => 'NonCPULens15FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11122
|
+
1596 => { Name => 'NonCPULens16FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11123
|
+
1600 => { Name => 'NonCPULens17FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11124
|
+
1604 => { Name => 'NonCPULens18FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11125
|
+
1608 => { Name => 'NonCPULens19FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11126
|
+
1612 => { Name => 'NonCPULens20FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
|
11127
|
+
1616 => { Name => 'NonCPULens1MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1}, #non-CPU aperture interface, values and storage differ from the Z8
|
11128
|
+
1620 => { Name => 'NonCPULens2MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11129
|
+
1624 => { Name => 'NonCPULens3MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11130
|
+
1628 => { Name => 'NonCPULens4MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11131
|
+
1632 => { Name => 'NonCPULens5MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11132
|
+
1636 => { Name => 'NonCPULens6MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11133
|
+
1640 => { Name => 'NonCPULens7MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11134
|
+
1644 => { Name => 'NonCPULens8MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11135
|
+
1648 => { Name => 'NonCPULens9MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11136
|
+
1652 => { Name => 'NonCPULens10MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11137
|
+
1656 => { Name => 'NonCPULens11MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11138
|
+
1660 => { Name => 'NonCPULens12MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11139
|
+
1664 => { Name => 'NonCPULens13MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11140
|
+
1668 => { Name => 'NonCPULens14MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11141
|
+
1672 => { Name => 'NonCPULens15MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11142
|
+
1676 => { Name => 'NonCPULens16MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11143
|
+
1680 => { Name => 'NonCPULens17MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11144
|
+
1684 => { Name => 'NonCPULens18MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11145
|
+
1688 => { Name => 'NonCPULens19MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11146
|
+
1692 => { Name => 'NonCPULens20MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
|
11147
|
+
1708 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
|
11148
|
+
1721 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
|
11149
|
+
1728 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
11150
|
+
1729 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
11151
|
+
1764 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
|
11152
|
+
1788 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
|
11153
|
+
1792 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
11154
|
+
1801 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
11155
|
+
1866 => {
|
11156
|
+
Name => 'AutoCapturePreset',
|
11157
|
+
PrintConv => {
|
11158
|
+
0 => '1',
|
11159
|
+
1 => '2',
|
11160
|
+
2 => '3',
|
11161
|
+
3 => '4',
|
11162
|
+
4 => '5',
|
11163
|
+
},
|
11164
|
+
},
|
11165
|
+
1868 => {
|
11166
|
+
Name => 'FocusShiftAutoReset',
|
11167
|
+
Unknown => 1,
|
11168
|
+
PrintConv => \%offOn,
|
11169
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
11170
|
+
},
|
11171
|
+
1926 => { #CSd4-a
|
11172
|
+
Name => 'PreReleaseBurstLength',
|
11173
|
+
PrintConv => {
|
11174
|
+
0 => 'None',
|
11175
|
+
1 => '0.3 Sec',
|
11176
|
+
2 => '0.5 Sec',
|
11177
|
+
3 => '1 Sec',
|
11178
|
+
},
|
11179
|
+
},
|
11180
|
+
1928 => { #CSd4-b
|
11181
|
+
Name => 'PostReleaseBurstLength',
|
11182
|
+
PrintConv => {
|
11183
|
+
0 => '1 Sec',
|
11184
|
+
1 => '2 Sec',
|
11185
|
+
2 => '3 Sec',
|
11186
|
+
3 => 'Max',
|
11187
|
+
},
|
11188
|
+
},
|
11189
|
+
1942 => { Name => 'VerticalISOButton', %buttonsZ9}, #CSf2
|
11190
|
+
1944 => { Name => 'ExposureCompensationButton', %buttonsZ9}, #CSf2
|
11191
|
+
1946 => { Name => 'ISOButton', %buttonsZ9}, #CSf2
|
11192
|
+
2006 => { Name => 'ViewModeShowEffectsOfSettings', PrintConv => { 0=>'Always', 1=> 'Only When Flash Not Used'}, Unknown => 1 }, #CSd9-a
|
11193
|
+
2008 => { Name => 'DispButton', %buttonsZ9}, #CSf2
|
11194
|
+
2052 => { #CSd6
|
11195
|
+
Name => 'ExposureDelay',
|
11196
|
+
Format => 'fixed32u',
|
11197
|
+
PrintConv => '$val ? sprintf("%.1f sec",$val/1000) : "Off"',
|
11198
|
+
},
|
11199
|
+
2056 => { #CSf2-m3
|
11200
|
+
Name => 'CommandDialFrameAdvanceZoom',
|
11201
|
+
Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
|
11202
|
+
PrintConv => \%dialsFrameAdvanceZoomPositionZ9,
|
11203
|
+
Unknown => 1
|
11204
|
+
},
|
11205
|
+
2058 => { #CSf2-n3
|
11206
|
+
Name => 'SubCommandDialFrameAdvanceZoom',
|
11207
|
+
Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "05.00"',
|
11208
|
+
PrintConv => \%dialsFrameAdvanceZoomPositionZ9,
|
11209
|
+
Unknown => 1
|
11210
|
+
},
|
11211
|
+
2060 => { Name => 'PlaybackButton', %buttonsZ9}, #CSf2
|
11212
|
+
2062 => { Name => 'WBButton', %buttonsZ9}, #CSf2
|
11213
|
+
2064 => { Name => 'BracketButton', %buttonsZ9}, #CSf2
|
11214
|
+
2066 => { Name => 'FlashModeButton', %buttonsZ9}, #CSf2
|
11215
|
+
2068 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ9}, #CSf2
|
11216
|
+
2070 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ9}, #CSf2
|
11217
|
+
2072 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ9}, #CSf2
|
11218
|
+
2074 => { Name => 'BracketButtonPlaybackMode', %buttonsZ9}, #CSf2
|
11219
|
+
2076 => { Name => 'FlashModeButtonPlaybackMode', %buttonsZ9}, #CSf2
|
11220
|
+
);
|
11221
|
+
|
10897
11222
|
# Flash information (ref JD)
|
10898
11223
|
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
10899
11224
|
%binaryDataAttrs,
|
@@ -12229,7 +12554,6 @@ my %nikonFocalConversions = (
|
|
12229
12554
|
3 => 'On (Required)',
|
12230
12555
|
},
|
12231
12556
|
},
|
12232
|
-
#0x10 Degree of radial distortion correction polynomial? (always 4? - decodes for the first 3 coefficients follow, the 4th at 0x2c/0x30 seems to always be 0)
|
12233
12557
|
0x14 => {
|
12234
12558
|
Name => 'RadialDistortionCoefficient1',
|
12235
12559
|
Format => 'rational64s',
|
@@ -112,7 +112,7 @@ $VERSION = '1.26';
|
|
112
112
|
113 => 'Power Zoom +',
|
113
113
|
114 => 'Power Zoom -',
|
114
114
|
115 => 'Delete',
|
115
|
-
116 => 'Pixel Shift Shooting',
|
115
|
+
116 => 'Pixel Shift Shooting', #Z8 (Z9 fw 5.1 maps as 'Save and Load Power Zoom Position')
|
116
116
|
117 => 'Cycle AF-area Mode',
|
117
117
|
118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
|
118
118
|
119 => 'Raw Processing (Multiple)',
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
use Image::ExifTool::Exif;
|
39
39
|
|
40
|
-
$VERSION = '2.
|
40
|
+
$VERSION = '2.24';
|
41
41
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
43
43
|
sub WhiteBalanceConv($;$$);
|
@@ -1464,6 +1464,12 @@ my %shootingMode = (
|
|
1464
1464
|
5 => 'Animal Eye/Body',
|
1465
1465
|
6 => 'Car',
|
1466
1466
|
7 => 'Motorcycle',
|
1467
|
+
8 => 'Car (main part priority)',
|
1468
|
+
9 => 'Motorcycle (helmet priority)',
|
1469
|
+
10 => 'Train',
|
1470
|
+
11 => 'Train (main part priority)',
|
1471
|
+
12 => 'Airplane',
|
1472
|
+
13 => 'Airplane (nose priority)',
|
1467
1473
|
}
|
1468
1474
|
},
|
1469
1475
|
0xee => { #PH (DC-GH6)
|
@@ -5,8 +5,9 @@
|
|
5
5
|
#
|
6
6
|
# Revisions: 2024-12-04 - P. Harvey Created
|
7
7
|
#
|
8
|
-
# Notes: Tag definitions for Protobuf tags support additional 'signed'
|
9
|
-
# and '
|
8
|
+
# Notes: Tag definitions for Protobuf tags support additional 'signed',
|
9
|
+
# 'unsigned' and 'int64s' formats for varInt (type 0) values,
|
10
|
+
# and 'rational' for byte (type 2) values
|
10
11
|
#
|
11
12
|
# References: 1) https://protobuf.dev/programming-guides/encoding/
|
12
13
|
#------------------------------------------------------------------------------
|
@@ -17,13 +18,13 @@ use strict;
|
|
17
18
|
use vars qw($VERSION);
|
18
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
20
|
|
20
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.02';
|
21
22
|
|
22
23
|
sub ProcessProtobuf($$$;$);
|
23
24
|
|
24
25
|
#------------------------------------------------------------------------------
|
25
26
|
# Read bytes from dirInfo object
|
26
|
-
# Inputs: 0) dirInfo ref, 1) number of bytes
|
27
|
+
# Inputs: 0) dirInfo ref (with DataPt and Pos set), 1) number of bytes
|
27
28
|
# Returns: binary data or undef on error
|
28
29
|
sub GetBytes($$)
|
29
30
|
{
|
@@ -162,14 +163,31 @@ sub ProcessProtobuf($$$;$)
|
|
162
163
|
if ($$tagInfo{Format}) {
|
163
164
|
if ($type == 0) {
|
164
165
|
$val = $buff;
|
165
|
-
|
166
|
+
if ($$tagInfo{Format} eq 'signed') {
|
167
|
+
$val = ($val & 1) ? -($val >> 1)-1 : ($val >> 1);
|
168
|
+
} elsif ($$tagInfo{Format} eq 'int64s' and $val > 0xffffffff) {
|
169
|
+
# hack for DJI drones which store 64-bit signed integers improperly
|
170
|
+
# (just toss upper 32 bits which should be all 1's anyway)
|
171
|
+
$val = ($val & 0xffffffff) - 4294967296;
|
172
|
+
}
|
173
|
+
} elsif ($type == 2 and $$tagInfo{Format} eq 'rational') {
|
174
|
+
my $dir = { DataPt => \$buff, Pos => 0 };
|
175
|
+
my $num = VarInt($dir);
|
176
|
+
my $den = VarInt($dir);
|
177
|
+
$val = (defined $num and $den) ? "$num/$den" : 'err';
|
166
178
|
} else {
|
167
179
|
$val = ReadValue(\$buff, 0, $$tagInfo{Format}, undef, length($buff));
|
168
180
|
}
|
169
181
|
} elsif ($type == 0) {
|
170
182
|
$val = $buff;
|
171
|
-
my $
|
172
|
-
$
|
183
|
+
my $hex = sprintf('%x', $val);
|
184
|
+
if (length($hex) == 16 and $hex =~ /^ffffffff/) {
|
185
|
+
my $s64 = hex(substr($hex, 8)) - 4294967296;
|
186
|
+
$val .= " (0x$hex, int64s $s64)";
|
187
|
+
} else {
|
188
|
+
my $signed = ($val & 1) ? -($val >> 1)-1 : ($val >> 1);
|
189
|
+
$val .= " (0x$hex, signed $signed)";
|
190
|
+
}
|
173
191
|
} elsif ($type == 1) {
|
174
192
|
$val = '0x' . unpack('H*', $buff) . ' (double ' . GetDouble(\$buff,0) . ')';
|
175
193
|
} elsif ($type == 2) {
|