exiftool_vendored 12.35.0 → 12.36.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.
@@ -154,7 +154,7 @@ my %delMore = (
154
154
  );
155
155
 
156
156
  # family 0 groups where directories should never be deleted
157
- my %permanentDir = ( QuickTime => 1 );
157
+ my %permanentDir = ( QuickTime => 1, Jpeg2000 => 1 );
158
158
 
159
159
  # lookup for all valid family 2 groups (lower case)
160
160
  my %family2groups = map { lc $_ => 1 } @delGroup2, 'Unknown';
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.47';
53
+ $VERSION = '3.48';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -436,9 +436,37 @@ my %sOECF = (
436
436
  Names => { List => 'Seq' },
437
437
  Values => { List => 'Seq', Writable => 'rational' },
438
438
  );
439
-
439
+ my %sAreaModels = (
440
+ STRUCT_NAME => 'AreaModels',
441
+ NAMESPACE => 'crs',
442
+ ColorRangeMaskAreaSampleInfo => { },
443
+ AreaComponents => { List => 'Seq' },
444
+ );
445
+ my %sCorrectionRangeMask = (
446
+ STRUCT_NAME => 'CorrectionRangeMask',
447
+ NAMESPACE => 'crs',
448
+ Version => { },
449
+ Type => { },
450
+ ColorAmount => { Writable => 'real' },
451
+ LumMin => { Writable => 'real' },
452
+ LumMax => { Writable => 'real' },
453
+ LumFeather => { Writable => 'real' },
454
+ DepthMin => { Writable => 'real' },
455
+ DepthMax => { Writable => 'real' },
456
+ DepthFeather=> { Writable => 'real' },
457
+ # new in LR 11.0
458
+ Invert => { Writable => 'boolean' },
459
+ SampleType => { Writable => 'integer' },
460
+ AreaModels => {
461
+ List => 'Seq',
462
+ Struct => \%sAreaModels,
463
+ },
464
+ LumRange => { },
465
+ LuminanceDepthSampleInfo => { },
466
+ );
440
467
  # new LR2 crs structures (PH)
