Skip to content

Commit

Permalink
Upgrading to exiftool v13.19
Browse files Browse the repository at this point in the history
  • Loading branch information
morozgrafix committed Feb 11, 2025
1 parent ada5bea commit a57df6a
Show file tree
Hide file tree
Showing 22 changed files with 1,094 additions and 787 deletions.
20 changes: 17 additions & 3 deletions bin/Changes
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ RSS feed: https://exiftool.org/rss.xml
Note: The most recent production release is Version 13.10. (Other versions are
considered development releases, and are not uploaded to MetaCPAN.)

Feb. 10, 2025 - Version 13.19

- Added read/write support for PDF and XMP-pdfx SourceModified
- Decode GPS from two more DJI protobuf formats (Matrice 30 and Mini 4 Pro)
- Decode timed GPS from Rexing V1-4k dashcam
- Decode more information from AAE files
- Made a new icon for the Windows EXE application
- Changed family 3 groups for ICO files so the first icon is in the Doc1
instead of the Main group
- Improved handling of ICC_Profile in HEIC images:
- Profiles for sub-images are extracted as sub-documents
- Allow only the profile of the main image to be written
- Updated Sony decoding for ILCE-1M2 (thanks Jos Roost)

Feb. 3, 2025 - Version 13.18

- Decode a number of new GoPro tags
Expand Down Expand Up @@ -72,7 +86,7 @@ Jan. 20, 2025 - Version 13.13

- Added ability to write tags to the audio/video tracks of MOV/MP4 videos
using the new AudioKeys and VideoKeys group names
- Added support for another DJI protobuf format (Mavic 3)
- Decode GPS from another DJI protobuf format (Mavic 3)
- Decode yet another type of LIGOGPSINFO timed GPS from a dashcam video
- Extract some proprietary information from JPEG images of Vivo phones
- Enhanced Geolocation feature to allow the nearest cities to a specified city
Expand Down Expand Up @@ -410,8 +424,8 @@ July 11, 2024 - Version 12.88 - "New Windows/MacOS packages"
- Tweaked API Geolocation option recognized space-separated lat/lon even when
there is no decimal point in the numbers
- API Changes:
- Changed LargeFileSupport default to 2 and added a warning if a large
chunk is encountered. Set to 1 to avoid the warning.
- Changed LargeFileSupport default to 1 and added a setting of 2 to warn
if a large chunk is encountered

June 13, 2024 - Version 12.87

Expand Down
1 change: 1 addition & 0 deletions bin/MANIFEST
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ fmt_files/gpx.fmt
fmt_files/gpx_wpt.fmt
fmt_files/kml.fmt
fmt_files/kml_track.fmt
html/ET-256.png
html/ExifTool.html
html/MIE1.1-20070121.pdf
html/Shift.html
Expand Down
2 changes: 1 addition & 1 deletion bin/META.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@
}
},
"release_status" : "stable",
"version" : "13.18"
"version" : "13.19"
}
2 changes: 1 addition & 1 deletion bin/META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ recommends:
Time::HiRes: '0'
requires:
perl: '5.004'
version: '13.18'
version: '13.19'
4 changes: 2 additions & 2 deletions bin/README
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
terminal window to extract and run ExifTool:

cd ~/Desktop
gzip -dc Image-ExifTool-13.18.tar.gz | tar -xf -
cd Image-ExifTool-13.18
gzip -dc Image-ExifTool-13.19.tar.gz | tar -xf -
cd Image-ExifTool-13.19
./exiftool t/images/ExifTool.jpg

Note: These commands extract meta information from one of the test images.
Expand Down
4 changes: 2 additions & 2 deletions bin/exiftool
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use strict;
use warnings;
require 5.004;

my $version = '13.18';
my $version = '13.19';

# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exePath;
Expand Down Expand Up @@ -5986,7 +5986,7 @@ with this command:
produces output like this:
-- Generated by ExifTool 13.18 --
-- Generated by ExifTool 13.19 --
File: a.jpg - 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
File: b.jpg - 2006:05:23 11:57:38
Expand Down
10 changes: 5 additions & 5 deletions bin/lib/Image/ExifTool.pm
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
%static_vars $advFmtSelf);

$VERSION = '13.18';
$VERSION = '13.19';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
Expand Down Expand Up @@ -9223,10 +9223,11 @@ sub HandleTag($$$$;%)
}
$self->Warn("RawConv $tag: " . CleanWarning()) if $evalWarning;
return undef unless defined $val;
$val = $$val if ref $val eq 'SCALAR';
$dataPt = \$val;
$dataPt = ref $val eq 'SCALAR' ? $val : \$val;
$subdirStart = 0;
$subdirLen = length $val;
$subdirLen = length $$dataPt;
} elsif (not $dataPt) {
$dataPt = ref $val eq 'SCALAR' ? $val : \$val;
}
if ($$subdir{Start}) {
my $valuePtr = 0;
Expand All @@ -9235,7 +9236,6 @@ sub HandleTag($$$$;%)
$subdirStart += $off;
$subdirLen -= $off;
}
$dataPt or $dataPt = \$val;
# process subdirectory information
my %dirInfo = (
DirName => $$subdir{DirName} || $$tagInfo{Name},
Expand Down
110 changes: 99 additions & 11 deletions bin/lib/Image/ExifTool/DJI.pm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use Image::ExifTool::XMP;
use Image::ExifTool::GPS;
use Image::ExifTool::Protobuf;

$VERSION = '1.12';
$VERSION = '1.13';

sub ProcessDJIInfo($$$);

Expand All @@ -27,6 +27,8 @@ sub ProcessDJIInfo($$$);
'dvtm_ac204.proto' => 1, # Osmo Action 5
'dvtm_AVATA2.proto' => 1, # Avanta 2
'dvtm_wm265e.proto' => 1, # Mavic 3
'dvtm_pm320.proto' => 1, # Matrice 30
'dvtm_Mini4_Pro.proto' => 1, # Matrice 30
);

my %convFloat2 = (
Expand Down Expand Up @@ -209,8 +211,9 @@ my %convFloat2 = (
ExifTool currently extracts timed GPS plus a few other tags from DJI devices
which use the following protocols: dvtm_AVATA2.proto (Avanta 2),
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5) and
dvtm_wm265e.proto (Mavic 3).
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5),
dvtm_wm265e.proto (Mavic 3), dvtm_pm320.proto (Matrice 30) and
dvtm_pm320.proto (Mini 4 Pro).
Note that with the protobuf format, numerical tags missing from the output
for a given protocol should be considered to have the default value of 0.
Expand Down Expand Up @@ -326,7 +329,6 @@ my %convFloat2 = (
'dvtm_wm265e_3-2-3-1' => {
Name => 'ShutterSpeed',
Format => 'rational',
ValueConv => '$val =~ m{(.*)/(.*)} ? $1 / $2 : $val',
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
},
# dvtm_wm265e_3-2-5-1 - unknown rational (xxxx / 1000)
Expand All @@ -335,14 +337,100 @@ my %convFloat2 = (
Name => 'GPSInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
},
'dvtm_wm265e_3-3-3-1' => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val/10' },
'dvtm_wm265e_3-3-3-2' => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val/10' },
'dvtm_wm265e_3-3-3-3' => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val/10' },
'dvtm_wm265e_3-3-4-2' => { Name => 'AbsoluteAltitude', ValueConv => '$val / 1000' },
'dvtm_wm265e_3-3-3' => {
Name => 'DroneInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
},
'dvtm_wm265e_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
'dvtm_wm265e_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
'dvtm_wm265e_3-4-3-1' => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
'dvtm_wm265e_3-4-3-2' => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' },
'dvtm_wm265e_3-4-3-3' => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
'dvtm_wm265e_3-4-3' => {
Name => 'GimbalInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
},
#
# Matrice 30
#
'dvtm_pm320_1-1-5' => 'SerialNumber',
'dvtm_pm320_1-1-10' => 'Model',
'dvtm_pm320_2-2' => {
Name => 'FrameInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
},
'dvtm_pm320_3-2-2-1' => { Name => 'ISO', Format => 'float' },
'dvtm_pm320_3-2-3-1' => {
Name => 'ShutterSpeed',
Format => 'rational',
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
},
'dvtm_pm320_3-2-6-1' => { Name => 'DigitalZoom', Format => 'float' },
'dvtm_pm320_3-3-4-1' => {
Name => 'GPSInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
},
'dvtm_pm320_3-3-3' => {
Name => 'DroneInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
},
'dvtm_pm320_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
'dvtm_pm320_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
'dvtm_pm320_3-4-3' => {
Name => 'GimbalInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
},
#
# Mini 4 Pro
#
'dvtm_Mini4_Pro_1-1-5' => 'SerialNumber',
'dvtm_Mini4_Pro_1-1-10' => 'Model',
'dvtm_Mini4_Pro_2-3' => {
Name => 'FrameInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
},
'dvtm_Mini4_Pro_3-2-7-1' => { Name => 'ISO', Format => 'float' },
'dvtm_Mini4_Pro_3-2-10-1' => {
Name => 'ShutterSpeed',
Format => 'rational',
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
},
'dvtm_Mini4_Pro_3-2-11-1' => {
Name => 'FNumber',
Format => 'rational',
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
},
'dvtm_Mini4_Pro_3-2-32-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
# dvtm_Mini4_Pro_3-2-37-1 - something to do with battery level or time remaining?
'dvtm_Mini4_Pro_3-3-4-1' => {
Name => 'GPSInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
},
'dvtm_Mini4_Pro_3-3-3' => {
Name => 'DroneInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
},
'dvtm_Mini4_Pro_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
'dvtm_Mini4_Pro_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' }, # (NC)
'dvtm_Mini4_Pro_3-4-3' => {
Name => 'GimbalInfo',
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
},
);

%Image::ExifTool::DJI::DroneInfo = (
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
VARS => { HEX_ID => 0 },
1 => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val / 10' },
2 => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val / 10' },
3 => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val / 10' },
);

%Image::ExifTool::DJI::GimbalInfo = (
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
VARS => { HEX_ID => 0 },
1 => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
2 => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' },
3 => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
);

%Image::ExifTool::DJI::FrameInfo = (
Expand Down
4 changes: 2 additions & 2 deletions bin/lib/Image/ExifTool/ICO.pm
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);

$VERSION = '1.00';
$VERSION = '1.01';

%Image::ExifTool::ICO::Main = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
Expand Down Expand Up @@ -95,7 +95,7 @@ sub ProcessICO($$$)
$et->HandleTag($tagTbl, 4, $num);
for ($i=0; $i<$num; ++$i) {
$raf->Read($buff, 16) == 16 or $et->Warn('Truncated file'), last;
$$et{DOC_NUM} = ++$$et{DOC_COUNT} if $i;
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
$et->HandleTag($tagTbl, 6, $buff);
}
delete $$et{DOC_NUM};
Expand Down
5 changes: 3 additions & 2 deletions bin/lib/Image/ExifTool/Kodak.pm
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;

$VERSION = '1.47';
$VERSION = '1.48';

sub ProcessKodakIFD($$$);
sub ProcessKodakText($$$);
Expand Down Expand Up @@ -2983,7 +2983,8 @@ my %sceneModeUsed = (
Priority => 0, # (only integer seconds)
PrintConv => 'ConvertDuration($val)',
},
'ver '=> { Name => 'KodakVersion' },
# (save KodakVersion to recognize Rexing Dashcam video for GPS scaling)
'ver '=> { Name => 'KodakVersion', RawConv => '$$self{KodakVersion} = $val' },
thma => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1 },
scra => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1 },
);
Expand Down
11 changes: 10 additions & 1 deletion bin/lib/Image/ExifTool/PDF.pm
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
use Image::ExifTool qw(:DataAccess :Utils);
require Exporter;

$VERSION = '1.60';
$VERSION = '1.61';

sub FetchObject($$$$);
sub ExtractObject($$;$$);
Expand Down Expand Up @@ -141,6 +141,15 @@ my %supportedFilter = (
PrintConv => '$self->ConvertDateTime($val)',
PrintConvInv => '$self->InverseDateTime($val)',
},
SourceModified => {
Name => 'SourceModified',
Writable => 'date',
PDF2 => 1,
Groups => { 2 => 'Time' },
Shift => 'Time',
PrintConv => '$self->ConvertDateTime($val)',
PrintConvInv => '$self->InverseDateTime($val)',
},
Trapped => {
Protected => 1,
# remove leading '/' from '/True' or '/False'
Expand Down
Loading

0 comments on commit a57df6a

Please sign in to comment.