exiftool_vendored 12.56.0 → 12.57.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.
@@ -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 26374 tags, with 16843 unique tag names.
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. Note
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
- 464 SecondarySlotFunction int8u & 0x03
14276
- 5974 AEBracketingSteps int8u & 0xff
14277
- 5975 WBBracketingSteps int8u & 0xff
14278
- 5982 NikonMeteringMode int8u & 0x03
14279
- 6236 ISOAutoShutterTime int8u & 0x3f
14280
- 6237 ISOAutoHiLimit int8u & 0xff
14281
- 6315 CustomSettingsD810 NikonCustom SettingsD810
14282
- 14068 RollAngle fixed32u
14283
- 14072 PitchAngle fixed32u
14284
- 14076 YawAngle fixed32u
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
- 1937 PhotoShootingMenuBankImageArea int8u & 0x07
14295
- 4029 PhotoShootingMenuBank int8u & 0x03
14296
- 4031 PrimarySlot int8u & 0x80
14297
- 4152 CustomSettingsD850 NikonCustom SettingsD850
14298
- 12027 RollAngle fixed32u
14299
- 12031 PitchAngle fixed32u
14300
- 12035 YawAngle fixed32u
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 RollAngle fixed32u
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
- 202 Rotation int8u & 0x03
14386
- 208 Interval int8u~
14387
- 212 IntervalFrame int8u~
14388
- 1506 FlickerReductionIndicator int8u & 0x01
14389
- 2004 JPGCompression int8u & 0x01
14390
- 2171 AEBracketingSteps int8u & 0xff
14391
- 2172 WBBracketingSteps int8u & 0xff
14392
- 2179 ADLBracketingStep int8u & 0xf0
14393
- 2180 ADLBracketingType int8u & 0x0f
14394
- 3709 PhotoShootingMenuBank int8u & 0x03
14395
- 3711 PrimarySlot int8u & 0x80
14396
- 3713 ISOAutoShutterTime int8u & 0x3f
14397
- 3714 ISOAutoHiLimit int8u & 0xff
14398
- 3716 FlickerReduction int8u & 0x20
14399
- 3716.1 PhotoShootingMenuBankImageArea int8u & 0x07
14400
- 3819 CustomSettingsD5 NikonCustom SettingsD5
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
- 11300 RollAngle fixed32u
14403
- 11304 PitchAngle fixed32u
14404
- 11308 YawAngle fixed32u
14405
- 11940 NikonMeteringMode int8u & 0x03
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
- 30220 IntervalShooting int16u~
14416
- 49690 RollAngle fixed32u
14417
- 49694 PitchAngle fixed32u
14418
- 49698 YawAngle fixed32u
14419
- 50190 Intervals int32u
14420
- 50194 ShotsPerInterval int32u
14421
- 50198 IntervalExposureSmoothing int8u
14422
- 50200 IntervalPriority int8u
14423
- 50234 FocusShiftNumberShots int8u
14424
- 50238 FocusShiftStepWidth int8u
14425
- 50242 FocusShiftInterval int8u~
14426
- 50246 FocusShiftExposureLock int8u
14427
- 50336 DiffractionCompensation int8u
14428
- 50342 FlashControlMode int8u
14429
- 50348 FlashGNDistance? no
14430
- 50352 FlashOutput? int8u
14431
- 50362 FlashRemoteControl? int8u
14432
- 50366 FlashMasterControlMode int8u
14433
- 50368 FlashMasterCompensation? int8s
14434
- 50372 FlashMasterOutput? int8u
14435
- 50374 FlashWirelessOption? int8u
14436
- 50524 MovieType? int8u
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
- 30220 IntervalShooting int16u~
14457
- 32672 PortraitImpressionBalance int8u[2]~
14458
- 52786 RollAngle fixed32u
14459
- 52790 PitchAngle fixed32u
14460
- 52794 YawAngle fixed32u
14461
- 52918 MenuSettingsZ7IIOffset int8u
14462
- 52920 MenuSettingsZ7II Nikon MenuSettingsZ7II
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
- 180 FocusShiftShooting int8u~
14517
- 188 IntervalShooting int16u~
14518
- 17644 MenuSettingsZ9 Nikon MenuSettingsZ9
14519
- -
14520
- Nikon MenuSettingsZ9Firmware3
14521
- 32965 RollAngle fixed32u
14522
- 32969 PitchAngle fixed32u
14523
- 32973 YawAngle fixed32u
14524
- 33317 MenuSettingsZ9 Nikon MenuSettingsZ9
14525
- -
14526
- Nikon MenuSettingsZ9Firmware3
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 MenuSettingsZ9Firmware3 Tags
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 $dirName]\n";
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
- if ($verbose) {
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} || length($$dataPt) - $dirStart;
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
- next unless $$tagInfo{SubDirectory}; # (just to be safe)
7026
- my %subdirInfo = ( DataPt => \$newData, DirStart => $entry );
7027
- my $subTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable});
7028
- my $dat = $self->WriteDirectory(\%subdirInfo, $subTablePtr);
7029
- substr($newData, $entry) = $dat if defined $dat and length $dat;
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;