exiftool_vendored 12.35.0 → 12.36.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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