441
- my %sCorrectionMask = (
468
+ my %sCorrectionMask;
469
+ %sCorrectionMask = (
442
470
  STRUCT_NAME => 'CorrectionMask',
443
471
  NAMESPACE => 'crs',
444
472
  # disable List behaviour of flattened Gradient/PaintBasedCorrections
@@ -473,19 +501,21 @@ my %sCorrectionMask = (
473
501
  Alpha => { Writable => 'real', List => 0 },
474
502
  CenterValue => { Writable => 'real', List => 0 },
475
503
  PerimeterValue=>{ Writable => 'real', List => 0 },
476
- );
477
- my %sCorrectionRangeMask = (
478
- STRUCT_NAME => 'CorrectionRangeMask',
479
- NAMESPACE => 'crs',
480
- Version => { },
481
- Type => { },
482
- ColorAmount => { Writable => 'real' },
483
- LumMin => { Writable => 'real' },
484
- LumMax => { Writable => 'real' },
485
- LumFeather => { Writable => 'real' },
486
- DepthMin => { Writable => 'real' },
487
- DepthMax => { Writable => 'real' },
488
- DepthFeather=> { Writable => 'real' },
504
+ # new in LR 11.0 MaskGroupBasedCorrections
505
+ MaskActive => { Writable => 'boolean', List => 0 },
506
+ MaskName => { List => 0 },
507
+ MaskBlendMode=> { Writable => 'integer', List => 0 },
508
+ MaskInverted => { Writable => 'boolean', List => 0 },
509
+ MaskSyncID => { List => 0 },
510
+ MaskVersion => { List => 0 },
511
+ MaskSubType => { List => 0 },
512
+ ReferencePoint => { List => 0 },
513
+ InputDigest => { List => 0 },
514
+ MaskDigest => { List => 0 },
515
+ WholeImageArea => { List => 0 },
516
+ Origin => { List => 0 },
517
+ Masks => { Struct => \%sCorrectionMask, NoSubStruct => 1 },
518
+ CorrectionRangeMask => { Struct => \%sCorrectionRangeMask },
489
519
  );
490
520
  my %sCorrection = (
491
521
  STRUCT_NAME => 'Correction',
@@ -516,6 +546,7 @@ my %sCorrection = (
516
546
  LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
517
547
  LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
518
548
  LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
549
+ # new in LR 11.0
519
550
  CorrectionRangeMask => {
520
551
  FlatName => 'RangeMask',
521
552
  Struct => \%sCorrectionRangeMask,
@@ -525,6 +556,8 @@ my %sCorrection = (
525
556
  Struct => \%sCorrectionMask,
526
557
  List => 'Seq',
527
558
  },
559
+ CorrectionName => { },
560
+ CorrectionSyncID => { },
528
561
  );
529
562
  my %sRetouchArea = (
530
563
  STRUCT_NAME => 'RetouchArea',
@@ -543,6 +576,30 @@ my %sRetouchArea = (
543
576
  List => 'Seq',
544
577
  },
545
578
  );
579
+ my %sMapInfo = (
580
+ STRUCT_NAME => 'MapInfo',
581
+ NAMESPACE => 'crs',
582
+ NOTES => q{
583
+ Called RangeMaskMapInfo by the specification, the same as the containing
584
+ structure.
585
+ },
586
+ RGBMin => { },
587
+ RGBMax => { },
588
+ LabMin => { },
589
+ LabMax => { },
590
+ LumEq => { List => 'Seq' },
591
+ );
592
+ my %sRangeMask = (
593
+ STRUCT_NAME => 'RangeMask',
594
+ NAMESPACE => 'crs',
595
+ NOTES => q{
596
+ This structure is actually called RangeMaskMapInfo, but it only contains one
597
+ element which is a RangeMaskMapInfo structure (Yes, really!). So these are
598
+ renamed to RangeMask and MapInfo respectively to avoid confusion and
599
+ redundancy in the tag names.
600
+ },
601
+ RangeMaskMapInfo => { FlatName => 'MapInfo', Struct => \%sMapInfo },
602
+ );
546
603
 
547
604
  # main XMP tag table (tag ID's are used for the family 1 group names)
548
605
  %Image::ExifTool::XMP::Main = (
@@ -1581,6 +1638,14 @@ my %sPantryItem = (
1581
1638
  AutoToneDigestNoSat => { },
1582
1639
  ToggleStyleDigest => { },
1583
1640
  ToggleStyleAmount => { Writable => 'integer' },
1641
+ # new for LightRoom 11.0
1642
+ CompatibleVersion => { },
1643
+ MaskGroupBasedCorrections => {
1644
+ FlatName => 'MaskGroupBasedCorr',
1645
+ Struct => \%sCorrection,
1646
+ List => 'Seq',
1647
+ },
1648
+ RangeMaskMapInfo => { Name => 'RangeMask', Struct => \%sRangeMask, FlatName => 'RangeMask' },
1584
1649
  );
1585
1650
 
1586
1651
  # Tiff namespace properties (tiff)
@@ -2307,6 +2372,7 @@ my %sPantryItem = (
2307
2372
  VignetteCorrectionAlreadyApplied => { Writable => 'boolean' },
2308
2373
  LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' },
2309
2374
  LensDistortInfo => { }, # (LR 7.5.1, 4 signed rational values)
2375
+ NeutralDensityFactor => { }, # (LR 11.0 - rational value, but denominator seems significant)
2310
2376
  );
2311
2377
 
2312
2378
  # IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
@@ -2363,6 +2429,7 @@ my %sPantryItem = (
2363
2429
  NOTES => 'Adobe Lightroom "lr" namespace tags.',
2364
2430
  privateRTKInfo => { },
2365
2431
  hierarchicalSubject => { List => 'Bag' },
2432
+ weightedFlatSubject => { List => 'Bag' },
2366
2433
  );
2367
2434
 
2368
2435
  # Adobe Album namespace properties (album) (ref PH)
@@ -3505,6 +3572,17 @@ sub ParseXMPElement($$$;$$$$)
3505
3572
  }
3506
3573
  $start = pos($$dataPt); # start from here the next time around
3507
3574
 
3575
+ # ignore specified XMP namespaces/properties
3576
+ if ($$et{EXCL_XMP_LOOKUP} and not $isWriting and $prop =~ /^(.+):(.*)/) {
3577
+ my ($ns, $nm) = (lc($stdXlatNS{$1} || $1), lc($2));
3578
+ if ($$et{EXCL_XMP_LOOKUP}{"xmp-$ns:all"} or $$et{EXCL_XMP_LOOKUP}{"xmp-$ns:$nm"} or
3579
+ $$et{EXCL_XMP_LOOKUP}{"xmp-all:$nm"})
3580
+ {
3581
+ ++$count; # (pretend we found something so we don't store as a tag value)
3582
+ next;
3583
+ }
3584
+ }
3585
+
3508
3586
  # extract property attributes
3509
3587
  my ($parseResource, %attrs, @attrs);
3510
3588
  while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
@@ -3602,9 +3680,9 @@ sub ParseXMPElement($$$;$$$$)
3602
3680
  if ($nItems == 1000) {
3603
3681
  my ($tg,$ns) = GetXMPTagID($propList);
3604
3682
  if ($isWriting) {
3605
- $et->Warn("Excessive number of items for $ns:$tg. Processing may be slow", 1);
3683
+ $et->WarnOnce("Excessive number of items for $ns:$tg. Processing may be slow", 1);
3606
3684
  } elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) {
3607
- $et->Warn("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
3685
+ $et->WarnOnce("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
3608
3686
  last;
3609
3687
  }
3610
3688
  }
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.35';
32
+ $VERSION = '12.36';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -4252,6 +4252,7 @@ sub ParseArguments($;@)
4252
4252
  $$self{REQ_TAG_LOOKUP} = { };
4253
4253
  $$self{EXCL_TAG_LOOKUP} = { };
4254
4254
  $$self{IO_TAG_LIST} = undef;
4255
+ delete $$self{EXCL_XMP_LOOKUP};
4255
4256
 
4256
4257
  # handle our input arguments
4257
4258
  while (@_) {
@@ -4335,7 +4336,11 @@ sub ParseArguments($;@)
4335
4336
  # generate lookup for excluded tags
4336
4337
  if ($$options{Exclude}) {
4337
4338
  foreach (@{$$options{Exclude}}) {
4338
- /([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc($1)} = 1;
4339
+ /([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc $1} = 1;
4340
+ if (/(xmp-.*:[-\w]+)#?/i) {
4341
+ $$self{EXCL_XMP_LOOKUP} or $$self{EXCL_XMP_LOOKUP} = { };
4342
+ $$self{EXCL_XMP_LOOKUP}{lc $1} = 1;
4343
+ }
4339
4344
  }
4340
4345
  # exclude list is used only for EXCL_TAG_LOOKUP when TAGS_FROM_FILE is set
4341
4346
  undef $$options{Exclude} if $$self{TAGS_FROM_FILE};
@@ -6309,7 +6314,7 @@ sub ProcessJPEG($$)
6309
6314
  my $markerName = JpegMarkerName($marker);
6310
6315
  $$path[$pn] = $markerName;
6311
6316
  # issue warning if we skipped some garbage
6312
- if ($skipped and not $foundSOS) {
6317
+ if ($skipped and not $foundSOS and $markerName ne 'SOS') {
6313
6318
  $self->Warn("Skipped unknown $skipped bytes after JPEG $markerName segment", 1);
6314
6319
  if ($htmlDump) {
6315
6320
  $self->HDump($nextSegPos-4-$skipped, $skipped, "[unknown $skipped bytes]", undef, 0x08);
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.35
3
+ Version: 12.36
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.35.0')
4
+ VERSION = Gem::Version.new('12.36.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.35.0
4
+ version: 12.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-15 00:00:00.000000000 Z
12
+ date: 2021-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool