exiftool_vendored 12.15.0 → 12.22.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +96 -2
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -8
  8. data/bin/exiftool +104 -59
  9. data/bin/fmt_files/gpx.fmt +1 -1
  10. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  11. data/bin/fmt_files/kml.fmt +1 -1
  12. data/bin/fmt_files/kml_track.fmt +1 -1
  13. data/bin/lib/Image/ExifTool.pm +74 -24
  14. data/bin/lib/Image/ExifTool.pod +34 -24
  15. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  16. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
  17. data/bin/lib/Image/ExifTool/Canon.pm +26 -2
  18. data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
  19. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  20. data/bin/lib/Image/ExifTool/DPX.pm +3 -3
  21. data/bin/lib/Image/ExifTool/Exif.pm +35 -16
  22. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  23. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
  24. data/bin/lib/Image/ExifTool/GPS.pm +24 -13
  25. data/bin/lib/Image/ExifTool/H264.pm +20 -5
  26. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  27. data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
  28. data/bin/lib/Image/ExifTool/MIE.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
  30. data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
  31. data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
  32. data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
  33. data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
  34. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
  35. data/bin/lib/Image/ExifTool/README +5 -4
  36. data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
  37. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  38. data/bin/lib/Image/ExifTool/Sony.pm +63 -29
  39. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  40. data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
  41. data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  43. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
  44. data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
  45. data/bin/lib/Image/ExifTool/Writer.pl +49 -14
  46. data/bin/lib/Image/ExifTool/XMP.pm +31 -5
  47. data/bin/perl-Image-ExifTool.spec +1 -1
  48. data/lib/exiftool_vendored/version.rb +1 -1
  49. metadata +48 -6
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # Description: Example ExifTool print format file to generate a GPX track log
5
5
  #
6
- # Usage: exiftool -p gpx.fmt -ee FILE [...] > out.gpx
6
+ # Usage: exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
7
7
  #
8
8
  # Requires: ExifTool version 10.49 or later
9
9
  #
@@ -4,7 +4,7 @@
4
4
  # Description: Example ExifTool print format file to generate GPX waypoints
5
5
  # with pictures
6
6
  #
7
- # Usage: exiftool -p gpx_wpt.fmt -ee FILE [...] > out.gpx
7
+ # Usage: exiftool -p gpx_wpt.fmt -ee3 FILE [...] > out.gpx
8
8
  #
9
9
  # Requires: ExifTool version 10.49 or later
10
10
  #
@@ -15,7 +15,7 @@
15
15
  # 2020/01/11 - F. Kotov Limited image preview size to 500px
16
16
  #
17
17
  # Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
18
- # 2) Add the -ee option to extract the full track from video files.
18
+ # 2) Add the -ee3 option to extract the full track from video files.
19
19
  # 3) For Google Earth to be able to find the images, the input
20
20
  # images must be specified using relative paths, and "out.kml"
21
21
  # must stay in the same directory as where the command was run.
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # From video files:
13
13
  #
14
- # exiftool -p kml.fmt -ee FILEorDIR [...] > out.kml
14
+ # exiftool -p kml.fmt -ee3 FILEorDIR [...] > out.kml
15
15
  #
16
16
  # Requires: ExifTool version 10.41 or later
17
17
  #
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
28
28
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exePath);
30
30
 
31
- $VERSION = '12.15';
31
+ $VERSION = '12.22';
32
32
  $RELEASE = '';
33
33
  @ISA = qw(Exporter);
