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.
@@ -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;