exiftool_vendored 12.63.0 → 12.64.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.85';
50
+ $VERSION = '2.86';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -224,6 +224,9 @@ my %ftypLookup = (
224
224
  'crx ' => 'Canon Raw (.CRX)', #PH (CR3 or CRM; use Canon CompressorVersion to decide)
225
225
  );
226
226
 
227
+ # use extension to determine file type
228
+ my %useExt = ( GLV => 'MP4' );
229
+
227
230
  # information for int32u date/time tags (time zero is Jan 1, 1904)
228
231
  my %timeInfo = (
229
232
  Notes => 'converted from UTC to local time if the QuickTimeUTC option is set',
@@ -1006,7 +1009,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
1006
1009
  0 => 'Monoscopic',
1007
1010
  1 => 'Stereoscopic Top-Bottom',
1008
1011
  2 => 'Stereoscopic Left-Right',
1009
- 3 => 'Stereoscopic Stereo-Custom', # (provisional in spec as of 2017-10-10)
1012
+ 3 => 'Stereoscopic Stereo-Custom',
1013
+ 4 => 'Stereoscopic Right-Left',
1010
1014
  },
1011
1015
  },
1012
1016
  sv3d => {
@@ -2070,8 +2074,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2070
2074
  ValueConv => 'substr($val, 4)',
2071
2075
  ValueConvInv => '"\0\0\0\x01$val"',
2072
2076
  },
2073
- # hmtp - "\0\0\0\x01" followed by 408 bytes of zero
2074
- # vrin - "\0\0\0\x01" followed by 8 bytes of zero
2077
+ # hmtp - 412 bytes: "\0\0\0\x01" then maybe "\0\0\0\x64" and the rest zeros
2078
+ # vrin - 12 bytes: "\0\0\0\x01" followed by 8 bytes of zero
2075
2079
  # ---- GoPro ---- (ref PH)
2076
2080
  GoPr => 'GoProType', # (Hero3+)
2077
2081
  FIRM => { Name => 'FirmwareVersion', Avoid => 1 }, # (Hero4)
@@ -2920,8 +2924,8 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2920
2924
  1 => 'BT.709',
2921
2925
  2 => 'Unspecified',
2922
2926
  3 => 'For future use (3)',
2923
- 4 => 'BT.470 System M (historical)',
2924
- 5 => 'BT.470 System B, G (historical)',
2927
+ 4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
2928
+ 5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
2925
2929
  6 => 'BT.601',
2926
2930
  7 => 'SMPTE 240 M',
2927
2931
  8 => 'Linear',
@@ -7216,7 +7220,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7216
7220
  #
7217
7221
  # AudioFormat Offset Child atoms
7218
7222
  # ----------- ------ ----------------
7219
- # mp4a 52 * wave, chan, esds, SA3D(Insta360 spherical video params?,also GoPro Max)
7223
+ # mp4a 52 * wave, chan, esds, SA3D(Insta360 spherical video params?,also GoPro Max and Garmin VIRB 360)
7220
7224
  # in24 52 wave, chan
7221
7225
  # "ms\0\x11" 52 wave
7222
7226
  # sowt 52 chan
@@ -7249,11 +7253,14 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7249
7253
  chan => {
7250
7254
  Name => 'AudioChannelLayout',
7251
7255
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ChannelLayout' },
7252
- }
7256
+ },
7257
+ SA3D => { # written by Garmin VIRB360
7258
+ Name => 'SpatialAudio',
7259
+ SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SpatialAudio' },
7260
+ },
7253
7261
  # alac - 28 bytes
7254
7262
  # adrm - AAX DRM atom? 148 bytes
7255
7263
  # aabd - AAX unknown 17kB (contains 'aavd' strings)
7256
- # SA3D - written by Garmin VIRB360
7257
7264
  );
7258
7265
 
7259
7266
  # AMR decode config box (ref 3)
@@ -7601,6 +7608,20 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7601
7608
  # (arbitrarily decode only first 8 channels)
7602
7609
  );
7603
7610
 
7611
+ # spatial audio (ref https://github.com/google/spatial-media/blob/master/docs/spatial-audio-rfc.md)
7612
+ %Image::ExifTool::QuickTime::SpatialAudio = (
7613
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
7614
+ GROUPS => { 2 => 'Audio' },
7615
+ NOTES => 'Spatial Audio tags.',
7616
+ 0 => 'SpatialAudioVersion',
7617
+ 1 => { Name => 'AmbisonicType', PrintConv => { 0 => 'Periphonic' } },
7618
+ 2 => { Name => 'AmbisonicOrder', Format => 'int32u' },
7619
+ 6 => { Name => 'AmbisonicChannelOrdering', PrintConv => { 0 => 'ACN' } },
7620
+ 7 => { Name => 'AmbisonicNormalization', PrintConv => { 0 => 'SN3D' } },
7621
+ 8 => { Name => 'AmbisonicChannels', Format => 'int32u' },
7622
+ 12 => { Name => 'AmbisonicChannelMap', Format => 'int32u[$val{8}]' },
7623
+ );
7624
+
7604
7625
  # scheme type atom
7605
7626
  # ref http://xhelmboyx.tripod.com/formats/mp4-layout.txt
7606
7627
  %Image::ExifTool::QuickTime::SchemeType = (
@@ -9314,6 +9335,9 @@ sub ProcessMOV($$;$)
9314
9335
  }
9315
9336
  }
9316
9337
  $fileType or $fileType = 'MP4'; # default to MP4
9338
+ # set file type from extension if appropriate
9339
+ my $ext = $$et{FILE_EXT};
9340
+ $fileType = $ext if $ext and $useExt{$ext} and $fileType eq $useExt{$ext};
9317
9341
  $et->SetFileType($fileType, $mimeLookup{$fileType} || 'video/mp4');
9318
9342
  # temporarily set ExtractEmbedded option for CRX files
9319
9343
  $saveOptions{ExtractEmbedded} = $et->Options(ExtractEmbedded => 1) if $fileType eq 'CRX';
@@ -1378,7 +1378,7 @@ Sample: for ($i=0; ; ) {
1378
1378
  DataPos => $$start[$i],
1379
1379
  SampleTime => $time[$i],
1380
1380
  SampleDuration => $dur[$i],
1381
- }, $tagTbl) ;
1381
+ }, $tagTbl);
1382
1382
  }
1383
1383
 
1384
1384
  } elsif ($$tagTbl{$type}) {
@@ -2904,6 +2904,7 @@ sub ProcessInsta360($;$)
2904
2904
  # when the language is french? ie. "Ouest"?)
2905
2905
  $a[7] eq 'O'))
2906
2906
  {
2907
+ next if $a[3] eq 'V'; # void fixes don't have N/S E/W
2907
2908
  $et->Warn('Unrecognized INSV GPS format');
2908
2909
  last;
2909
2910
  }
@@ -637,7 +637,7 @@ numerical, and generated automatically otherwise.
637
637
  RawConv instead to return undef if it is necessary to test the
638
638
  value for validity, otherwise an undef tag may hide a
639
639
  previously defined value when the Duplicates option is not
640
- enabled. If this isn't possible (as with Composite tags where
640
+ enabled. If this isn't possible (as with Composite tags where
641
641
  the converted values of the source tags are needed), set the
642
642
  Priority to 0 to avoid taking priority over a valid tag. If
643
643
  ValueConv is not specified, the Raw value is not converted.
@@ -263,6 +263,7 @@ sub PrintInvLensSpec($;$$);
263
263
  50537 => 'Sigma 50mm F2 DG DN | C', #JR (023)
264
264
  50538 => 'Sigma 17mm F4 DG DN | C', #JR (023)
265
265
  50539 => 'Sigma 50mm F1.4 DG DN | A', #JR (023)
266
+ 50540 => 'Sigma 14mm F1.4 DG DN | A', #JR (023)
266
267
  50544 => 'Sigma 23mm F1.4 DC DN | C', #JR (023)
267
268
 
268
269
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR