exiftool_vendored 13.26.0 → 13.27.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: 7ade24a22d85fc4d797e0fa157ccbcab31f7ef49a375c50849f76e075e1366ea
4
- data.tar.gz: e4f4a5da9a42324b16bc953f1f326abf2700f57e9f15d58661f3863cf359ea01
3
+ metadata.gz: fb0a184eb27a7f2bd365b24473d079bf59c21bfb5d18e4322438164364218151
4
+ data.tar.gz: 39f8672fe231f2d0588920382a7cc7b5d36199a03c7a86f43d0a0161ec5ba2f8
5
5
  SHA512:
6
- metadata.gz: a3bd7b0e0211feb8854f98a1de7956776cb7dcfc36eb4f224a333a7bf6912e50d433af4c806ca3bde62100a3eb99dd8704862da9092e06a2bc831d5bbba41b3c
7
- data.tar.gz: c19b405e58717505f77791c5115bc67d98651b48d4872d25270ecda79ac42a00740495ec324616650c33d3c9931763a1ddb31722318b8ab9071d3476b3033361
6
+ metadata.gz: 4c618366df0c65fff73241fe27a143eacb46a64280866edc3ba23f1b7fc8a5765d605029afd58fce678e080bdbd951989ab460336623afebee96ed1e0c61d891
7
+ data.tar.gz: 93d27263a8c922cea0bef3eec89779517dd040539cf9fae2e3712823fe5d48148ca86663ed469300b3677c1a99a3c9ccfc7564bbdd57150894682424db23621f
data/bin/Changes CHANGED
@@ -7,6 +7,18 @@ RSS feed: https://exiftool.org/rss.xml
7
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
+ Apr. 8, 2025 - Version 13.27
11
+
12
+ - Decode AF points for the Pentax K-3III
13
+ - Decode timed GPS from a variant of the Rove R2-4K dashcam
14
+ - Properly decode SensorTemperature for Pentax K3-III
15
+ - Patched PCAP test to avoid potential failure
16
+ - Patched to avoid potential "not a HASH reference" error when writing MOV/MP4
17
+ videos
18
+ - Fixed issue which could result in "uninitialized value" errors when reading
19
+ one type of timed GPS from MP4 videos
20
+ - Fixed problem writing MotionPhotoVideo in MP4 files
21
+
10
22
  Mar. 31, 2025 - Version 13.26
11
23
 
12
24
  - Added a new Olympus CameraType (thanks Herb)
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.26"
53
+ "version" : "13.27"
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.26'
34
+ version: '13.27'
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.26.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.26
112
+ gzip -dc Image-ExifTool-13.27.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.27
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
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.26';
14
+ my $version = '13.27';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -4289,6 +4289,7 @@ sub ScanDir($$;$)
4289
4289
  next unless $recurse;
4290
4290
  # ignore directories starting with "." by default
4291
4291
  next if $file =~ /^\./ and $recurse == 1;
4292
+ # note: this doesn't work in Windows cmd (see forum17243)
4292
4293
  next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path);
4293
4294
  ScanDir($et, $path, $list);
4294
4295
  last if $end;
@@ -6053,7 +6054,7 @@ with this command:
6053
6054
 
6054
6055
  produces output like this:
6055
6056
 
6056
- -- Generated by ExifTool 13.26 --
6057
+ -- Generated by ExifTool 13.27 --
6057
6058
  File: a.jpg - 2003:10:31 15:44:19
6058
6059
  (f/5.6, 1/60s, ISO 100)
6059
6060
  File: b.jpg - 2006:05:23 11:57:38
@@ -6550,9 +6551,10 @@ name, or a full path, and is case sensitive. If a full path is specified,
6550
6551
  it must match the Directory tag exactly to be ignored. Use multiple B<-i>
6551
6552
  options to ignore more than one directory name. A special I<DIR> value of
6552
6553
  C<SYMLINKS> may be specified to avoid recursing into directories which are
6553
- symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
6554
- may be used to ignore files with names that start with a "." (ie. hidden
6555
- files on Unix systems) when scanning a directory.
6554
+ symbolic links when the B<-r> option is used (note this does not currently
6555
+ work under Windows). As well, a value of C<HIDDEN> may be used to ignore
6556
+ files with names that start with a "." (ie. hidden files on Unix systems)
6557
+ when scanning a directory.
6556
6558
 
6557
6559
  =item B<-if>[I<NUM>] I<EXPR>
6558
6560
 
@@ -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.48';
61
+ $VERSION = '3.49';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -737,6 +737,19 @@ my %filterSettings = (
737
737
  52 => ['Toning2', '%+d'], #31 Extract Color (-3-+3)
738
738
  );
739
739
 
740
+ # order of K-3iii AF points
741
+ my @k3iiiAF = qw(C3 C4 C5 C6 C7 D3 D4 D5 D6 D7 E3 E4 E5 E6 E7 F3 F4 F5 F6 F7
742
+ G3 G4 G5 G6 G7 E1 E9 D2 D8 E2 E8 F2 F8 C2 C8 G2 G8 D1 D9 F1 F9);
743
+
744
+ # print AF Point names
745
+ sub AFPointsK3iii($;$)
746
+ {
747
+ my @a = split ' ', shift;
748
+ my @pts;
749
+ $a[$_] and push @pts, $k3iiiAF[$_] || "Unknown($_)" foreach 0..$#a;
750
+ return @pts ? join '.', sort @pts : '(none)';
751
+ }
752
+
740
753
  # decoding for Pentax Firmware ID tags - PH
741
754
  my %pentaxFirmwareID = (
742
755
  # the first 2 numbers are the firmware version, I'm not sure what the second 2 mean
@@ -5017,6 +5030,31 @@ my %binaryDataAttrs = (
5017
5030
  20 => 'Mid-right',
5018
5031
  },
5019
5032
  },
5033
+ 0x14 => {
5034
+ Name => 'AFPointValues',
5035
+ Format => 'int16uRev[61]',
5036
+ Unknown => 1,
5037
+ Notes => 'some unknown values related to each AFPoint',
5038
+ # order is the same as AFPoints below, but there is an additional value for the
5039
+ # following AFPoints in this order starting at index 28 in the array: C3 C4 C5 C6 C7
5040
+ # D3 D4 D5 D6 D7 E3 E4 E5 E6 E7 F3 F4 F5 F6 F7 G3 G4 G5 G6 G7 E1 E9 D2 D8 E2 E8 F2 F8
5041
+ # (values are int16s stored in reversed byte order)
5042
+ ValueConv => 'my @a=split " ",$val;$_>32767 and $_-=65536 foreach @a;join " ",@a',
5043
+ },
5044
+ 0x12a => { # byte has a value of 2 if corresponding AF point is selected
5045
+ Name => 'AFPoints',
5046
+ Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
5047
+ Format => 'int8u[41]',
5048
+ PrintConv => \&AFPointsK3iii,
5049
+ },
5050
+ 0x18f => { # byte has a value of 1 if corresponding AF point is in focus maybe?
5051
+ # usually the same points as AFPoints above, but not always
5052
+ Name => 'AFPointsUnknown',
5053
+ Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
5054
+ Unknown => 1,
5055
+ Format => 'int8u[41]',
5056
+ PrintConv => \&AFPointsK3iii,
5057
+ },
5020
5058
  0x1fa => {
5021
5059
  Name => 'LiveView',
5022
5060
  Notes => 'decoded only for the K-3 III',
@@ -5740,6 +5778,7 @@ my %binaryDataAttrs = (
5740
5778
  # more quickly than CameraTemperature when shooting video.)
5741
5779
  0x0c => {
5742
5780
  Name => 'SensorTemperature', #forum6677 (was CameraTemperature2)
5781
+ Condition => '$$self{Model} !~ /K-3 Mark III/', # (and maybe others?)
5743
5782
  Format => 'int16s',
5744
5783
  ValueConv => '$val / 10',
5745
5784
  ValueConvInv => '$val * 10',
@@ -5748,6 +5787,7 @@ my %binaryDataAttrs = (
5748
5787
  },
5749
5788
  0x0e => {
5750
5789
  Name => 'SensorTemperature2', #forum6677 (was CameraTemperature3)
5790
+ Condition => '$$self{Model} ne "K-3 Mark III"', # (and maybe others?)
5751
5791
  Format => 'int16s',
5752
5792
  ValueConv => '$val / 10',
5753
5793
  ValueConvInv => '$val * 10',
@@ -5769,6 +5809,15 @@ my %binaryDataAttrs = (
5769
5809
  PrintConvInv => '$val=~s/ ?c$//i; $val',
5770
5810
  },
5771
5811
  # 0x18,0x1a,0x1c,0x1e = int16u[4] BlackPoint - PH
5812
+ 0x2a => {
5813
+ Name => 'SensorTemperature',
5814
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5815
+ Format => 'int16s',
5816
+ ValueConv => '$val / 10',
5817
+ ValueConvInv => '$val * 10',
5818
+ PrintConv => 'sprintf("%.1f C", $val)',
5819
+ PrintConvInv => '$val=~s/ ?c$//i; $val',
5820
+ },
5772
5821
  );
5773
5822
 
5774
5823
  # currently unknown info
@@ -945,7 +945,7 @@ my %userDefined = (
945
945
  Notes => 'MP4-format video saved in Samsung motion-photo HEIC images.',
946
946
  Binary => 1,
947
947
  # note that this may be written and/or deleted, but can't currently be added back again
948
- Writable => 1,
948
+ Writable => 'undef',
949
949
  },
950
950
  # '35AX'? - seen "AT" (Yada RoadCam Pro 4K dashcam)
951
951
  cust => 'CustomInfo', # 70mai A810
@@ -111,9 +111,8 @@ my %insvLimit = (
111
111
  The tags below are extracted from timed metadata in QuickTime and other
112
112
  formats of video files when the ExtractEmbedded option is used. Although
113
113
  most of these tags are combined into the single table below, ExifTool
114
- currently reads 103 different types of timed GPS metadata from video files.
114
+ currently reads 104 different types of timed GPS metadata from video files.
115
115
  },
116
- VARS => { NO_ID => 1 },
117
116
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
118
117
  GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
119
118
  GPSLatitude2 => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")' },
@@ -336,11 +335,25 @@ my %insvLimit = (
336
335
  Groups => { 0 => 'Trailer', 1 => 'Insta360' }, # (so these groups will appear in the -listg options)
337
336
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::INSV_MakerNotes' },
338
337
  },
339
- ssmd => { # Chigee AIO-5 dashcam
340
- Name => 'PreviewImage',
338
+ ssmd => [{
339
+ Name => 'RoveGPS', # Rove R2-4K new model
340
+ # double value of GPSLatitude is 4294967295 (00 00 e0 ff ff ff ef 41) for no GPS
341
+ Condition => 'length $$valPt == 32 and $$valPt !~ /^\0\0\xe0\xff\xff\xff\xef\x41/',
342
+ SubDirectory => {
343
+ TagTable => 'Image::ExifTool::QuickTime::RoveGPS',
344
+ ByteOrder => 'Little-Endian',
345
+ },
346
+ },{
347
+ Name => 'Accelerometer', # Rove R2-4K new model
348
+ Condition => 'length $$valPt == 12',
349
+ Format => 'float',
350
+ ByteOrder => 'Little-Endian',
351
+ },{
352
+ Name => 'PreviewImage', # Chigee AIO-5 dashcam
353
+ Condition => '$$valPt =~ /^\xff\xd8\xff/',
341
354
  Groups => { 2 => 'Preview' },
342
355
  RawConv => '$self->ValidateImage(\$val,$tag)',
343
- },
356
+ }],
344
357
  djmd => { # (DJI AC003 Osmo Action 4 cam)
345
358
  Name => 'DJIMetadata',
346
359
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::Protobuf' },
@@ -358,6 +371,45 @@ my %insvLimit = (
358
371
  MagneticVariation => { }, # (from LIGOGPSINFO)
359
372
  );
360
373
 
374
+ # accelerometer from newer Rove R2-4K cam
375
+ %Image::ExifTool::QuickTime::RoveGPS = (
376
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
377
+ GROUPS => { 2 => 'Location' },
378
+ FIRST_ENTRY => 0,
379
+ 0 => {
380
+ Name => 'GPSLatitude',
381
+ Format => 'double',
382
+ ValueConv => 'my $deg = int($val/100); $val = $deg + ($val - $deg * 100) / 60',
383
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
384
+ },
385
+ 8 => {
386
+ Name => 'GPSLongitude',
387
+ Format => 'double',
388
+ ValueConv => 'my $deg = int($val/100); $val = $deg + ($val - $deg * 100) / 60',
389
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
390
+ },
391
+ 20 => {
392
+ Name => 'GPSSpeed',
393
+ Format => 'int16u',
394
+ ValueConv => '$val * 1.852', # convert from knots to km/h
395
+ },
396
+ 22 => {
397
+ Name => 'GPSDateTime',
398
+ Description => 'GPS Date/Time',
399
+ Groups => { 2 => 'Time' },
400
+ Format => 'int8u[6]',
401
+ ValueConv => q{
402
+ my @v = split ' ', $val;
403
+ $v[0] += 2000;
404
+ sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @v);
405
+ },
406
+ PrintConv => '$self->ConvertDateTime($val)',
407
+ },
408
+ # Seen this in the next 4 bytes:
409
+ # ff 01 01 00 - good GPS?
410
+ # ff 00 ff ff - no GPS?
411
+ );
412
+
361
413
  # tags found in 'camm' type 0 timed metadata (ref 4)
362
414
  %Image::ExifTool::QuickTime::camm0 = (
363
415
  PROCESS_PROC => \&ProcessCAMM,
@@ -2351,12 +2403,12 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
2351
2403
  }
2352
2404
  SetByteOrder($oldOrder);
2353
2405
  return $$et{DOC_NUM} ? 1 : 0 if $done;
2354
- return 0 if defined $yr and $mon < 1 or $mon > 12; # quick sanity check
2406
+ return 0 if defined $yr and ($mon < 1 or $mon > 12); # quick sanity check
2355
2407
  #
2356
2408
  # save tag values extracted by above code
2357
2409
  #
2358
2410
  FoundSomething($et, $tagTbl, $$dirInfo{SampleTime}, $$dirInfo{SampleDuration});
2359
- $sec = '0' . $sec unless $sec =~ /^\d{2}/; # pad integer part of seconds to 2 digits
2411
+ $sec = '0' . $sec if defined $sec and $sec !~ /^\d{2}/; # pad integer part of seconds to 2 digits
2360
2412
  if (defined $yr) {
2361
2413
  $yr += 2000 if $yr < 2000;
2362
2414
  my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%sZ',$yr,$mon,$day,$hr,$min,$sec);
@@ -2368,8 +2420,8 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
2368
2420
  if (defined $lat and defined $lon) {
2369
2421
  # lat/long are in DDDMM.MMMM format unless $ddd is set
2370
2422
  ConvertLatLon($lat, $lon) unless $ddd;
2371
- $et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
2372
- $et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
2423
+ $et->HandleTag($tagTbl, GPSLatitude => $lat * (($latRef and $latRef eq 'S') ? -1 : 1));
2424
+ $et->HandleTag($tagTbl, GPSLongitude => $lon * (($lonRef and $lonRef eq 'W') ? -1 : 1));
2373
2425
  }
2374
2426
  $et->HandleTag($tagTbl, GPSAltitude => $alt) if defined $alt;
2375
2427
  $et->HandleTag($tagTbl, GPSSpeed => $spd) if defined $spd;
@@ -982,6 +982,11 @@ numerical, and generated automatically otherwise.
982
982
  for use when ExtractInfo is called with the ReEntry flag from
983
983
  inside the RawConv of a tag.
984
984
 
985
+ ByteOrder : [Non-writable tags extracted with HandleTag and writable EXIF
986
+ offset-pair tags only] Specifies byte order if tag value is
987
+ stored with a constant byte order that is different from that
988
+ of the parent directory.
989
+
985
990
  TagID : [reserved] Used internally to save the table key for this tag.
986
991
  Note: For XMP tables this corresponds to the XMP property
987
992
  name, but the table key may have a full XMP namespace prefix
@@ -1071,8 +1076,8 @@ numerical, and generated automatically otherwise.
1071
1076
  ByteOrder : Specifies byte ordering if different than than the rest of the
1072
1077
  file. Must be either BigEndian, LittleEndian or Unknown. If
1073
1078
  Unknown is specified, the byte order will be determined from
1074
- the directory count (however, this can not be done if OffsetPt
1075
- is specified).
1079
+ the directory count for EXIF (however, this can not be done if
1080
+ OffsetPt is specified).
1076
1081
 
1077
1082
  Validate : If given, specifies Perl expression which is used to validate
1078
1083
  the subdirectory data (regardless of Validate option setting).
@@ -785,7 +785,7 @@ my %tagLookup = (
785
785
  'afpointmode' => { 374 => 0x3 },
786
786
  'afpointposition' => { 119 => 0x2021, 358 => 0x4d },
787
787
  'afpointregistration' => { 88 => 0x7 },
788
- 'afpoints' => { 190 => 0x10 },
788
+ 'afpoints' => { 190 => 0x10, 369 => 0x12a },
789
789
  'afpointsel' => { 329 => 0xb, 330 => 0xb, 331 => 0xb, 332 => 0xb },
790
790
  'afpointselected' => { 191 => 0xd, 334 => 0x305, 394 => 0xe, 445 => 0x15, 446 => 0x14, 447 => [0x14,0x1c], 462 => 0x201e },
791
791
  'afpointselected2' => { 374 => 0x4 },
@@ -797,10 +797,12 @@ my %tagLookup = (
797
797
  'afpointspotmetering' => { 89 => 0xd },
798
798
  'afpointsselected' => { 200 => 0x1c, 201 => 0x1c, 370 => '4.1', 497 => 0x4 },
799
799
  'afpointsspecial' => { 370 => '4.2' },
800
+ 'afpointsunknown' => { 369 => 0x18f },
800
801
  'afpointsunknown1' => { 369 => 0x0 },
801
802
  'afpointsunknown2' => { 369 => 0x2 },
802
803
  'afpointsused' => { 200 => 0x8, 201 => [0x1c,0x8], 202 => 0x8, 203 => 0xa, 204 => 0xa, 441 => [0x10,0x16e] },
803
804
  'afpointswitching' => { 2 => 0x4 },
805
+ 'afpointvalues' => { 369 => 0x14 },
804
806
  'afpredictor' => { 369 => 0x4 },
805
807
  'afresponse' => { 246 => 0xad },
806
808
  'afresult' => { 339 => 0x1038 },
@@ -6466,7 +6468,7 @@ my %tagLookup = (
6466
6468
  'sensorserialnumber' => { 145 => 0x9ce },
6467
6469
  'sensorshield' => { 253 => 0x76b, 254 => 0x77b, 255 => 0x66d, 256 => 0x69d, 257 => 0x705 },
6468
6470
  'sensorsize' => { 163 => 'SensorSize', 394 => 0x35 },
6469
- 'sensortemperature' => { 337 => 0x1500, 339 => 0x1007, 399 => 0xc, 403 => 0x210, 438 => [0x39,0x55] },
6471
+ 'sensortemperature' => { 337 => 0x1500, 339 => 0x1007, 399 => [0xc,0x2a], 403 => 0x210, 438 => [0x39,0x55] },
6470
6472
  'sensortemperature2' => { 399 => 0xe, 403 => 0x211 },
6471
6473
  'sensortopborder' => { 145 => 0x3ec },
6472
6474
  'sensortopmargin' => { 403 => 0x10b },
@@ -12041,6 +12043,7 @@ my %tagExists = (
12041
12043
  'rotationxyz' => 1,
12042
12044
  'rotmode' => 1,
12043
12045
  'roundtripversion' => 1,
12046
+ 'rovegps' => 1,
12044
12047
  'rowcount' => 1,
12045
12048
  'rowinterleavefactor' => 1,
12046
12049
  'rsrc' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28431 tags, with 17665 unique tag names.
15
+ They contain a total of 28440 tags, with 17667 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -20666,6 +20666,9 @@ Flash information tags for the K10D, K20D and K200D.
20666
20666
  6 AFDefocus int8u
20667
20667
  7 AFIntegrationTime int8u
20668
20668
  11 AFPointsInFocus int8u
20669
+ 20 AFPointValues? no
20670
+ 298 AFPoints int8u[41]~
20671
+ 399 AFPointsUnknown? int8u[41]~
20669
20672
  506 LiveView int8u
20670
20673
  509 AFHold int8u
20671
20674
 
@@ -20902,6 +20905,7 @@ sensors are located in the camera.
20902
20905
  14 SensorTemperature2 int16s
20903
20906
  20 CameraTemperature4 int16s
20904
20907
  22 CameraTemperature5 int16s
20908
+ 42 SensorTemperature int16s
20905
20909
 
20906
20910
  =head3 Pentax UnknownInfo Tags
20907
20911
 
@@ -30318,7 +30322,7 @@ for the official QuickTime specification.
30318
30322
  'meta' Meta QuickTime Meta
30319
30323
  'moof' MovieFragment QuickTime MovieFragment
30320
30324
  'moov' Movie QuickTime Movie
30321
- 'mpvd' MotionPhotoVideo yes
30325
+ 'mpvd' MotionPhotoVideo undef
30322
30326
  'nbmt' NextbaseMeta QuickTime Stream
30323
30327
  'pict' PreviewPICT no
30324
30328
  'pnot' Preview QuickTime Preview
@@ -30353,81 +30357,83 @@ for the official QuickTime specification.
30353
30357
  The tags below are extracted from timed metadata in QuickTime and other
30354
30358
  formats of video files when the ExtractEmbedded option is used. Although
30355
30359
  most of these tags are combined into the single table below, ExifTool
30356
- currently reads 103 different types of timed GPS metadata from video files.
30360
+ currently reads 104 different types of timed GPS metadata from video files.
30357
30361
 
30358
- Tag Name Writable
30359
- -------- --------
30360
- Accelerometer no
30361
- AccelerometerData no
30362
- AngularVelocity no
30363
- CTMD Canon CTMD
30364
- CameraDateTime no
30365
- CameraModel no
30366
- Car no
30367
- DJIDebug? DJI Protobuf
30368
- DJIMetadata DJI Protobuf
30369
- DateTimeOriginal no
30370
- DateTimeStamp no
30371
- Distance no
30372
- ExposureCompensation no
30373
- ExposureTime no
30374
- FNumber no
30375
- FrameNumber no
30376
- GPSAltitude no
30377
- GPSDOP no
30378
- GPSDateTime no
30379
- GPSLatitude no
30380
- GPSLatitude2 no
30381
- GPSLongitude no
30382
- GPSLongitude2 no
30383
- GPSSatellites no
30384
- GPSSpeed no
30385
- GPSSpeedRef no
30386
- GPSTimeStamp no
30387
- GPSTrack no
30388
- GPSTrackRef no
30389
- GSensor no
30390
- INSV QuickTime INSV_MakerNotes
30391
- ISO no
30392
- JpgFromRaw no
30393
- KiloCalories no
30394
- MagneticVariation no
30395
- PreviewImage no
30396
- PreviewInfo QuickTime PreviewInfo
30397
- RVMI_gReV QuickTime RVMI_gReV
30398
- RVMI_sReV QuickTime RVMI_sReV
30399
- RawGSensor no
30400
- SampleDateTime no
30401
- SampleDuration no
30402
- SampleTime no
30403
- Text no
30404
- TimeCode no
30405
- Unknown00? no
30406
- Unknown01? no
30407
- Unknown02? no
30408
- Unknown03? no
30409
- UserLabel no
30410
- VerticalSpeed no
30411
- VideoTimeStamp no
30412
- camm0 QuickTime camm0
30413
- camm1 QuickTime camm1
30414
- camm2 QuickTime camm2
30415
- camm3 QuickTime camm3
30416
- camm4 QuickTime camm4
30417
- camm5 QuickTime camm5
30418
- camm6 QuickTime camm6
30419
- camm7 QuickTime camm7
30420
- fdsc GoPro fdsc
30421
- gpmd_Kingslim QuickTime Stream
30422
- gpmd_Rove QuickTime Stream
30423
- gpmd_FMAS QuickTime Stream
30424
- gpmd_Wolfbox QuickTime Stream
30425
- gpmd_GoPro GoPro GPMF
30426
- marl GM marl
30427
- mebx QuickTime Keys
30428
- mett Parrot mett
30429
- rtmd Sony rtmd
30430
- tx3g QuickTime tx3g
30362
+ Tag ID Tag Name Writable
30363
+ ------ -------- --------
30364
+ 'Accelerometer' Accelerometer no
30365
+ 'AccelerometerData' AccelerometerData no
30366
+ 'AngularVelocity' AngularVelocity no
30367
+ 'CTMD' CTMD Canon CTMD
30368
+ 'CameraDateTime' CameraDateTime no
30369
+ 'CameraModel' CameraModel no
30370
+ 'Car' Car no
30371
+ 'DateTimeOriginal' DateTimeOriginal no
30372
+ 'DateTimeStamp' DateTimeStamp no
30373
+ 'Distance' Distance no
30374
+ 'ExposureCompensation' ExposureCompensation no
30375
+ 'ExposureTime' ExposureTime no
30376
+ 'FNumber' FNumber no
30377
+ 'FrameNumber' FrameNumber no
30378
+ 'GPSAltitude' GPSAltitude no
30379
+ 'GPSDOP' GPSDOP no
30380
+ 'GPSDateTime' GPSDateTime no
30381
+ 'GPSLatitude' GPSLatitude no
30382
+ 'GPSLatitude2' GPSLatitude2 no
30383
+ 'GPSLongitude' GPSLongitude no
30384
+ 'GPSLongitude2' GPSLongitude2 no
30385
+ 'GPSSatellites' GPSSatellites no
30386
+ 'GPSSpeed' GPSSpeed no
30387
+ 'GPSSpeedRef' GPSSpeedRef no
30388
+ 'GPSTimeStamp' GPSTimeStamp no
30389
+ 'GPSTrack' GPSTrack no
30390
+ 'GPSTrackRef' GPSTrackRef no
30391
+ 'GSensor' GSensor no
30392
+ 'INSV' INSV QuickTime INSV_MakerNotes
30393
+ 'ISO' ISO no
30394
+ 'JPEG' JpgFromRaw no
30395
+ 'KiloCalories' KiloCalories no
30396
+ 'MagneticVariation' MagneticVariation no
30397
+ 'RVMI' RVMI_gReV QuickTime RVMI_gReV
30398
+ RVMI_sReV QuickTime RVMI_sReV
30399
+ 'RawGSensor' RawGSensor no
30400
+ 'SampleDateTime' SampleDateTime no
30401
+ 'SampleDuration' SampleDuration no
30402
+ 'SampleTime' SampleTime no
30403
+ 'Text' Text no
30404
+ 'TimeCode' TimeCode no
30405
+ 'Unknown00' Unknown00? no
30406
+ 'Unknown01' Unknown01? no
30407
+ 'Unknown02' Unknown02? no
30408
+ 'Unknown03' Unknown03? no
30409
+ 'UserLabel' UserLabel no
30410
+ 'VerticalSpeed' VerticalSpeed no
30411
+ 'VideoTimeStamp' VideoTimeStamp no
30412
+ 'camm' camm0 QuickTime camm0
30413
+ camm1 QuickTime camm1
30414
+ camm2 QuickTime camm2
30415
+ camm3 QuickTime camm3
30416
+ camm4 QuickTime camm4
30417
+ camm5 QuickTime camm5
30418
+ camm6 QuickTime camm6
30419
+ camm7 QuickTime camm7
30420
+ 'dbgi' DJIDebug? DJI Protobuf
30421
+ 'djmd' DJIMetadata DJI Protobuf
30422
+ 'fdsc' fdsc GoPro fdsc
30423
+ 'gpmd' gpmd_Kingslim QuickTime Stream
30424
+ gpmd_Rove QuickTime Stream
30425
+ gpmd_FMAS QuickTime Stream
30426
+ gpmd_Wolfbox QuickTime Stream
30427
+ gpmd_GoPro GoPro GPMF
30428
+ 'marl' marl GM marl
30429
+ 'mebx' mebx QuickTime Keys
30430
+ 'mett' mett Parrot mett
30431
+ 'rtmd' rtmd Sony rtmd
30432
+ 'ssmd' RoveGPS QuickTime RoveGPS
30433
+ Accelerometer no
30434
+ PreviewImage no
30435
+ 'text' PreviewInfo QuickTime PreviewInfo
30436
+ 'tx3g' tx3g QuickTime tx3g
30431
30437
 
30432
30438
  =head3 QuickTime INSV_MakerNotes Tags
30433
30439
 
@@ -30438,14 +30444,6 @@ currently reads 103 different types of timed GPS metadata from video files.
30438
30444
  0x001a Firmware no
30439
30445
  0x002a Parameters no
30440
30446
 
30441
- =head3 QuickTime PreviewInfo Tags
30442
-
30443
- Preview stored by TomTom Bandit ActionCam.
30444
-
30445
- Index1 Tag Name Writable
30446
- ------ -------- --------
30447
- 8 PreviewImage no
30448
-
30449
30447
  =head3 QuickTime RVMI_gReV Tags
30450
30448
 
30451
30449
  GPS information extracted from the RVMI box of MOV videos.
@@ -30670,6 +30668,23 @@ VideoKeys family 1 gorup.
30670
30668
  ------ -------- --------
30671
30669
  'cits' FaceItem QuickTime Keys
30672
30670
 
30671
+ =head3 QuickTime RoveGPS Tags
30672
+
30673
+ Index1 Tag Name Writable
30674
+ ------ -------- --------
30675
+ 0 GPSLatitude no
30676
+ 8 GPSLongitude no
30677
+ 20 GPSSpeed no
30678
+ 22 GPSDateTime no
30679
+
30680
+ =head3 QuickTime PreviewInfo Tags
30681
+
30682
+ Preview stored by TomTom Bandit ActionCam.
30683
+
30684
+ Index1 Tag Name Writable
30685
+ ------ -------- --------
30686
+ 8 PreviewImage no
30687
+
30673
30688
  =head3 QuickTime tx3g Tags
30674
30689
 
30675
30690
  Tags extracted from the tx3g sbtl timed metadata of Yuneec and Autel drones,
@@ -1729,6 +1729,7 @@ ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
1729
1729
  # (note that $tag may be a binary Keys index here)
1730
1730
  foreach $tag (@addTags) {
1731
1731
  my $tagInfo = $$dirs{$tag} || $$newTags{$tag};
1732
+ next unless ref $tagInfo eq 'HASH'; # (shouldn't happen, but somehow there is forum17260)
1732
1733
  next if defined $$tagInfo{CanCreate} and not $$tagInfo{CanCreate};
1733
1734
  next if defined $$tagInfo{MediaType} and $$et{MediaType} ne $$tagInfo{MediaType};
1734
1735
  my $subdir = $$tagInfo{SubDirectory};
@@ -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 $advFmtSelf);
31
31
 
32
- $VERSION = '13.26';
32
+ $VERSION = '13.27';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -9213,10 +9213,14 @@ sub HandleTag($$$$;%)
9213
9213
  if ($start >= 0 and $start + $size <= $dLen) {
9214
9214
  $format = $$tagInfo{Format} || $$tagTablePtr{FORMAT};
9215
9215
  $format = $pfmt if not $format and $pfmt and $formatSize{$pfmt};
9216
- if ($format) {
9216
+ if (not $format) {
9217
+ $val = substr($$dataPt, $start, $size);
9218
+ } elsif (not $$tagInfo{ByteOrder}) {
9217
9219
  $val = ReadValue($dataPt, $start, $format, $$tagInfo{Count}, $size, \$rational);
9218
9220
  } else {
9219
- $val = substr($$dataPt, $start, $size);
9221
+ my $oldOrder = GetByteOrder(), SetByteOrder($$tagInfo{ByteOrder});
9222
+ $val = ReadValue($dataPt, $start, $format, $$tagInfo{Count}, $size, \$rational);
9223
+ SetByteOrder($oldOrder);
9220
9224
  }
9221
9225
  $binVal = substr($$dataPt, $start, $size) if $$self{OPTIONS}{SaveBin};
9222
9226
  } else {
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.26
3
+ Version: 13.27
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('13.26.0')
4
+ VERSION = Gem::Version.new('13.27.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: 13.26.0
4
+ version: 13.27.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: 2025-04-01 00:00:00.000000000 Z
12
+ date: 2025-04-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool