exiftool_vendored 12.64.1 → 12.67.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.56';
24
+ $VERSION = '1.57';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -112,10 +112,13 @@ my %supportedFilter = (
112
112
  Keywords => {
113
113
  List => 'string', # this is a string list
114
114
  Notes => q{
115
- stored as a string but treated as a comma-separated list of items when
116
- reading if the string contains a comma, otherwise a space-separated list of
117
- items. Written as a comma-separated list. The list behaviour may be
118
- defeated by setting the API NoPDFList option
115
+ stored as a string but treated as a comma- or semicolon-separated list of
116
+ items when reading if the string contains commas or semicolons, whichever is
117
+ more numerous, otherwise it is treated a space-separated list of items.
118
+ Written as a comma-separated list. The list behaviour may be defeated by
119
+ setting the API NoPDFList option. Note that the corresponding
120
+ XMP-pdf:Keywords tag is not treated as a list, so the NoPDFList option
121
+ should be used when copying between these two.
119
122
  },
120
123
  },
121
124
  Creator => { },
@@ -1762,6 +1765,7 @@ sub ExpandArray($)
1762
1765
  # 4) nesting depth, 5) dictionary capture type
1763
1766
  sub ProcessDict($$$$;$$)
1764
1767
  {
1768
+ local $_;
1765
1769
  my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_;
1766
1770
  my $verbose = $et->Options('Verbose');
1767
1771
  my $unknown = $$tagTablePtr{EXTRACT_UNKNOWN};
@@ -2025,10 +2029,16 @@ sub ProcessDict($$$$;$$)
2025
2029
  }
2026
2030
  if ($$tagInfo{List} and not $$et{OPTIONS}{NoPDFList}) {
2027
2031
  # separate tokens in comma or whitespace delimited lists
2028
- my @values = ($val =~ /,/) ? split /,+\s*/, $val : split ' ', $val;
2029
- foreach $val (@values) {
2030
- $et->FoundTag($tagInfo, $val);
2032
+ my $comma = $val =~ tr/,/,/;
2033
+ my $semi = $val =~ tr/;/;/;
2034
+ my $split;
2035
+ if ($comma or $semi) {
2036
+ $split = $comma > $semi ? ',+\\s*' : ';+\\s*';
2037
+ } else {
2038
+ $split = ' ';
2031
2039
  }
2040
+ my @values = split $split, $val;
2041
+ $et->FoundTag($tagInfo, $_) foreach @values;
2032
2042
  } else {
2033
2043
  # a simple tag value
2034
2044
  $et->FoundTag($tagInfo, $val);
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool::XMP;
16
16
 
17
- $VERSION = '1.00';
17
+ $VERSION = '1.02';
18
18
 
19
19
  sub ValidateMediaSummary($);
20
20
 
@@ -2311,12 +2311,13 @@ my %mediaMatrix = (
2311
2311
  GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
2312
2312
  NAMESPACE => 'plus',
2313
2313
  NOTES => q{
2314
- PLUS (Picture Licensing Universal System) License Data Format 1.2.1 XMP
2314
+ PLUS (Picture Licensing Universal System) License Data Format 2.0.1 XMP
2315
2315
  tags. Note that all controlled-vocabulary tags in this table (ie. tags with
2316
2316
  a fixed set of values) have raw values which begin with
2317
2317
  "http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has
2318
- been removed from the values shown below. See L<http://ns.useplus.org/> for
2319
- the complete specification.
2318
+ been removed from the values shown below, and from the values read and
2319
+ written with the -n option. See L<http://ns.useplus.org/> for the complete
2320
+ specification.
2320
2321
  },
2321
2322
  Version => { Name => 'PLUSVersion' },
2322
2323
  Licensee => {
@@ -2529,6 +2530,20 @@ my %mediaMatrix = (
2529
2530
  Custom8 => { List => 'Bag', Writable => 'lang-alt' },
2530
2531
  Custom9 => { List => 'Bag', Writable => 'lang-alt' },
2531
2532
  Custom10 => { List => 'Bag', Writable => 'lang-alt' },
2533
+ DataMining => {
2534
+ %plusVocab,
2535
+ PrintConv => {
2536
+ 'DMI-UNSPECIFIED' => 'Unspecified - no prohibition defined',
2537
+ 'DMI-ALLOWED' => 'Allowed',
2538
+ 'DMI-PROHIBITED-AIMLTRAINING' => 'Prohibited for AI/ML training',
2539
+ 'DMI-PROHIBITED-GENAIMLTRAINING' => 'Prohibited for Generative AI/ML training',
2540
+ 'DMI-PROHIBITED-EXCEPTSEARCHENGINEINDEXING' => 'Prohibited except for search engine indexing',
2541
+ 'DMI-PROHIBITED' => 'Prohibited',
2542
+ 'DMI-PROHIBITED-SEECONSTRAINT' => 'Prohibited, see plus:OtherConstraints',
2543
+ 'DMI-PROHIBITED-SEEEMBEDDEDRIGHTSEXPR' => 'Prohibited, see iptcExt:EmbdEncRightsExpr',
2544
+ 'DMI-PROHIBITED-SEELINKEDRIGHTSEXPR' => 'Prohibited, see iptcExt:LinkedEncRightsExpr',
2545
+ },
2546
+ },
2532
2547
  );
2533
2548
 
2534
2549
  #------------------------------------------------------------------------------
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.42';
61
+ $VERSION = '3.43';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -175,6 +175,7 @@ sub DecodeAFPoints($$$$;$);
175
175
  '4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6',
176
176
  '4 3' => 'smc PENTAX-FA 43mm F1.9 Limited',
177
177
  '4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
178
+ '4 7' => 'Irix 45mm F1.4', #27
178
179
  '4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
179
180
  '4 9' => 'Irix 11mm F4 Firefly', #27
180
181
  '4 10' => 'Irix 15mm F2.4', #27
@@ -265,6 +266,7 @@ sub DecodeAFPoints($$$$;$);
265
266
  '6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]',
266
267
  '7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13
267
268
  '7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;)
269
+ # '7 58' also 'HD PENTAX-D FA MACRO 100mm F2.8 ED AW' (ref 27)
268
270
  '7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar)
269
271
  '7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk)
270
272
  '7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29
@@ -37,6 +37,7 @@
37
37
  # 25) https://cconcolato.github.io/mp4ra/atoms.html
38
38
  # 26) https://github.com/SamsungVR/android_upload_sdk/blob/master/SDKLib/src/main/java/com/samsung/msca/samsungvr/sdk/UserVideo.java
39
39
  # 27) https://exiftool.org/forum/index.php?topic=11517.0
40
+ # 28) https://docs.mp3tag.de/mapping/
40
41
  #------------------------------------------------------------------------------
41
42
 
42
43
  package Image::ExifTool::QuickTime;
@@ -47,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
48
  use Image::ExifTool::Exif;
48
49
  use Image::ExifTool::GPS;
49
50
 
50
- $VERSION = '2.86';
51
+ $VERSION = '2.87';
51
52
 
52
53
  sub ProcessMOV($$;$);
53
54
  sub ProcessKeys($$$);
@@ -3396,8 +3397,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
3396
3397
  },
3397
3398
  albm => { Name => 'Album', Avoid => 1 }, #(ffmpeg source)
3398
3399
  apID => 'AppleStoreAccount',
3399
- atID => { #10 (or TV series)
3400
- Name => 'AlbumTitleID',
3400
+ atID => {
3401
+ # (ref 10 called this AlbumTitleID or TVSeries)
3402
+ Name => 'ArtistID', #28 (or Track ID ref https://gist.github.com/maf654321/2b44c7b15d798f0c52ee)
3401
3403
  Format => 'int32u',
3402
3404
  Writable => 'int32s', #27
3403
3405
  },
@@ -3408,6 +3410,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
3408
3410
  Format => 'int32u',
3409
3411
  Writable => 'int32s', #27
3410
3412
  },
3413
+ cmID => 'ComposerID', #28 (need sample to get format)
3411
3414
  cprt => { Name => 'Copyright', Groups => { 2 => 'Author' } },
3412
3415
  dscp => { Name => 'Description', Avoid => 1 },
3413
3416
  desc => { Name => 'Description', Avoid => 1 }, #7
@@ -6100,10 +6103,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6100
6103
  PrintConv => { 0 => 'No', 1 => 'Yes' },
6101
6104
  },
6102
6105
  perf => 'Performer',
6103
- plID => { #10 (or TV season)
6104
- Name => 'PlayListID',
6105
- Format => 'int8u', # actually int64u, but split it up
6106
- Count => 8,
6106
+ plID => {
6107
+ # (ref 10 called this PlayListID or TVSeason)
6108
+ Name => 'AlbumID', #28
6109
+ Format => 'int64u',
6107
6110
  Writable => 'int32s', #27
6108
6111
  },
6109
6112
  purd => 'PurchaseDate', #7
@@ -6565,6 +6568,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6565
6568
  'rating.user' => 'UserRating', # (Canon ELPH 510 HS)
6566
6569
  'collection.user' => 'UserCollection', #22
6567
6570
  'Encoded_With' => 'EncodedWith',
6571
+ 'content.identifier' => 'ContentIdentifier', #forum14874
6568
6572
  #
6569
6573
  # the following tags aren't in the com.apple.quicktime namespace:
6570
6574
  #
@@ -9519,13 +9523,17 @@ sub ProcessMOV($$;$)
9519
9523
  my $items = $$et{ItemInfo};
9520
9524
  my ($id, $prop, $docNum, $lowest);
9521
9525
  my $primary = $$et{PrimaryItem} || 0;
9522
- ItemID: foreach $id (keys %$items) {
9526
+ ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
9523
9527
  next unless $$items{$id}{Association};
9524
9528
  my $item = $$items{$id};
9525
9529
  foreach $prop (@{$$item{Association}}) {
9526
9530
  next unless $prop == $index;
9527
9531
  if ($id == $primary or (not $dontInherit{$tag} and
9528
- (not $$item{RefersTo} or $$item{RefersTo}{$primary})))
9532
+ (($$item{RefersTo} and $$item{RefersTo}{$primary}) or
9533
+ # hack: assume Item 1 is from the main image (eg. hvc1 data)
9534
+ # to hack the case where the primary item (ie. main image)
9535
+ # doesn't directly reference this property
9536
+ (not $$item{RefersTo} and $id == 1))))
9529
9537
  {
9530
9538
  # this is associated with the primary item or an item describing
9531
9539
  # the primary item, so consider this part of the main document
@@ -9536,7 +9544,7 @@ ItemID: foreach $id (keys %$items) {
9536
9544
  # this property is already associated with an item that has
9537
9545
  # an ExifTool document number, so use the lowest associated DocNum
9538
9546
  $docNum = $$item{DocNum} if not defined $docNum or $docNum > $$item{DocNum};
9539
- } elsif (not defined $lowest or $lowest > $id) {
9547
+ } else {
9540
9548
  # keep track of the lowest associated item ID
9541
9549
  $lowest = $id;
9542
9550
  }