34
34
  %EXPORT_TAGS = (
@@ -42,7 +42,7 @@ $RELEASE = '';
42
42
  DataAccess => [qw(
43
43
  ReadValue GetByteOrder SetByteOrder ToggleByteOrder Get8u Get8s Get16u
44
44
  Get16s Get32u Get32s Get64u GetFloat GetDouble GetFixed32s Write
45
- WriteValue Tell Set8u Set8s Set16u Set32u Set64u
45
+ WriteValue Tell Set8u Set8s Set16u Set32u Set64u Set64s
46
46
  )],
47
47
  Utils => [qw(GetTagTable TagTableKeys GetTagInfoList AddTagToTable HexDump)],
48
48
  Vars => [qw(%allTables @tableOrder @fileTypes)],
@@ -70,7 +70,7 @@ sub SetFileName($$;$$$);
70
70
  sub SetSystemTags($$);
71
71
  sub GetAllTags(;$);
72
72
  sub GetWritableTags(;$);
73
- sub GetAllGroups($);
73
+ sub GetAllGroups($;$);
74
74
  sub GetNewGroups($);
75
75
  sub GetDeleteGroups();
76
76
  sub AddUserDefinedTags($%);
@@ -89,6 +89,7 @@ sub Get64u($$);
89
89
  sub GetFixed64s($$);
90
90
  sub GetExtended($$);
91
91
  sub Set64u(@);
92
+ sub Set64s(@);
92
93
  sub DecodeBits($$;$);
93
94
  sub EncodeBits($$;$$);
94
95
  sub Filter($$$);
@@ -266,6 +267,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
266
267
  DIB => ['BMP', 'Device Independent Bitmap'],
267
268
  DIC => 'DICM',
268
269
  DICM => ['DICOM','Digital Imaging and Communications in Medicine'],
270
+ DIR => ['DIR', 'Directory'],
269
271
  DIVX => ['ASF', 'DivX media format'],
270
272
  DJV => 'DJVU',
271
273
  DJVU => ['AIFF', 'DjVu image'],
@@ -1129,6 +1131,13 @@ my %systemTagsNotes = (
1129
1131
  RawConv => '$self->ConvertFileName($val)',
1130
1132
  ValueConvInv => '$self->InverseFileName($val)',
1131
1133
  },
1134
+ BaseName => {
1135
+ Groups => { 1 => 'System', 2 => 'Other' },
1136
+ Notes => q{
1137
+ file name without extension. Not generated unless specifically requested or
1138
+ the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1139
+ },
1140
+ },
1132
1141
  FilePath => {
1133
1142
  Groups => { 1 => 'System', 2 => 'Other' },
1134
1143
  Notes => q{
@@ -1270,10 +1279,19 @@ my %systemTagsNotes = (
1270
1279
  WritePseudo => 1,
1271
1280
  DelCheck => q{"Can't delete"},
1272
1281
  Protected => 1, # all writable pseudo-tags must be protected!
1273
- ValueConv => 'sprintf("%.3o", $val & 0777)',
1274
- ValueConvInv => 'oct($val)',
1282
+ ValueConv => 'sprintf("%.3o", $val)',
1283
+ ValueConvInv => 'oct($val & 07777)',
1275
1284
  PrintConv => sub {
1276
- my ($mask, $str, $val) = (0400, '', oct(shift));
1285
+ my ($mask, $val) = (0400, oct(shift));
1286
+ my %types = (
1287
+ 0010000 => 'p',
1288
+ 0020000 => 'c',
1289
+ 0040000 => 'd',
1290
+ 0060000 => 'b',
1291
+ 0120000 => 'l',
1292
+ 0140000 => 's',
1293
+ );
1294
+ my $str = $types{$val & 0170000} || '-';
1277
1295
  while ($mask) {
1278
1296
  foreach (qw(r w x)) {
1279
1297
  $str .= $val & $mask ? $_ : '-';
@@ -1284,6 +1302,7 @@ my %systemTagsNotes = (
1284
1302
  },
1285
1303
  PrintConvInv => sub {
1286
1304
  my ($bit, $val, $str) = (8, 0, shift);
1305
+ $str = substr($str, 1) if length($str) == 10;
1287
1306
  return undef if length($str) != 9;
1288
1307
  while ($bit >= 0) {
1289
1308
  foreach (qw(r w x)) {
@@ -2271,7 +2290,7 @@ sub ClearOptions($)
2271
2290
  NoPDFList => undef, # flag to avoid splitting PDF List-type tag values
2272
2291
  Password => undef, # password for password-protected PDF documents
2273
2292
  PrintConv => 1, # flag to enable print conversion
2274
- QuickTimeHandler => undef, # flag to add mdir Handler to newly created Meta box
2293
+ QuickTimeHandler => 1, # flag to add mdir Handler to newly created Meta box
2275
2294
  QuickTimeUTC=> undef, # assume that QuickTime date/time tags are stored as UTC
2276
2295
  RequestAll => undef, # extract all tags that must be specifically requested
2277
2296
  RequestTags => undef, # extra tags to request (on top of those in the tag list)
@@ -2321,7 +2340,7 @@ sub ExtractInfo($;@)
2321
2340
  my $fast = $$options{FastScan} || 0;
2322
2341
  my $req = $$self{REQ_TAG_LOOKUP};
2323
2342
  my $reqAll = $$options{RequestAll} || 0;
2324
- my (%saveOptions, $reEntry, $rsize, $type, @startTime, $saveOrder);
2343
+ my (%saveOptions, $reEntry, $rsize, $type, @startTime, $saveOrder, $isDir);
2325
2344
 
2326
2345
  # check for internal ReEntry option to allow recursive calls to ExtractInfo
2327
2346
  if (ref $_[1] eq 'HASH' and $_[1]{ReEntry} and
@@ -2394,6 +2413,11 @@ sub ExtractInfo($;@)
2394
2413
  $realname =~ /\|$/ and $realname =~ s/^.*?"(.*?)".*/$1/s;
2395
2414
  my ($dir, $name) = SplitFileName($realname);
2396
2415
  $self->FoundTag('FileName', $name);
2416
+ if ($$req{basename} or
2417
+ ($reqAll and not $$self{EXCL_TAG_LOOKUP}{basename}))
2418
+ {
2419
+ $self->FoundTag('BaseName', $name =~ /(.*)\./ ? $1 : $name);
2420
+ }
2397
2421
  $self->FoundTag('Directory', $dir) if defined $dir and length $dir;
2398
2422
  if ($$req{filepath} or
2399
2423
  ($reqAll and not $$self{EXCL_TAG_LOOKUP}{filepath}))
@@ -2417,6 +2441,8 @@ sub ExtractInfo($;@)
2417
2441
  # in Windows cmd shell pipe even though it really failed
2418
2442
  $$raf{TESTED} = -1 if $filename eq '-' or $filename =~ /\|$/;
2419
2443
  $$self{RAF} = $raf;
2444
+ } elsif ($self->IsDirectory($filename)) {
2445
+ $isDir = 1;
2420
2446
  } else {
2421
2447
  $self->Error('Error opening file');
2422
2448
  }
@@ -2425,28 +2451,34 @@ sub ExtractInfo($;@)
2425
2451
  }
2426
2452
  }
2427
2453
 
2428
- while ($raf) {
2429
- my (@stat, $fileSize);
2454
+ while ($raf or $isDir) {
2455
+ my (@stat, $plainFile);
2430
2456
  if ($reEntry) {
2431
2457
  # we already set these tags
2458
+ } elsif (not $raf) {
2459
+ @stat = stat $filename;
2432
2460
  } elsif (not $$raf{FILE_PT}) {
2433
2461
  # get file size from image in memory
2434
2462
  $self->FoundTag('FileSize', length ${$$raf{BUFF_PT}});
2435
2463
  } elsif (-f $$raf{FILE_PT}) {
2436
2464
  # get file tags if this is a plain file
2437
- $fileSize = -s _;
2438
2465
  @stat = stat _;
2439
- my ($aTime, $mTime, $cTime) = $self->GetFileTime($$raf{FILE_PT});
2440
- $self->FoundTag('FileSize', $fileSize) if defined $fileSize;
2441
- $self->FoundTag('ResourceForkSize', $rsize) if $rsize;
2442
- $self->FoundTag('FileModifyDate', $mTime) if defined $mTime;
2443
- $self->FoundTag('FileAccessDate', $aTime) if defined $aTime;
2444
- my $cTag = $^O eq 'MSWin32' ? 'FileCreateDate' : 'FileInodeChangeDate';
2445
- $self->FoundTag($cTag, $cTime) if defined $cTime;
2446
- $self->FoundTag('FilePermissions', $stat[2]) if defined $stat[2];
2466
+ $plainFile = 1;
2467
+ # hack to patch Windows daylight savings time bug
2468
+ @stat[8,9,10] = $self->GetFileTime($$raf{FILE_PT}) if $^O eq 'MSWin32';
2447
2469
  } else {
2470
+ # (note that Windows directories will still show the
2471
+ # daylight savings time bug -- should fix this sometime)
2448
2472
  @stat = stat $$raf{FILE_PT};
2449
2473
  }
2474
+ my $fileSize = $stat[7];
2475
+ $self->FoundTag('FileSize', $stat[7]) if defined $stat[7];
2476
+ $self->FoundTag('ResourceForkSize', $rsize) if $rsize;
2477
+ $self->FoundTag('FileModifyDate', $stat[9]) if defined $stat[9];
2478
+ $self->FoundTag('FileAccessDate', $stat[8]) if defined $stat[8];
2479
+ my $cTag = $^O eq 'MSWin32' ? 'FileCreateDate' : 'FileInodeChangeDate';
2480
+ $self->FoundTag($cTag, $stat[10]) if defined $stat[10];
2481
+ $self->FoundTag('FilePermissions', $stat[2]) if defined $stat[2];
2450
2482
  # extract more system info if SystemTags option is set
2451
2483
  if (@stat) {
2452
2484
  my $sys = $$options{SystemTags} || ($reqAll and not defined $$options{SystemTags});
@@ -2486,11 +2518,18 @@ sub ExtractInfo($;@)
2486
2518
  if ($crDate or $mdItem or $xattr) {
2487
2519
  require Image::ExifTool::MacOS;
2488
2520
  Image::ExifTool::MacOS::GetFileCreateDate($self, $filename) if $crDate;
2489
- Image::ExifTool::MacOS::ExtractMDItemTags($self, $filename) if $mdItem;
2521
+ Image::ExifTool::MacOS::ExtractMDItemTags($self, $filename) if $mdItem and $plainFile;
2490
2522
  Image::ExifTool::MacOS::ExtractXAttrTags($self, $filename) if $xattr;
2491
2523
  }
2492
2524
  }
2493
-
2525
+ # do whatever else we can with directories, then return
2526
+ if ($isDir or (defined $stat[2] and ($stat[2] & 0170000) == 0040000)) {
2527
+ $self->FoundTag('FileType', 'DIR');
2528
+ $self->FoundTag('FileTypeExtension', '');
2529
+ $self->BuildCompositeTags() if $$options{Composite};
2530
+ $raf->Close() if $raf;
2531
+ return 1;
2532
+ }
2494
2533
  # get list of file types to check
2495
2534
  my ($tiffType, %noMagic, $recognizedExt);
2496
2535
  my $ext = $$self{FILE_EXT} = GetFileExtension($realname);
@@ -4079,7 +4118,14 @@ sub GetFileTime($$)
4079
4118
  # open file by name if necessary
4080
4119
  unless (ref $file) {
4081
4120
  local *FH;
4082
- $self->Open(\*FH, $file) or $self->Warn("GetFileTime error for '${file}'"), return ();
4121
+ unless ($self->Open(\*FH, $file)) {
4122
+ if ($self->IsDirectory($file)) {
4123
+ my @rtn = (stat $file)[8, 9, 10];
4124
+ return @rtn if defined $rtn[0];
4125
+ }
4126
+ $self->Warn("GetFileTime error for '${file}'");
4127
+ return ();
4128
+ }
4083
4129
  $file = *FH; # (not \*FH, so *FH will be kept open until $file goes out of scope)
4084
4130
  }
4085
4131
  # on Windows, try to work around incorrect file times when daylight saving time is in effect
@@ -5710,7 +5756,11 @@ sub GetUnixTime($;$)
5710
5756
  my ($timeStr, $isLocal) = @_;
5711
5757
  return 0 if $timeStr eq '0000:00:00 00:00:00';
5712
5758
  my @tm = ($timeStr =~ /^(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)(.*)/);
5713
- return undef unless @tm == 7 and eval { require Time::Local };
5759
+ return undef unless @tm == 7;
5760
+ unless (eval { require Time::Local }) {
5761
+ warn "Time::Local is not installed\n";
5762
+ return undef;
5763
+ }
5714
5764
  my ($tzStr, $tzSec) = (pop(@tm), 0);
5715
5765
  # use specified timezone offset (if given) instead of local system time
5716
5766
  # if we are converting a local time value
@@ -5908,7 +5958,7 @@ sub ProcessTrailers($$)
5908
5958
  for (;;) { # loop through all trailers
5909
5959
  my ($proc, $outBuff);
5910
5960
  if ($dirName eq 'Insta360') {
5911
- require "Image/ExifTool/QuickTimeStream.pl";
5961
+ require 'Image/ExifTool/QuickTimeStream.pl';
5912
5962
  $proc = 'Image::ExifTool::QuickTime::ProcessInsta360';
5913
5963
  } else {
5914
5964
  require "Image/ExifTool/$dirName.pm";
@@ -626,7 +626,10 @@ XMP to be extracted.
626
626
  Flag to extract information from embedded documents in EPS files, embedded
627
627
  EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF
628
628
  images in JPEG and MPO files, timed metadata in videos, and the resource
629
- fork of Mac OS files. Default is undef.
629
+ fork of Mac OS files. A setting of 2 also causes the H264 video stream in
630
+ MP4 files to be parsed until the first SEI message is decoded, or 3 to parse
631
+ the entire H264 stream in MP4 videos and the entire M2TS file to look for
632
+ any unlisted program containing GPS metadata. Default is undef.
630
633
 
631
634
  =item FastScan
632
635
 
@@ -735,8 +738,8 @@ group names.
735
738
 
736
739
  =item HexTagIDs
737
740
 
738
- Use hexadecimal instead of decimal for the family 7 group names of tags with
739
- numerical ID's.
741
+ Return hexadecimal instead of decimal for the family 7 group names of tags
742
+ with numerical ID's.
740
743
 
741
744
  =item HtmlDump
742
745
 
@@ -841,8 +844,9 @@ print conversion for writing. Default is 1.
841
844
 
842
845
  Flag set to add an 'mdir' Handler to a newly created Meta box when adding
843
846
  QuickTime ItemList tags. Adobe Bridge does not add this Handler, but it is
844
- commonly found in samples from other software, so it is possible that this
845
- could affect the interoperability of ItemList tags. Default is undef.
847
+ commonly found in samples from other software, and it has been reported that
848
+ Apple QuickTime Player and Photos.apps will ignore ItemList tags if this is
849
+ missing. Default is 1.
846
850
 
847
851
  =item QuickTimeUTC
848
852
 
@@ -2047,6 +2051,7 @@ The group family numbers are currently available:
2047
2051
  4) Instance Number (eg. Copy1, Copy2, Copy3...)
2048
2052
  5) Metadata Path (eg. JPEG-APP1-IFD0-ExifIFD)
2049
2053
  6) EXIF/TIFF Format (eg. int8u, int32u, undef, string)
2054
+ 7) Tag ID (eg. ID-271, ID-rights, ID-a9aut)
2050
2055
 
2051
2056
  Families 0 and 1 are based on the file structure, and are similar except
2052
2057
  that family 1 is more specific and sub-divides some groups to give more
@@ -2090,13 +2095,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
2090
2095
  type of the extracted value. Generated only if the L</SaveFormat> option is
2091
2096
  used when extracting.
2092
2097
 
2093
- Family 7 is used for tag ID's. The group names are "ID-" followed by the
2094
- tag ID with characters other than [-_A-Za-z0-9] converted to hex. Numerical
2095
- tag ID's are given in hex if the L</HexTagIDs> option is set. When
2096
- specifying a family 7 group name, numerical ID's may be in hex or decimal,
2097
- and non-numercal ID's may or may not have characters other than
2098
- [-_A-Za-z0-9] converted to hex. Note that unlike other group names, family
2099
- 7 group names are case sensitive (except for the leading "ID-").
2098
+ Family 7 is used for tag ID's. The group names are the actual tag ID's,
2099
+ with a leading "ID-" string. Non-numerical ID's have characters other than
2100
+ [-_A-Za-z0-9] converted to hex. Numerical tag ID's are returned in hex if
2101
+ the L</HexTagIDs> option is set, otherwise decimal is used. When specifying
2102
+ a family 7 group name, numerical ID's may be in hex or decimal, and
2103
+ non-numerical ID's may or may not have characters other than [-_A-Za-z0-9]
2104
+ converted to hex. Note that unlike other group names, the tag ID's of
2105
+ family 7 group names are case sensitive (but the leading "ID-" is not).
2100
2106
 
2101
2107
  See L</GetAllGroups [static]> for complete lists of group names.
2102
2108
 
@@ -2253,7 +2259,7 @@ Get list of all group names in specified family.
2253
2259
 
2254
2260
  =item Inputs:
2255
2261
 
2256
- 0) Group family number (0-4)
2262
+ 0) Group family number (0-7)
2257
2263
 
2258
2264
  =item Return Values:
2259
2265
 
@@ -2342,12 +2348,16 @@ rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
2342
2348
 
2343
2349
  =item Family 7 (Tag ID):
2344
2350
 
2345
- ID-xxx (where xxx is the tag ID. Numerical ID's are given in hex with a
2346
- leading "0x" if the HexTagIDs option is set, as are characters in
2347
- non-numerical ID's which are not valid in a group name)
2351
+ ID-xxx (Where xxx is the tag ID. Numerical ID's are returned in hex with a
2352
+ leading "0x" if the HexTagIDs option is set, or decimal otherwise.
2353
+ Characters in non-numerical ID's which are not valid in a group name are
2354
+ returned as 2 hex digits.)
2348
2355
 
2349
2356
  =back
2350
2357
 
2358
+ Note: This function may also be called as an ExifTool member function to
2359
+ allow the HexTagIDs option to be set when retrieving family 7 group names.
2360
+
2351
2361
  =head2 GetDeleteGroups [static]
2352
2362
 
2353
2363
  Get list of all deletable group names.
@@ -2365,14 +2375,14 @@ None.
2365
2375
  A list of deletable group names in alphabetical order. The current list of
2366
2376
  deletable group names is:
2367
2377
 
2368
- AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2, APP3,
2369
- APP4, APP5, APP6, APP7, APP8, APP9, Adobe, Audio, Author, CIFF, Camera,
2370
- CanonVRD, Document, Ducky, EXIF, ExifIFD, ExifTool, File, FlashPix,
2371
- FotoStation, GPS, GlobParamIFD, ICC_Profile, IFD0, IFD1, IPTC, Image,
2372
- InteropIFD, JFIF, Jpeg2000, Location, MIE, MPF, MakerNotes, Meta, MetaIFD,
2373
- NikonCapture, Other, PDF, PDF-update, PNG, PNG-pHYs, PhotoMechanic,
2374
- Photoshop, Preview, PrintIM, Printing, RMETA, RSRC, SubIFD, Time, Trailer,
2375
- Video, XML, XML-*, XMP, XMP-*
2378
+ Adobe, AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2,
2379
+ APP3, APP4, APP5, APP6, APP7, APP8, APP9, Audio, Author, Camera, CanonVRD,
2380
+ CIFF, Document, Ducky, EXIF, ExifIFD, ExifTool, File, FlashPix, FotoStation,
2381
+ GlobParamIFD, GPS, ICC_Profile, IFD0, IFD1, Image, Insta360, InteropIFD,
2382
+ IPTC, ItemList, JFIF, Jpeg2000, Keys, Location, MakerNotes, Meta, MetaIFD,
2383
+ Microsoft, MIE, MPF, NikonCapture, Other, PDF, PDF-update, PhotoMechanic,
2384
+ Photoshop, PNG, PNG-pHYs, Preview, PrintIM, Printing, QuickTime, RMETA,
2385
+ RSRC, SubIFD, Time, Trailer, UserData, Video, XML, XML-*, XMP, XMP-*
2376
2386
 
2377
2387
  To schedule a group for deletion, call L</SetNewValue> with a tag name like
2378
2388
  'EXIF:*' and an undefined tag value.
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::PLIST;
17
17
 
18
- $VERSION = '1.04';
18
+ $VERSION = '1.05';
19
19
 
20
20
  # Apple iPhone metadata (ref PH)
21
21
  %Image::ExifTool::Apple::Main = (
@@ -72,7 +72,8 @@ $VERSION = '1.04';
72
72
  # 0x000f - int32s: 2,3
73
73
  # 0x0010 - int32s: 1
74
74
  0x0011 => {
75
- Name => 'ContentIdentifier', #forum8750
75
+ Name => 'MediaGroupUUID', #NealKrawetz private communication
76
+ # (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
76
77
  Writable => 'string',
77
78
  },
78
79
  # 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.41';
38
+ $VERSION = '3.44';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -141,6 +141,9 @@ my %formatOK = (
141
141
  signed => 1,
142
142
  unsigned => 1,
143
143
  utf8 => 1,
144
+ Unicode => 1, # (Microsoft Xtra)
145
+ GUID => 1, # (Microsoft Xtra)
146
+ vt_filetime => 1, # (Microsoft Xtra)
144
147
  );
145
148
 
146
149
  # Descriptions for the TagNames documentation
@@ -310,9 +313,10 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
310
313
  C<real> is a floating point number, C<rational> is entered as a floating
311
314
  point number but stored as two C<integer> strings separated by a '/'
312
315
  character, C<date> is a date/time string entered in the format "YYYY:mm:dd
313
- HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False", C<struct>
314
- indicates a structured tag, and C<lang-alt> is a tag that supports alternate
315
- languages.
316
+ HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False" (but "true"
317
+ and "false" may be written as a ValueConv value for compatibility with
318
+ non-conforming applications), C<struct> indicates a structured tag, and
319
+ C<lang-alt> is a tag that supports alternate languages.
316
320
 
317
321
  When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
318
322
  option is used. Otherwise the corresponding I<Flattened> tags, indicated by
@@ -430,11 +434,13 @@ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
430
434
  finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
431
435
  but this order may be changed by setting the PREFERRED level of the
432
436
  appropriate table in the config file (see
433
- L<example.config|../config.html#PREF> in the full distribution for
434
- an example). ExifTool currently writes only top-level metadata in
435
- QuickTime-based files; it extracts other track-specific and timed
436
- metadata, but can not yet edit tags in these locations (with the
437
- exception of track-level date/time tags).
437
+ L<example.config|../config.html#PREF> in the full distribution for an
438
+ example). Note that some tags with the same name but different ID's may
439
+ exist in the same location, but the family 7 group names may be used to
440
+ differentiate these. ExifTool currently writes only top-level metadata in
441
+ QuickTime-based files; it extracts other track-specific and timed metadata,
442
+ but can not yet edit tags in these locations (with the exception of
443
+ track-level date/time tags).
438
444
 
439
445
  Alternate language tags may be accessed for
440
446
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
@@ -459,8 +465,8 @@ local time when extracting.
459
465
 
460
466
  When writing string-based date/time tags, the system time zone is added if
461
467
  the PrintConv option is enabled and no time zone is specified. This is
462
- because Apple software may display a crazy values if the time zone is
463
- missing for some tags.
468
+ because Apple software may display crazy values if the time zone is missing
469
+ for some tags.
464
470
 
465
471
  See
466
472
  L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
@@ -698,10 +704,14 @@ my %shortcutNotes = (
698
704
  large binary data tags which may be excluded to reduce memory usage if
699
705
  memory limitations are a problem
700
706
  },
707
+ 'ls-l' => q{
708
+ mimics columns shown by Unix "ls -l" command. Includes some tags which are
709
+ extracted only if the API L<SystemTags|../ExifTool.html#SystemTags> option
710
+ is enabled
711
+ },
701
712
  );
702
713
 
703
-
704
- # same thing for RIFF INFO tags found in the EXIF spec
714
+ # lookup for RIFF INFO tags which are found in the EXIF spec
705
715
  my %riffSpec = (
706
716
  IARL => 1, ICRD => 1, IGNR => 1, IPLT => 1, ISRC => 1,
707
717
  IART => 1, ICRP => 1, IKEY => 1, IPRD => 1, ISRF => 1,
@@ -1319,6 +1329,7 @@ TagID: foreach $tagID (@keys) {
1319
1329
  my $count = $$tagInfo{Count} || 1;
1320
1330
  # adjust count to Writable size if different than Format
1321
1331
  if ($writable and $format and $writable ne $format and
1332
+ $writable ne 'string' and $format ne 'string' and
1322
1333
  $Image::ExifTool::Exif::formatNumber{$writable} and
1323
1334
  $Image::ExifTool::Exif::formatNumber{$format})
1324
1335
  {