exiftool_vendored 13.24.0 → 13.26.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f33904cf1cb68c4430d4c01c96d72b95f075598f22d8dc3d11dd675d748d2d07
4
- data.tar.gz: feb3c0a6a5adcdb9d641fe9c525fccbae1f418b6ea2410114a982e405361bef2
3
+ metadata.gz: 7ade24a22d85fc4d797e0fa157ccbcab31f7ef49a375c50849f76e075e1366ea
4
+ data.tar.gz: e4f4a5da9a42324b16bc953f1f326abf2700f57e9f15d58661f3863cf359ea01
5
5
  SHA512:
6
- metadata.gz: 715c7f81c667b8805769396e03b36bd2b2fc22c0085a4755e6f4eb12e9ede928732f3a28f484f14f854e6547bc473466992812ad57b35a70553d86b1f61c30ea
7
- data.tar.gz: b3a603f49067c3d03fb7cd4ec1aaee82d3924010e532622ae46f7398e40d6612cbf3fcb8f7e02c0adddb305c971e31a4e8fce19470867b6b68b26567d6931ebb
6
+ metadata.gz: a3bd7b0e0211feb8854f98a1de7956776cb7dcfc36eb4f224a333a7bf6912e50d433af4c806ca3bde62100a3eb99dd8704862da9092e06a2bc831d5bbba41b3c
7
+ data.tar.gz: c19b405e58717505f77791c5115bc67d98651b48d4872d25270ecda79ac42a00740495ec324616650c33d3c9931763a1ddb31722318b8ab9071d3476b3033361
data/bin/Changes CHANGED
@@ -4,9 +4,32 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 13.10. (Other versions are
7
+ Note: The most recent production release is Version 13.25. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Mar. 31, 2025 - Version 13.26
11
+
12
+ - Added a new Olympus CameraType (thanks Herb)
13
+ - Added a new PentaxModelID (github #322)
14
+ - Added a new Nikon LensID
15
+ - Improved Duration calculation for some WAV files
16
+ - Changed a PCAP tag name and fixed typos in a few others (thanks blue-j)
17
+ - Patched to avoid VignettingCorr warning for images from some Canon cameras
18
+ - Patched to avoid some unnecessary duplicate tag warnings when -validate used
19
+ with HEIC images
20
+ - Fixed issue with XMP-xmpMM:Pantry items not exhibiting proper List-type
21
+ behaviour
22
+
23
+ Mar. 11, 2025 - Version 13.25 (production release)
24
+
25
+ - IMPORTANT: Fixed issue which could corrupt HEIC images from newer iPhones
26
+ under certain conditions when writing QuickTime:Rotation
27
+ - Decode more PLIST information from HEIC images
28
+ - Updated Geolocation databases from current geonames.org files
29
+ - Updated DarwinCore for the 2023 specification (thanks Herb)
30
+ - API Changes:
31
+ - Added KeepUTCTime option
32
+
10
33
  Mar. 7, 2025 - Version 13.24
11
34
 
12
35
  - Changed -listf, -listr and -listwf options to print descriptions when either
@@ -15,7 +38,7 @@ Mar. 7, 2025 - Version 13.24
15
38
 
16
39
  Mar. 7, 2025 - Version 13.23
17
40
 
18
- - Added read support for CAP, PCAP and PACPNG files
41
+ - Added read support for CAP, PCAP and PCAPNG files (github #318)
19
42
  - Added a number of new Sony LensType2 values (thanks Jos Roost)
20
43
  - Added the 2 new GPSAltitudeRef values defined by EXIF 3.0
21
44
  - Decode APP4 "Qualcomm Dual Camera Attributes" metadata
@@ -47,7 +70,7 @@ Feb. 20, 2025 - Version 13.21
47
70
  - Patched issue that could result in runtime warning for some video files
48
71
  - Fixed a bug with the new -plot option that could generate a compiler error
49
72
 
50
- Feb. 20, 2025 - Version 13.20
73
+ Feb. 20, 2025 - Version 13.20 - "SVG Plot"
51
74
 
52
75
  - Added new -plot option for generating SVG-format plots from tag values
53
76
  - Added a new Olympus CameraType
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.24"
53
+ "version" : "13.26"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.24'
34
+ version: '13.26'
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-13.24.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.24
112
+ gzip -dc Image-ExifTool-13.26.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.26
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -170,7 +170,7 @@ COPYRIGHT AND LICENSE
170
170
  Copyright 2003-2025, Phil Harvey
171
171
 
172
172
  This is free software; you can redistribute it and/or modify it under the
173
- same terms as Perl itself.
173
+ same terms as Perl itself (either the Perl Artistic License or GPL).
174
174
 
175
175
  DISTRIBUTION FILES
176
176
 
@@ -40,7 +40,7 @@
40
40
  # 6 int8u - 0xf0 = population E exponent (in format "N.Fe+0E"), 0x0f = population N digit
41
41
  # 7 int16u - 0xf000 = population F digit, 0x0fff = index in region list (admin1)
42
42
  # 9 int16u - v1.02: 0x7fff = index in subregion (admin2), 0x8000 = high bit of time zone
43
- # 9 int16u - v1.03: index in subregion (admin2)
43
+ # 9 int16u - v1.03: index in subregion list (admin2)
44
44
  # 11 int8u - low byte of time zone index
45
45
  # 12 int8u - 0x3f = feature code index (see below), v1.03: 0x80 = high bit of time zone
46
46
  # 13 string - UTF8 City name, terminated by newline
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.24';
14
+ my $version = '13.26';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -5010,7 +5010,7 @@ B<exiftool> [I<OPTIONS>] [-I<TAG>...] [--I<TAG>...] I<FILE>...
5010
5010
 
5011
5011
  =head2 Writing
5012
5012
 
5013
- B<exiftool> [I<OPTIONS>] -I<TAG>[+-E<lt>]=[I<VALUE>]... I<FILE>...
5013
+ B<exiftool> [I<OPTIONS>] -I<TAG>[+-^E<lt>]=[I<VALUE>]... I<FILE>...
5014
5014
 
5015
5015
  =head2 Copying
5016
5016
 
@@ -6053,7 +6053,7 @@ with this command:
6053
6053
 
6054
6054
  produces output like this:
6055
6055
 
6056
- -- Generated by ExifTool 13.24 --
6056
+ -- Generated by ExifTool 13.26 --
6057
6057
  File: a.jpg - 2003:10:31 15:44:19
6058
6058
  (f/5.6, 1/60s, ISO 100)
6059
6059
  File: b.jpg - 2006:05:23 11:57:38
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool::Exif;
17
17
  use Image::ExifTool::PLIST;
18
18
 
19
- $VERSION = '1.14';
19
+ $VERSION = '1.15';
20
20
 
21
21
  sub ConvertPLIST($$);
22
22
 
@@ -307,7 +307,17 @@ sub ConvertPLIST($$);
307
307
  Name => 'Apple_0x004f',
308
308
  Unknown => 1,
309
309
  ValueConv => \&ConvertPLIST,
310
- }
310
+ },
311
+ 0x0054 => {
312
+ Name => 'Apple_0x0054',
313
+ Unknown => 1,
314
+ ValueConv => \&ConvertPLIST,
315
+ },
316
+ 0x005a => {
317
+ Name => 'Apple_0x005a',
318
+ Unknown => 1,
319
+ ValueConv => \&ConvertPLIST,
320
+ },
311
321
  );
312
322
 
313
323
  # PLIST-format CMTime structure (ref PH)
@@ -2053,7 +2053,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2053
2053
  # 0x4014 (similar to 0x83?)
2054
2054
  0x4015 => [{
2055
2055
  Name => 'VignettingCorr', # (LensPacket)
2056
- Condition => '$$valPt =~ /^\0/ and $$valPt !~ /^\0\0\0\0/', # (data may be all zeros for 60D)
2056
+ Condition => '$$valPt =~ /^\0/ and $$valPt !~ /^(\0\0\0\0|\x00\x40\xdc\x05)/', # (data may be all zeros for 60D)
2057
2057
  SubDirectory => {
2058
2058
  # (the size word is at byte 2 in this structure)
2059
2059
  Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
@@ -2061,7 +2061,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2061
2061
  },
2062
2062
  },{
2063
2063
  Name => 'VignettingCorrUnknown1',
2064
- Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~ /^\0\0\0\0/',
2064
+ Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~ /^(\0\0\0\0|\x02\x50\x7c\x04)/',
2065
2065
  SubDirectory => {
2066
2066
  # (the size word is at byte 2 in this structure)
2067
2067
  Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
@@ -4758,6 +4758,7 @@ my %ciMaxFocal = (
4758
4758
  Format => 'int32u',
4759
4759
  Notes => 'includes electronic + mechanical shutter',
4760
4760
  },
4761
+ # 0x0b5a - related to image stabilization (ref forum17239) (R5)
4761
4762
  # 0x0bb7 - counts down during focus stack (ref forum16111)
4762
4763
  );
4763
4764
 
@@ -4,6 +4,7 @@
4
4
  # Description: Darwin Core XMP tags
5
5
  #
6
6
  # Revisions: 2013-01-28 - P. Harvey Created
7
+ # 2025-03-09 - Herb forum17172 changes dwc.tdwg.org 2023
7
8
  #
8
9
  # References: 1) http://rs.tdwg.org/dwc/index.htm
9
10
  # 2) https://exiftool.org/forum/index.php/topic,4442.0/all.html
@@ -15,7 +16,7 @@ use strict;
15
16
  use vars qw($VERSION);
16
17
  use Image::ExifTool::XMP;
17
18
 
18
- $VERSION = '1.07';
19
+ $VERSION = '1.08';
19
20
 
20
21
  my %dateTimeInfo = (
21
22
  # NOTE: Do NOT put "Groups" here because Groups hash must not be common!
@@ -35,7 +36,7 @@ my %event = (
35
36
  STRUCT_NAME => 'DarwinCore Event',
36
37
  NAMESPACE => 'dwc',
37
38
  day => { Writable => 'integer', Groups => { 2 => 'Time' } },
38
- earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
39
+ earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, # dwc.tdwg.org removed 2023
39
40
  endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
40
41
  eventDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
41
42
  eventID => { Avoid => 1, Notes => 'avoided in favor of XMP-iptcExt:EventID' },
@@ -63,7 +64,7 @@ my %event = (
63
64
  fieldNotes => { },
64
65
  fieldNumber => { },
65
66
  habitat => { },
66
- latestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
67
+ latestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, # dwc.tdwg.org removed 2023
67
68
  month => { Writable => 'integer', Groups => { 2 => 'Time' } },
68
69
  parentEventID => { },
69
70
  samplingEffort => { },
@@ -73,6 +74,7 @@ my %event = (
73
74
  startDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
74
75
  verbatimEventDate => { Groups => { 2 => 'Time' } },
75
76
  year => { Writable => 'integer', Groups => { 2 => 'Time' } },
77
+ eventType => { }, # dwc.tdwg.org added 2023
76
78
  );
77
79
 
78
80
  # Darwin Core tags
@@ -161,6 +163,7 @@ my %event = (
161
163
  measurementType => { },
162
164
  measurementUnit => { },
163
165
  measurementValue => { },
166
+ parentMeasurementID => { }, # dwc.tdwg.org added 2023
164
167
  },
165
168
  },
166
169
  Occurrence => {
@@ -170,25 +173,25 @@ my %event = (
170
173
  associatedMedia => { },
171
174
  associatedOccurrences => { },
172
175
  associatedReferences => { },
173
- associatedSequences => { },
176
+ associatedSequences => { }, # dwc.tdwg.org removed 2023
174
177
  associatedTaxa => { },
175
178
  behavior => { },
176
179
  catalogNumber => { },
177
- disposition => { },
180
+ disposition => { }, # dwc.tdwg.org removed 2023
178
181
  establishmentMeans => { },
179
182
  individualCount => { },
180
- individualID => { },
183
+ individualID => { }, # dwc.tdwg.org removed 2023
181
184
  lifeStage => { },
182
185
  occurrenceDetails => { },
183
- occurrenceID => { },
186
+ occurrenceID => { }, # dwc.tdwg.org removed 2023
184
187
  occurrenceRemarks => { },
185
188
  occurrenceStatus => { },
186
189
  organismQuantity => { },
187
190
  organismQuantityType => { },
188
191
  otherCatalogNumbers => { },
189
192
  preparations => { },
190
- previousIdentifications => { },
191
- recordedBy => { },
193
+ previousIdentifications => { }, # dwc.tdwg.org removed 2023
194
+ recordedBy => { }, # dwc.tdwg.org removed 2023
192
195
  recordNumber => { },
193
196
  reproductiveCondition => { },
194
197
  sex => { },
@@ -197,6 +200,8 @@ my %event = (
197
200
  georeferenceVerificationStatus => { },
198
201
  pathway => { },
199
202
  recordedByID => { },
203
+ caste => { }, # dwc.tdwg.org added 2023
204
+ vitality => { }, # dwc.tdwg.org added 2023
200
205
  },
201
206
  },
202
207
  OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 },
@@ -207,7 +212,7 @@ my %event = (
207
212
  Struct => {
208
213
  STRUCT_NAME => 'DarwinCore Organism',
209
214
  NAMESPACE => 'dwc',
210
- associatedOccurrences => { },
215
+ associatedOccurrences => { }, # dwc.tdwg.org removed 2023
211
216
  associatedOrganisms => { },
212
217
  organismID => { },
213
218
  organismName => { },
@@ -291,6 +296,12 @@ my %event = (
291
296
  taxonomicStatus => { },
292
297
  verbatimTaxonRank => { },
293
298
  vernacularName => { Writable => 'lang-alt' },
299
+ superFamily => { }, # dwc.tdwg.org added 2023
300
+ subFamily => { }, # dwc.tdwg.org added 2023
301
+ tribe => { }, # dwc.tdwg.org added 2023
302
+ subTribe => { }, # dwc.tdwg.org added 2023
303
+ genericName => { }, # dwc.tdwg.org added 2023
304
+ infragenericEpithet => { }, # dwc.tdwg.org added 2023
294
305
  },
295
306
  },
296
307
  TaxonTaxonConceptID => { Name => 'TaxonConceptID', Flat => 1 },
@@ -321,7 +332,7 @@ my %event = (
321
332
  georeferenceProtocol => { },
322
333
  georeferenceRemarks => { },
323
334
  georeferenceSources => { },
324
- georeferenceVerificationStatus => { },
335
+ georeferenceVerificationStatus => { }, # dwc.tdwg.org removed 2023
325
336
  higherGeography => { },
326
337
  higherGeographyID => { },
327
338
  island => { },
Binary file
@@ -336,6 +336,7 @@ my %manuSig = ( #6
336
336
  'Zebr' => 'Zebra Technologies Inc',
337
337
  'ZRAN' => 'Zoran Corporation',
338
338
  # also seen: " ",ACMS,KCMS,UCCM,etc2,SCTX
339
+ # registry: https://www.color.org/signatureRegistry/index.xalter
339
340
  );
340
341
 
341
342
  # ICC_Profile tag table
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.45';
68
+ $VERSION = '4.46';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -552,6 +552,7 @@ sub GetAFPointGrid($$;$);
552
552
  '21 56 8E 8E 24 24 14 00' => 'Tamron SP AF 300mm f/2.8 LD-IF (60E)',
553
553
  '27 54 8E 8E 24 24 1D 02' => 'Tamron SP AF 300mm f/2.8 LD-IF (360E)',
554
554
  'E1 40 19 36 2C 35 DF 4E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)',
555
+ 'E1 40 19 36 2C 35 DF 0E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)', #30
555
556
  'F6 3F 18 37 2C 34 84 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)',
556
557
  'F6 3F 18 37 2C 34 DF 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)', #30
557
558
  '00 36 1C 2D 34 3C 00 06' => 'Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)',
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.84';
43
+ $VERSION = '2.85';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -446,6 +446,7 @@ my %olympusCameraTypes = (
446
446
  S0095 => 'OM-1', #IB
447
447
  S0101 => 'OM-5', #IB
448
448
  S0121 => 'OM-1MarkII', #forum15652
449
+ S0123 => 'OM-3', #forum17208
449
450
  SR45 => 'D220',
450
451
  SR55 => 'D320L',
451
452
  SR83 => 'D340L',
@@ -16,7 +16,7 @@ use strict;
16
16
  use vars qw($VERSION);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
 
19
- $VERSION = '1.00';
19
+ $VERSION = '1.01';
20
20
 
21
21
  %Image::ExifTool::PCAP::Main = (
22
22
  GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Other' },
@@ -261,14 +261,14 @@ $VERSION = '1.00';
261
261
  },
262
262
  },
263
263
  19373 => {
264
- Name => 'CustomOption3',
264
+ Name => 'CustomOption4',
265
265
  Binary => 1,
266
266
  },
267
267
  #
268
268
  # "options" tags in Section Header Block
269
269
  #
270
270
  'SHB-2' => 'Hardware',
271
- 'SHB-3' => 'OperatingSytem',
271
+ 'SHB-3' => 'OperatingSystem',
272
272
  'SHB-4' => 'UserApplication',
273
273
  #
274
274
  # "options" tags in Interface Description Block
@@ -308,8 +308,8 @@ $VERSION = '1.00';
308
308
  Name => 'Filter',
309
309
  ValueConv => 'Get8u(\$val,0) . ": " . substr($val, 1)',
310
310
  },
311
- 'IDB-12' => 'OperatingSytem',
312
- 'IDB-13' => { Name => 'FCSLen', Format => 'int8u' },
311
+ 'IDB-12' => 'OperatingSystem',
312
+ 'IDB-13' => { Name => 'FrameCheckSequenceLength', Format => 'int8u' },
313
313
  'IDB-14' => {
314
314
  Name => 'TimeStampOffset',
315
315
  Format => 'int64u',
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::XMP;
22
22
  use Image::ExifTool::GPS;
23
23
 
24
- $VERSION = '1.14';
24
+ $VERSION = '1.15';
25
25
 
26
26
  sub ExtractObject($$;$);
27
27
  sub Get24u($$);
@@ -352,7 +352,7 @@ sub ExtractObject($$;$)
352
352
  my $name = $tag;
353
353
  $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words
354
354
  $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
355
- $name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
355
+ $name = 'Tag'.ucfirst($name) if length($name) < 2 or $name =~ /^[-0-9]/;
356
356
  $tagInfo = { Name => ucfirst($name), List => 1 };
357
357
  if ($$plistInfo{DateFormat}) {
358
358
  $$tagInfo{Groups}{2} = 'Time';
@@ -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.47';
61
+ $VERSION = '3.48';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -558,6 +558,7 @@ my %pentaxModelID = (
558
558
  0x13254 => 'K-3 Mark III', #IB (Ricoh)
559
559
  0x13290 => 'WG-70', # (Ricoh)
560
560
  0x1329a => 'GR IIIx', # (Ricoh)
561
+ 0x132b8 => 'KF', #github322 (Ricoh)
561
562
  0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
562
563
  );
563
564
 
@@ -38,6 +38,7 @@
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
40
  # 28) https://docs.mp3tag.de/mapping/
41
+ # 29) https://developer.apple.com/documentation/quicktime-file-format/media_data_reference_atom
41
42
  #------------------------------------------------------------------------------
42
43
 
43
44
  package Image::ExifTool::QuickTime;
@@ -48,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
48
49
  use Image::ExifTool::Exif;
49
50
  use Image::ExifTool::GPS;
50
51
 
51
- $VERSION = '3.13';
52
+ $VERSION = '3.15';
52
53
 
53
54
  sub ProcessMOV($$;$);
54
55
  sub ProcessKeys($$$);
@@ -492,6 +493,8 @@ my %qtFlags = ( #12
492
493
  %dontInherit = (
493
494
  ispe => 1, # primary item must have an ispe and pixi, so no need to inherit these
494
495
  pixi => 1,
496
+ irot => 1, # (tmap may have a different irot)
497
+ pasp => 1, # (NC)
495
498
  hvcC => 2, # (hvcC is a property of hvc1 referred to by primary grid)
496
499
  colr => 2, # (colr is a property of primary grid or hvc1 referred to by primary)
497
500
  );
@@ -500,7 +503,7 @@ my %qtFlags = ( #12
500
503
  # (used only to avoid warnings when Validate-ing)
501
504
  my %dupTagOK = ( mdat => 1, trak => 1, free => 1, infe => 1, sgpd => 1, dimg => 1, CCDT => 1,
502
505
  sbgp => 1, csgm => 1, uuid => 1, cdsc => 1, maxr => 1, '----' => 1 );
503
- my %dupDirOK = ( ipco => 1, '----' => 1 );
506
+ my %dupDirOK = ( ipco => 1, iref => 1, '----' => 1 );
504
507
 
505
508
  # the usual atoms required to decode timed metadata with the ExtractEmbedded option
506
509
  my %eeStd = ( stco => 'stbl', co64 => 'stbl', stsz => 'stbl', stz2 => 'stbl',
@@ -1225,6 +1228,7 @@ my %userDefined = (
1225
1228
  # clip - clipping --> contains crgn (clip region) (ref 12)
1226
1229
  # mvex - movie extends --> contains mehd (movie extends header), trex (track extends) (ref 14)
1227
1230
  # ICAT - 4 bytes: "6350" (Nikon CoolPix S6900), "6500" (Panasonic FT7)
1231
+ # ctab - color table (ref 29)
1228
1232
  );
1229
1233
 
1230
1234
  # (ref CFFMediaFormat-2_1.pdf)
@@ -1424,6 +1428,7 @@ my %userDefined = (
1424
1428
  # load - track loading settings
1425
1429
  # imap - track input map --> contains ' in' --> contains ' ty', obid
1426
1430
  # prfl - Profile (ref 12)
1431
+ # txas - track exclude from autoselection (ref 29)
1427
1432
  );
1428
1433
 
1429
1434
  # track header data block
@@ -1628,6 +1633,10 @@ my %userDefined = (
1628
1633
  Start => 4, # must skip 4-byte version number header
1629
1634
  },
1630
1635
  },
1636
+ tnam => { #29 (NC)
1637
+ Name => 'TrackName',
1638
+ IText => 4,
1639
+ },
1631
1640
  'ptv '=> {
1632
1641
  Name => 'PrintToVideo',
1633
1642
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Video' },
@@ -2799,6 +2808,8 @@ my %userDefined = (
2799
2808
  Name => 'Unknown_grpl',
2800
2809
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::grpl' },
2801
2810
  },
2811
+ # ctry - country list (ref 29)
2812
+ # lang - language list (ref 29)
2802
2813
  );
2803
2814
 
2804
2815
  # unknown grpl container
@@ -2854,6 +2865,7 @@ my %userDefined = (
2854
2865
  %Image::ExifTool::QuickTime::ItemPropCont = (
2855
2866
  PROCESS_PROC => \&ProcessMOV,
2856
2867
  WRITE_PROC => \&WriteQuickTime,
2868
+ CHECK_PROC => \&CheckQTValue,
2857
2869
  PERMANENT => 1, # (can't be deleted)
2858
2870
  GROUPS => { 2 => 'Image' },
2859
2871
  VARS => { START_INDEX => 1 }, # show verbose indices starting at 1
@@ -2911,6 +2923,7 @@ my %userDefined = (
2911
2923
  Name => 'PixelAspectRatio',
2912
2924
  Format => 'int32u',
2913
2925
  Writable => 'int32u',
2926
+ Count => 2,
2914
2927
  Protected => 1,
2915
2928
  },
2916
2929
  rloc => {
@@ -3275,21 +3288,28 @@ my %userDefined = (
3275
3288
  %Image::ExifTool::QuickTime::TrackRef = (
3276
3289
  PROCESS_PROC => \&ProcessMOV,
3277
3290
  GROUPS => { 1 => 'Track#', 2 => 'Video' },
3278
- chap => { Name => 'ChapterListTrackID', Format => 'int32u' },
3279
- tmcd => { Name => 'TimeCode', Format => 'int32u' },
3291
+ chap => { Name => 'ChapterListTrackID', Format => 'int32u' },
3292
+ tmcd => { Name => 'TimecodeTrack', Format => 'int32u' },
3280
3293
  mpod => { #PH (FLIR MP4)
3281
3294
  Name => 'ElementaryStreamTrack',
3282
3295
  Format => 'int32u',
3283
3296
  ValueConv => '$val =~ s/^1 //; $val', # (why 2 numbers? -- ignore the first if "1")
3284
3297
  },
3285
- # also: sync, scpt, ssrc, iTunesInfo
3298
+ # also: iTunesInfo
3286
3299
  cdsc => {
3287
3300
  Name => 'ContentDescribes',
3288
3301
  Format => 'int32u',
3289
3302
  PrintConv => '"Track $val"',
3290
3303
  },
3291
- # cdep (Structural Dependency QT tag?)
3292
- # fall - ? int32u, seen: 2
3304
+ clcp => { Name => 'ClosedCaptionTrack', Format => 'int32u' }, #29
3305
+ fall => { Name => 'AlternateFormatTrack', Format => 'int32u' }, #29
3306
+ folw => { Name => 'SubtitleTrack', Format => 'int32u' }, #29
3307
+ forc => { Name => 'ForcedSubtitleTrack', Format => 'int32u' }, #29
3308
+ scpt => { Name => 'TranscriptTrack', Format => 'int32u' }, #29
3309
+ ssrc => { Name => 'Non-primarySourceTrack', Format => 'int32u' }, #29
3310
+ sync => { Name => 'SyncronizedTrack', Format => 'int32u' }, #29
3311
+ # hint - Original media for hint track (ref 29)
3312
+ # cdep (Structural Dependency QT tag?)
3293
3313
  );
3294
3314
 
3295
3315
  # track aperture mode dimensions atoms
@@ -6578,7 +6598,6 @@ my %userDefined = (
6578
6598
  'apple.photos.variation-identifier' => { Name => 'ApplePhotosVariationIdentifier', Writable => 'int64s' },
6579
6599
  'direction.facing' => { Name => 'CameraDirection', Groups => { 2 => 'Location' } },
6580
6600
  'direction.motion' => { Name => 'CameraMotion', Groups => { 2 => 'Location' } },
6581
- 'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } },
6582
6601
  'player.version' => 'PlayerVersion',
6583
6602
  'player.movie.visual.brightness'=> 'Brightness',
6584
6603
  'player.movie.visual.color' => 'Color',
@@ -7042,6 +7061,7 @@ my %userDefined = (
7042
7061
  Name => 'MediaInfo',
7043
7062
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MediaInfo' },
7044
7063
  },
7064
+ elng => 'ExtendedLanguageTag', #29 (NC) eg. "zh-CN"
7045
7065
  );
7046
7066
 
7047
7067
  # MP4 media header box (ref 5)
@@ -7633,6 +7653,8 @@ my %userDefined = (
7633
7653
  mrlh => { Name => 'MarlinHeader', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlh' } },
7634
7654
  mrlv => { Name => 'MarlinValues', SubDirectory => { TagTable => 'Image::ExifTool::GM::mrlv' } },
7635
7655
  mrld => { Name => 'MarlinDictionary',SubDirectory => { TagTable => 'Image::ExifTool::GM::mrld' } },
7656
+ # tbox - text box (ref 29)
7657
+ # styl - subtitle style (ref 29)
7636
7658
  );
7637
7659
 
7638
7660
  # AMR decode config box (ref 3)
@@ -9174,7 +9196,8 @@ sub HandleItemInfo($)
9174
9196
  $et->VPrint(0, "$$et{INDENT}Item $id) '${type}' ($len bytes$enc)\n");
9175
9197
  }
9176
9198
  # get ExifTool name for this item
9177
- my $name = { Exif => 'EXIF', 'application/rdf+xml' => 'XMP', jpeg => 'PreviewImage' }->{$type} || '';
9199
+ my $name = { Exif => 'EXIF', 'application/rdf+xml' => 'XMP', jpeg => 'PreviewImage',
9200
+ 'uri ' => 'PLIST' }->{$type} || '';
9178
9201
  my ($warn, $extent);
9179
9202
  if ($$item{ContentEncoding}) {
9180
9203
  if ($$item{ContentEncoding} ne 'deflate') {
@@ -9267,7 +9290,6 @@ sub HandleItemInfo($)
9267
9290
  if ($name eq 'EXIF' and length $buff >= 4) {
9268
9291
  if ($buff =~ /^(MM\0\x2a|II\x2a\0)/) {
9269
9292
  $et->Warn('Missing Exif header');
9270
- $start = 0;
9271
9293
  } elsif ($buff =~ /^Exif\0\0/) {
9272
9294
  # (haven't seen this yet, but it is just a matter of time
9273
9295
  # until someone screws it up like this)
@@ -9302,10 +9324,14 @@ sub HandleItemInfo($)
9302
9324
  }
9303
9325
  $et->FoundTag($type => $buff);
9304
9326
  next;
9327
+ } elsif ($name eq 'PLIST') {
9328
+ # extract PLIST information from 'uri ' if available
9329
+ next unless $buff =~ /^bplist00/;
9330
+ $subTable = GetTagTable('Image::ExifTool::PLIST::Main');
9305
9331
  } else {
9306
- $start = 0;
9307
9332
  $subTable = GetTagTable('Image::ExifTool::XMP::Main');
9308
9333
  }
9334
+ $start or $start = 0;
9309
9335
  my %dirInfo = (
9310
9336
  DataPt => \$buff,
9311
9337
  DataLen => length $buff,