exiftool_vendored 12.56.0 → 12.57.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 +21 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +74 -30
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -0
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +665 -845
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +36 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -0
- data/bin/lib/Image/ExifTool/README +11 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4654 -4628
- data/bin/lib/Image/ExifTool/TagNames.pod +194 -86
- data/bin/lib/Image/ExifTool/Writer.pl +36 -16
- data/bin/lib/Image/ExifTool.pm +38 -22
- data/bin/lib/Image/ExifTool.pod +4 -4
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 26359 tags, with 16845 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -7082,6 +7082,9 @@ Tags extracted from Photoshop layer information.
|
|
7082
7082
|
'_xnam' LayerNames no+
|
7083
7083
|
'_xopc' LayerOpacities no+
|
7084
7084
|
'_xrct' LayerRectangles no+
|
7085
|
+
'_xvis' LayerVisible no+
|
7086
|
+
'lclr' LayerColors no+
|
7087
|
+
'lsct' LayerSections no+
|
7085
7088
|
'luni' LayerUnicodeNames no+
|
7086
7089
|
'lyid' LayerIDs? no+
|
7087
7090
|
'shmd' LayerModifyDates no+
|
@@ -13713,7 +13716,6 @@ DiMAGE X and Xt.
|
|
13713
13716
|
ShotInfoD7000 Nikon ShotInfoD7000
|
13714
13717
|
ShotInfoD4 Nikon ShotInfoD4
|
13715
13718
|
ShotInfoD4S Nikon ShotInfoD4S
|
13716
|
-
ShotInfoD5 Nikon ShotInfoD500
|
13717
13719
|
ShotInfoD500 Nikon ShotInfoD500
|
13718
13720
|
ShotInfoD6 Nikon ShotInfoD6
|
13719
13721
|
ShotInfoD610 Nikon ShotInfoD610
|
@@ -14264,24 +14266,46 @@ These tags are extracted from encrypted data in images from the D800.
|
|
14264
14266
|
|
14265
14267
|
=head3 Nikon ShotInfoD810 Tags
|
14266
14268
|
|
14267
|
-
These tags are extracted from encrypted data in images from the D810.
|
14268
|
-
that the indices listed below are for firmware version 1.0, but they may be
|
14269
|
-
different for other firmware versions.
|
14269
|
+
These tags are extracted from encrypted data in images from the D810.
|
14270
14270
|
|
14271
14271
|
Index Tag Name Writable
|
14272
14272
|
----- -------- --------
|
14273
14273
|
0 ShotInfoVersion no
|
14274
14274
|
4 FirmwareVersion no
|
14275
|
-
|
14276
|
-
|
14277
|
-
|
14278
|
-
|
14279
|
-
|
14280
|
-
|
14281
|
-
|
14282
|
-
|
14283
|
-
|
14284
|
-
|
14275
|
+
16 SettingsOffset Nikon SettingsInfoD810
|
14276
|
+
36 BracketingOffset Nikon BracketingInfoD810
|
14277
|
+
56 ISOAutoOffset Nikon ISOAutoInfoD810
|
14278
|
+
64 CustomSettingsOffset NikonCustom SettingsD810
|
14279
|
+
132 OrientationOffset Nikon OrientationInfo
|
14280
|
+
|
14281
|
+
=head3 Nikon SettingsInfoD810 Tags
|
14282
|
+
|
14283
|
+
Index1 Tag Name Writable
|
14284
|
+
------ -------- --------
|
14285
|
+
316 SecondarySlotFunction int8u & 0x03
|
14286
|
+
|
14287
|
+
=head3 Nikon BracketingInfoD810 Tags
|
14288
|
+
|
14289
|
+
Index1 Tag Name Writable
|
14290
|
+
------ -------- --------
|
14291
|
+
15 AEBracketingSteps int8u & 0xff
|
14292
|
+
16 WBBracketingSteps int8u & 0xff
|
14293
|
+
23 NikonMeteringMode int8u & 0x03
|
14294
|
+
|
14295
|
+
=head3 Nikon ISOAutoInfoD810 Tags
|
14296
|
+
|
14297
|
+
Index1 Tag Name Writable
|
14298
|
+
------ -------- --------
|
14299
|
+
4 ISOAutoShutterTime int8u & 0x3f
|
14300
|
+
5 ISOAutoHiLimit int8u & 0xff
|
14301
|
+
|
14302
|
+
=head3 Nikon OrientationInfo Tags
|
14303
|
+
|
14304
|
+
Index1 Tag Name Writable
|
14305
|
+
------ -------- --------
|
14306
|
+
0 RollAngle fixed32u
|
14307
|
+
4 PitchAngle fixed32u
|
14308
|
+
8 YawAngle fixed32u
|
14285
14309
|
|
14286
14310
|
=head3 Nikon ShotInfoD850 Tags
|
14287
14311
|
|
@@ -14291,13 +14315,23 @@ These tags are extracted from encrypted data in images from the D850.
|
|
14291
14315
|
----- -------- --------
|
14292
14316
|
0 ShotInfoVersion no
|
14293
14317
|
4 FirmwareVersion no
|
14294
|
-
|
14295
|
-
|
14296
|
-
|
14297
|
-
|
14298
|
-
|
14299
|
-
|
14300
|
-
|
14318
|
+
16 MenuSettingsOffset Nikon MenuSettingsD850
|
14319
|
+
76 MoreSettingsOffset Nikon MoreSettingsD850
|
14320
|
+
88 CustomSettingsOffset NikonCustom SettingsD850
|
14321
|
+
160 OrientationOffset Nikon OrientationInfo
|
14322
|
+
|
14323
|
+
=head3 Nikon MenuSettingsD850 Tags
|
14324
|
+
|
14325
|
+
Index1 Tag Name Writable
|
14326
|
+
------ -------- --------
|
14327
|
+
1757 PhotoShootingMenuBankImageArea int8u & 0x07
|
14328
|
+
|
14329
|
+
=head3 Nikon MoreSettingsD850 Tags
|
14330
|
+
|
14331
|
+
Index1 Tag Name Writable
|
14332
|
+
------ -------- --------
|
14333
|
+
36 PhotoShootingMenuBank int8u & 0x03
|
14334
|
+
37 PrimarySlot int8u & 0x80
|
14301
14335
|
|
14302
14336
|
=head3 Nikon ShotInfoD5000 Tags
|
14303
14337
|
|
@@ -14369,9 +14403,7 @@ These tags are extracted from encrypted data in images from the D4S.
|
|
14369
14403
|
6378 ISOAutoShutterTime int8u & 0x3f
|
14370
14404
|
6379 ISOAutoHiLimit int8u & 0xff
|
14371
14405
|
6461 CustomSettingsD4S NikonCustom SettingsD4
|
14372
|
-
13579
|
14373
|
-
13583 PitchAngle fixed32u
|
14374
|
-
13587 YawAngle fixed32u
|
14406
|
+
13579 OrientationInfo Nikon OrientationInfo
|
14375
14407
|
13971 Rotation int8u & 0x30
|
14376
14408
|
|
14377
14409
|
=head3 Nikon ShotInfoD500 Tags
|
@@ -14382,27 +14414,61 @@ These tags are extracted from encrypted data in images from the D5 and D500.
|
|
14382
14414
|
----- -------- --------
|
14383
14415
|
0 ShotInfoVersion no
|
14384
14416
|
4 FirmwareVersion no
|
14385
|
-
|
14386
|
-
|
14387
|
-
|
14388
|
-
|
14389
|
-
|
14390
|
-
|
14391
|
-
|
14392
|
-
|
14393
|
-
|
14394
|
-
|
14395
|
-
|
14396
|
-
|
14397
|
-
|
14398
|
-
|
14399
|
-
|
14400
|
-
|
14417
|
+
16 RotationInfoOffset Nikon RotationInfoD500
|
14418
|
+
20 JPGInfoOffset Nikon JPGInfoD500
|
14419
|
+
44 BracketingOffset Nikon BracketingInfoD500
|
14420
|
+
80 ShootingMenuOffset Nikon ShootingMenuD500
|
14421
|
+
88 CustomSettingsOffset Nikon CustomSettingsD500
|
14422
|
+
160 OrientationOffset Nikon OrientationInfo
|
14423
|
+
168 OtherOffset Nikon OtherInfoD500
|
14424
|
+
|
14425
|
+
=head3 Nikon RotationInfoD500 Tags
|
14426
|
+
|
14427
|
+
Index1 Tag Name Writable
|
14428
|
+
------ -------- --------
|
14429
|
+
26 Rotation int8u & 0x03
|
14430
|
+
32 Interval int8u~
|
14431
|
+
36 IntervalFrame int8u~
|
14432
|
+
1330 FlickerReductionIndicator int8u & 0x01
|
14433
|
+
|
14434
|
+
=head3 Nikon JPGInfoD500 Tags
|
14435
|
+
|
14436
|
+
Index1 Tag Name Writable
|
14437
|
+
------ -------- --------
|
14438
|
+
36 JPGCompression int8u & 0x01
|
14439
|
+
|
14440
|
+
=head3 Nikon BracketingInfoD500 Tags
|
14441
|
+
|
14442
|
+
Index1 Tag Name Writable
|
14443
|
+
------ -------- --------
|
14444
|
+
15 AEBracketingSteps int8u & 0xff
|
14445
|
+
16 WBBracketingSteps int8u & 0xff
|
14446
|
+
23 ADLBracketingStep int8u & 0xf0
|
14447
|
+
24 ADLBracketingType int8u & 0x0f
|
14448
|
+
|
14449
|
+
=head3 Nikon ShootingMenuD500 Tags
|
14450
|
+
|
14451
|
+
Index1 Tag Name Writable
|
14452
|
+
------ -------- --------
|
14453
|
+
0 PhotoShootingMenuBank int8u & 0x03
|
14454
|
+
2 PrimarySlot int8u & 0x80
|
14455
|
+
4 ISOAutoShutterTime int8u & 0x3f
|
14456
|
+
5 ISOAutoHiLimit int8u & 0xff
|
14457
|
+
7 FlickerReduction int8u & 0x20
|
14458
|
+
7.1 PhotoShootingMenuBankImageArea int8u & 0x07
|
14459
|
+
|
14460
|
+
=head3 Nikon CustomSettingsD500 Tags
|
14461
|
+
|
14462
|
+
Index1 Tag Name Writable
|
14463
|
+
------ -------- --------
|
14464
|
+
0 CustomSettingsD5 NikonCustom SettingsD5
|
14401
14465
|
CustomSettingsD500 NikonCustom SettingsD500
|
14402
|
-
|
14403
|
-
|
14404
|
-
|
14405
|
-
|
14466
|
+
|
14467
|
+
=head3 Nikon OtherInfoD500 Tags
|
14468
|
+
|
14469
|
+
Index1 Tag Name Writable
|
14470
|
+
------ -------- --------
|
14471
|
+
532 NikonMeteringMode int8u & 0x03
|
14406
14472
|
|
14407
14473
|
=head3 Nikon ShotInfoD6 Tags
|
14408
14474
|
|
@@ -14412,28 +14478,38 @@ These tags are extracted from encrypted data in images from the D6.
|
|
14412
14478
|
----- -------- --------
|
14413
14479
|
0 ShotInfoVersion no
|
14414
14480
|
4 FirmwareVersion no
|
14415
|
-
|
14416
|
-
|
14417
|
-
|
14418
|
-
|
14419
|
-
|
14420
|
-
|
14421
|
-
|
14422
|
-
|
14423
|
-
|
14424
|
-
|
14425
|
-
|
14426
|
-
|
14427
|
-
|
14428
|
-
|
14429
|
-
|
14430
|
-
|
14431
|
-
|
14432
|
-
|
14433
|
-
|
14434
|
-
|
14435
|
-
|
14436
|
-
|
14481
|
+
48 SequenceOffset Nikon SeqInfoD6
|
14482
|
+
156 OrientationOffset Nikon OrientationInfo
|
14483
|
+
164 IntervalOffset Nikon IntervalInfoD6
|
14484
|
+
|
14485
|
+
=head3 Nikon SeqInfoD6 Tags
|
14486
|
+
|
14487
|
+
Index1 Tag Name Writable
|
14488
|
+
------ -------- --------
|
14489
|
+
36 IntervalShooting int16u~
|
14490
|
+
|
14491
|
+
=head3 Nikon IntervalInfoD6 Tags
|
14492
|
+
|
14493
|
+
Index1 Tag Name Writable
|
14494
|
+
------ -------- --------
|
14495
|
+
380 Intervals int32u
|
14496
|
+
384 ShotsPerInterval int32u
|
14497
|
+
388 IntervalExposureSmoothing int8u
|
14498
|
+
390 IntervalPriority int8u
|
14499
|
+
424 FocusShiftNumberShots int8u
|
14500
|
+
428 FocusShiftStepWidth int8u
|
14501
|
+
432 FocusShiftInterval int8u~
|
14502
|
+
436 FocusShiftExposureLock int8u
|
14503
|
+
526 DiffractionCompensation int8u
|
14504
|
+
532 FlashControlMode int8u
|
14505
|
+
538 FlashGNDistance? no
|
14506
|
+
542 FlashOutput? int8u
|
14507
|
+
552 FlashRemoteControl? int8u
|
14508
|
+
556 FlashMasterControlMode int8u
|
14509
|
+
558 FlashMasterCompensation? int8s
|
14510
|
+
562 FlashMasterOutput? int8u
|
14511
|
+
564 FlashWirelessOption? int8u
|
14512
|
+
714 MovieType? int8u
|
14437
14513
|
|
14438
14514
|
=head3 Nikon ShotInfoD610 Tags
|
14439
14515
|
|
@@ -14453,13 +14529,28 @@ These tags are extracted from encrypted data in images from the Z7II.
|
|
14453
14529
|
----- -------- --------
|
14454
14530
|
0 ShotInfoVersion no
|
14455
14531
|
4 FirmwareVersion no
|
14456
|
-
|
14457
|
-
|
14458
|
-
|
14459
|
-
|
14460
|
-
|
14461
|
-
|
14462
|
-
|
14532
|
+
48 IntervalOffset Nikon IntervalInfoZ7II
|
14533
|
+
56 PortraitOffset Nikon PortraitInfoZ7II
|
14534
|
+
152 OrientationOffset Nikon OrientationInfo
|
14535
|
+
160 MenuOffset Nikon MenuInfoZ7II
|
14536
|
+
|
14537
|
+
=head3 Nikon IntervalInfoZ7II Tags
|
14538
|
+
|
14539
|
+
Index1 Tag Name Writable
|
14540
|
+
------ -------- --------
|
14541
|
+
36 IntervalShooting int16u~
|
14542
|
+
|
14543
|
+
=head3 Nikon PortraitInfoZ7II Tags
|
14544
|
+
|
14545
|
+
Index1 Tag Name Writable
|
14546
|
+
------ -------- --------
|
14547
|
+
160 PortraitImpressionBalance int8u[2]~
|
14548
|
+
|
14549
|
+
=head3 Nikon MenuInfoZ7II Tags
|
14550
|
+
|
14551
|
+
Index1 Tag Name Writable
|
14552
|
+
------ -------- --------
|
14553
|
+
16 MenuSettingsOffsetZ7II Nikon MenuSettingsZ7II
|
14463
14554
|
|
14464
14555
|
=head3 Nikon MenuSettingsZ7II Tags
|
14465
14556
|
|
@@ -14467,6 +14558,7 @@ These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and Zfc.
|
|
14467
14558
|
|
14468
14559
|
Index1 Tag Name Writable
|
14469
14560
|
------ -------- --------
|
14561
|
+
92 ReleaseMode no
|
14470
14562
|
160 IntervalDurationHours int32u
|
14471
14563
|
164 IntervalDurationMinutes int32u
|
14472
14564
|
168 IntervalDurationSeconds int32u
|
@@ -14513,17 +14605,24 @@ These tags are extracted from encrypted data in images from the Z9.
|
|
14513
14605
|
----- -------- --------
|
14514
14606
|
0 ShotInfoVersion no
|
14515
14607
|
4 FirmwareVersion no
|
14516
|
-
|
14517
|
-
|
14518
|
-
|
14519
|
-
|
14520
|
-
|
14521
|
-
|
14522
|
-
|
14523
|
-
|
14524
|
-
|
14525
|
-
|
14526
|
-
|
14608
|
+
48 SequenceOffset Nikon SeqInfoZ9
|
14609
|
+
132 OrientOffset Nikon OrientationInfo
|
14610
|
+
140 MenuOffset Nikon MenuInfoZ9
|
14611
|
+
|
14612
|
+
=head3 Nikon SeqInfoZ9 Tags
|
14613
|
+
|
14614
|
+
Index1 Tag Name Writable
|
14615
|
+
------ -------- --------
|
14616
|
+
32 FocusShiftShooting int8u~
|
14617
|
+
40 IntervalShooting int16u~
|
14618
|
+
|
14619
|
+
=head3 Nikon MenuInfoZ9 Tags
|
14620
|
+
|
14621
|
+
Index1 Tag Name Writable
|
14622
|
+
------ -------- --------
|
14623
|
+
16 MenuSettingsOffsetZ9 Nikon MenuSettingsZ9
|
14624
|
+
MenuSettingsOffsetZ9v3 -
|
14625
|
+
Nikon MenuSettingsZ9v3
|
14527
14626
|
|
14528
14627
|
=head3 Nikon MenuSettingsZ9 Tags
|
14529
14628
|
|
@@ -14601,7 +14700,7 @@ These tags are used by the Z9.
|
|
14601
14700
|
1636 USBPowerDelivery? int8u
|
14602
14701
|
1645 SensorShield? int8u
|
14603
14702
|
|
14604
|
-
=head3 Nikon
|
14703
|
+
=head3 Nikon MenuSettingsZ9v3 Tags
|
14605
14704
|
|
14606
14705
|
These tags are used by the Z9 firmware 3.00.
|
14607
14706
|
|
@@ -21977,6 +22076,10 @@ unrecognized Windows Compound Binary file as a FlashPix (FPX) file. See
|
|
21977
22076
|
L<http://graphcomp.com/info/specs/livepicture/fpx.pdf> for the FlashPix
|
21978
22077
|
specification.
|
21979
22078
|
|
22079
|
+
Note that Microsoft is not consistent with the time zone used for some
|
22080
|
+
date/time tags, and it may be either UTC or local time depending on the
|
22081
|
+
software used to create the file.
|
22082
|
+
|
21980
22083
|
Tag ID Tag Name Writable
|
21981
22084
|
------ -------- --------
|
21982
22085
|
"\x01CompObj" CompObj FlashPix CompObj
|
@@ -27705,6 +27808,11 @@ QuickTime-based files; it extracts other track-specific and timed metadata,
|
|
27705
27808
|
but can not yet edit tags in these locations (with the exception of
|
27706
27809
|
track-level date/time tags).
|
27707
27810
|
|
27811
|
+
Beware that the Keys tags are actually stored inside the ItemList in the
|
27812
|
+
file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
|
27813
|
+
deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
|
27814
|
+
deleted individually with C<-QuickTime:ItemList:all=>.
|
27815
|
+
|
27708
27816
|
Alternate language tags may be accessed for
|
27709
27817
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
27710
27818
|
L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags> tags by adding
|
@@ -2727,8 +2727,10 @@ sub GetAllGroups($;$)
|
|
2727
2727
|
|
2728
2728
|
my @tableNames = keys %allTables;
|
2729
2729
|
|
2730
|
-
# loop through all tag tables and get all group names
|
2731
2730
|
my %allGroups;
|
2731
|
+
# add family 1 groups not in tables
|
2732
|
+
$family == 1 and map { $allGroups{$_} = 1 } qw(Garmin);
|
2733
|
+
# loop through all tag tables and get all group names
|
2732
2734
|
while (@tableNames) {
|
2733
2735
|
my $table = GetTagTable(pop @tableNames);
|
2734
2736
|
my ($grps, $grp, $tag, $tagInfo);
|
@@ -4267,7 +4269,7 @@ sub WriteDirectory($$$;$)
|
|
4267
4269
|
if ($out) {
|
4268
4270
|
print $out " Deleting $name\n" if defined $newData and not length $newData;
|
4269
4271
|
if ($$self{CHANGED} == $oldChanged and $$self{OPTIONS}{Verbose} > 2) {
|
4270
|
-
print $out "$$self{INDENT} [nothing changed in $
|
4272
|
+
print $out "$$self{INDENT} [nothing changed in $name]\n";
|
4271
4273
|
}
|
4272
4274
|
}
|
4273
4275
|
return $newData;
|
@@ -5432,7 +5434,6 @@ sub WriteJPEG($$)
|
|
5432
5434
|
my $verbose = $$self{OPTIONS}{Verbose};
|
5433
5435
|
my $out = $$self{OPTIONS}{TextOut};
|
5434
5436
|
my $rtnVal = 0;
|
5435
|
-
my %dumpParms = ( Out => $out );
|
5436
5437
|
my ($writeBuffer, $oldOutfile); # used to buffer writing until PreviewImage position is known
|
5437
5438
|
|
5438
5439
|
# check to be sure this is a valid JPG or EXV file
|
@@ -5447,7 +5448,6 @@ sub WriteJPEG($$)
|
|
5447
5448
|
Write($outfile,"\xff\x01") or $err = 1;
|
5448
5449
|
$isEXV = 1;
|
5449
5450
|
}
|
5450
|
-
$dumpParms{MaxLen} = 128 unless $verbose > 3;
|
5451
5451
|
|
5452
5452
|
delete $$self{PREVIEW_INFO}; # reset preview information
|
5453
5453
|
delete $$self{DEL_PREVIEW}; # reset flag to delete preview
|
@@ -6017,12 +6017,7 @@ sub WriteJPEG($$)
|
|
6017
6017
|
#
|
6018
6018
|
my $segDataPt = \$segData;
|
6019
6019
|
$length = length($segData);
|
6020
|
-
|
6021
|
-
print $out "JPEG $markerName ($length bytes):\n";
|
6022
|
-
if ($verbose > 2 and $markerName =~ /^APP/) {
|
6023
|
-
HexDump($segDataPt, undef, %dumpParms);
|
6024
|
-
}
|
6025
|
-
}
|
6020
|
+
print $out "JPEG $markerName ($length bytes)\n" if $verbose;
|
6026
6021
|
# group delete of APP segments
|
6027
6022
|
if ($$delGroup{$dirName}) {
|
6028
6023
|
$verbose and print $out " Deleting $dirName segment\n";
|
@@ -6870,6 +6865,7 @@ sub WriteBinaryData($$$)
|
|
6870
6865
|
|
6871
6866
|
# get default format ('int8u' unless specified)
|
6872
6867
|
my $dataPt = $$dirInfo{DataPt} or return undef;
|
6868
|
+
my $dataLen = length $$dataPt;
|
6873
6869
|
my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u';
|
6874
6870
|
my $increment = FormatSize($defaultFormat);
|
6875
6871
|
unless ($increment) {
|
@@ -6886,7 +6882,8 @@ sub WriteBinaryData($$$)
|
|
6886
6882
|
delete $$dirInfo{VarFormatData};
|
6887
6883
|
}
|
6888
6884
|
my $dirStart = $$dirInfo{DirStart} || 0;
|
6889
|
-
my $dirLen = $$dirInfo{DirLen}
|
6885
|
+
my $dirLen = $$dirInfo{DirLen};
|
6886
|
+
$dirLen = $dataLen - $dirStart if not defined $dirLen or $dirLen > $dataLen - $dirStart;
|
6890
6887
|
my $newData = substr($$dataPt, $dirStart, $dirLen) or return undef;
|
6891
6888
|
my $dirName = $$dirInfo{DirName};
|
6892
6889
|
my $varSize = 0;
|
@@ -7022,11 +7019,34 @@ sub WriteBinaryData($$$)
|
|
7022
7019
|
$tagInfo = $self->GetTagInfo($tagTablePtr, $tagID, \$v);
|
7023
7020
|
next unless $tagInfo;
|
7024
7021
|
}
|
7025
|
-
|
7026
|
-
my
|
7027
|
-
my $
|
7028
|
-
|
7029
|
-
|
7022
|
+
my $subdir = $$tagInfo{SubDirectory} or next;
|
7023
|
+
my $start = $$subdir{Start};
|
7024
|
+
my $len;
|
7025
|
+
if (not $start) {
|
7026
|
+
$start = $entry;
|
7027
|
+
$len = $dirLen - $start;
|
7028
|
+
} elsif ($start =~ /\$/) {
|
7029
|
+
my $count = 1;
|
7030
|
+
my $format = $$tagInfo{Format} || $defaultFormat;
|
7031
|
+
$format =~ /(.*)\[(.*)\]/ and ($format, $count) = ($1, $2);
|
7032
|
+
my $val = ReadValue($dataPt, $entry, $format, $count, $dirLen - $entry);
|
7033
|
+
# ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
|
7034
|
+
next unless $val;
|
7035
|
+
my $dirStart = 0;
|
7036
|
+
#### eval Start ($val, $dirStart)
|
7037
|
+
$start = eval($start);
|
7038
|
+
next if $start < $dirStart or $start > $dataLen;
|
7039
|
+
$len = $$subdir{DirLen};
|
7040
|
+
$len = $dataLen - $start unless $len and $len <= $dataLen - $start;
|
7041
|
+
}
|
7042
|
+
my %subdirInfo = (
|
7043
|
+
DataPt => \$newData,
|
7044
|
+
DirStart => $start,
|
7045
|
+
DirLen => $len,
|
7046
|
+
TagInfo => $tagInfo,
|
7047
|
+
);
|
7048
|
+
my $dat = $self->WriteDirectory(\%subdirInfo, GetTagTable($$subdir{TagTable}));
|
7049
|
+
substr($newData, $start, $len) = $dat if defined $dat and length $dat;
|
7030
7050
|
}
|
7031
7051
|
}
|
7032
7052
|
return $newData;
|