exiftool-vendored.exe 12.82.1 → 12.85.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.
Files changed (51) hide show
  1. package/bin/exiftool_files/Changes +59 -0
  2. package/bin/exiftool_files/README +47 -46
  3. package/bin/exiftool_files/build_geolocation +945 -0
  4. package/bin/exiftool_files/config_files/example.config +2 -2
  5. package/bin/exiftool_files/exiftool.pl +79 -55
  6. package/bin/exiftool_files/fmt_files/gpx.fmt +2 -1
  7. package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +2 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +52 -7
  9. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +5 -2
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +11 -2
  11. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +18 -5
  12. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +29 -0
  13. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +3 -3
  14. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +19 -2
  15. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +17 -8
  16. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  17. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +170 -104
  18. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +18 -10
  19. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +28 -6
  20. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +25 -6
  21. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +64 -13
  22. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +26 -7
  23. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +5 -0
  24. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +15 -6
  25. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +3557 -3540
  26. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +61 -13
  27. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +4 -2
  28. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +166 -134
  29. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +2 -0
  30. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +3 -0
  31. package/bin/exiftool_files/lib/Image/ExifTool.pm +59 -27
  32. package/bin/exiftool_files/lib/Image/ExifTool.pod +88 -71
  33. package/package.json +3 -3
  34. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/cs.pm +0 -978
  35. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/de.pm +0 -1975
  36. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_ca.pm +0 -44
  37. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_gb.pm +0 -124
  38. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/es.pm +0 -2921
  39. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fi.pm +0 -1116
  40. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fr.pm +0 -3171
  41. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/it.pm +0 -2750
  42. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ja.pm +0 -10256
  43. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ko.pm +0 -4499
  44. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/nl.pm +0 -1270
  45. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/pl.pm +0 -3019
  46. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ru.pm +0 -18220
  47. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sk.pm +0 -441
  48. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sv.pm +0 -714
  49. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/tr.pm +0 -452
  50. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_cn.pm +0 -2225
  51. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_tw.pm +0 -72
@@ -364,8 +364,8 @@ $Image::ExifTool::QuickTime::Keys{PREFERRED} = 3;
364
364
 
365
365
  # Add user-defined cities to the Geolocation lookup
366
366
  @Image::ExifTool::UserDefined::Geolocation = (
367
- # (city,region,country code,country,timezone,population,lat,lon)
368
- ['Sinemorets','Burgas','BG','Bulgaria','Europe/Sofia',400,42.06115,27.97833],
367
+ # (city,region,subregion,country_code,country,timezone,feature_code,population,lat,lon)
368
+ ['Sinemorets','burgas','Obshtina Tsarevo','BG','','Europe/Sofia','PPL',400,42.06115,27.97833],
369
369
  );
370
370
 
371
371
  #------------------------------------------------------------------------------
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.82';
14
+ my $version = '12.85';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -748,6 +748,7 @@ for (;;) {
748
748
  push @isUTF8, 10 if $isAlt;
749
749
  for ($i=0; ; ++$i) {
750
750
  my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
751
+ $#entry = 9; # remove everything after latitude (eg. feature type)
751
752
  next if $minPop and $entry[7] < $minPop;
752
753
  next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
753
754
  push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
@@ -1179,7 +1180,7 @@ for (;;) {
1179
1180
  if (/^p(-?)$/ or /^printformat(-?)$/i) {
1180
1181
  my $fmt = shift;
1181
1182
  if ($pass) {
1182
- LoadPrintFormat($fmt, $1);
1183
+ LoadPrintFormat($fmt, $1 || $binaryOutput);
1183
1184
  # load MWG module now if necessary
1184
1185
  if (not $useMWG and grep /^mwg:/i, @requestTags) {
1185
1186
  $useMWG = 1;
@@ -2241,6 +2242,14 @@ sub GetImageInfo($$)
2241
2242
  if (%printFmt) {
2242
2243
  $et->Options(Duplicates => 1);
2243
2244
  $et->Options(RequestTags => \@requestTags);
2245
+ if ($printFmt{SetTags}) {
2246
+ # initialize options so we can set any tags we want
2247
+ $$et{TAGS_FROM_FILE} = 1;
2248
+ $et->Options(MakerNotes => 1);
2249
+ $et->Options(Struct => 2);
2250
+ $et->Options(List => 1);
2251
+ $et->Options(CoordFormat => '%d %d %.8f') unless $et->Options('CoordFormat');
2252
+ }
2244
2253
  } else {
2245
2254
  @foundTags = @tags;
2246
2255
  }
@@ -2293,8 +2302,8 @@ sub GetImageInfo($$)
2293
2302
  # output using print format file (-p) option
2294
2303
  my ($type, $doc, $grp, $lastDoc, $cache);
2295
2304
  $fileTrailer = '';
2296
- # repeat for each embedded document if necessary
2297
- if ($et->Options('ExtractEmbedded')) {
2305
+ # repeat for each sub-document if necessary
2306
+ if ($$et{DOC_COUNT}) {
2298
2307
  # (cache tag keys if there are sub-documents)
2299
2308
  $lastDoc = $$et{DOC_COUNT} and $cache = { };
2300
2309
  } else {
@@ -4118,6 +4127,7 @@ sub AddPrintFormat($)
4118
4127
  push @{$printFmt{$type}}, $expr;
4119
4128
  # add to list of requested tags
4120
4129
  push @requestTags, $expr =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g;
4130
+ $printFmt{SetTags} = 1 if $expr =~ /\bSetTags\b/;
4121
4131
  }
4122
4132
 
4123
4133
  #------------------------------------------------------------------------------
@@ -4719,50 +4729,50 @@ DESCRIPTION
4719
4729
 
4720
4730
  File Types
4721
4731
  ------------+-------------+-------------+-------------+------------
4722
- 360 r/w | DOCX r | ITC r | O r | RSRC r
4723
- 3FR r | DPX r | J2C r | ODP r | RTF r
4724
- 3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
4725
- 3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
4726
- 7Z r | DV r | JPEG r/w | OFR r | RWZ r
4727
- A r | DVB r/w | JSON r | OGG r | RM r
4728
- AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
4729
- AAC r | DYLIB r | K25 r | ONP r | SKETCH r
4730
- AAE r | EIP r | KDC r | OPUS r | SO r
4731
- AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
4732
- ACR r | EPUB r | LA r | ORI r/w | SRF r
4733
- AFM r | ERF r/w | LFP r | OTF r | SRW r/w
4734
- AI r/w | EXE r | LIF r | PAC r | SVG r
4735
- AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
4736
- APE r | EXR r | LRV r/w | PBM r/w | THM r/w
4737
- ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
4738
- ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
4739
- ASF r | FFF r/w | MACOS r | PDB r | TTC r
4740
- AVI r | FITS r | MAX r | PDF r/w | TTF r
4741
- AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
4742
- AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
4743
- BMP r | FLIF r/w | MIFF r | PFB r | VNT r
4744
- BPG r | FLV r | MKA r | PFM r | VRD r/w/c
4745
- BTF r | FPF r | MKS r | PGF r | VSD r
4746
- C2PA r | FPX r | MKV r | PGM r/w | WAV r
4747
- CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
4748
- COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
4749
- CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
4750
- CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
4751
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
4752
- CRW r/w | HDR r | MOV r/w | PPT r | WPG r
4753
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
4754
- CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
4755
- CUR r | HTML r | MPC r | PSB r/w | X3F r/w
4756
- CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
4757
- DCM r | ICO r | MPO r/w | PSP r | XISF r
4758
- DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
4759
- DCR r | IDML r | MRC r | R3D r | XLSX r
4760
- DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
4761
- DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
4762
- DJVU r | INSP r/w | NEF r/w | RAM r |
4763
- DLL r | INSV r | NKSC r/w | RAR r |
4764
- DNG r/w | INX r | NRW r/w | RAW r/w |
4765
- DOC r | ISO r | NUMBERS r | RIFF r |
4732
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
4733
+ 3FR r | DPX r | J2C r | NXD r | RIFF r
4734
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
4735
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
4736
+ 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
4737
+ A r | DVB r/w | JSON r | ODT r | RWL r/w
4738
+ AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
4739
+ AAC r | DYLIB r | K25 r | OGG r | RM r
4740
+ AAE r | EIP r | KDC r | OGV r | SEQ r
4741
+ AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
4742
+ ACR r | EPUB r | LA r | OPUS r | SO r
4743
+ AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
4744
+ AI r/w | EXE r | LIF r | ORI r/w | SRF r
4745
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
4746
+ APE r | EXR r | LRV r/w | PAC r | SVG r
4747
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
4748
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
4749
+ ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
4750
+ AVI r | FITS r | MAX r | PCX r | TORRENT r
4751
+ AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
4752
+ AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
4753
+ BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
4754
+ BPG r | FLV r | MKA r | PFA r | VCF r
4755
+ BTF r | FPF r | MKS r | PFB r | VNT r
4756
+ C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
4757
+ CHM r | GIF r/w | MNG r/w | PGF r | VSD r
4758
+ COS r | GLV r/w | MOBI r | PGM r/w | WAV r
4759
+ CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
4760
+ CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
4761
+ CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
4762
+ CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
4763
+ CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
4764
+ CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
4765
+ CUR r | HTML r | MPC r | PPTX r | WTV r
4766
+ CZI r | ICC r/w/c | MPG r | PS r/w | WV r
4767
+ DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
4768
+ DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
4769
+ DCR r | IDML r | MRC r | PSP r | XISF r
4770
+ DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
4771
+ DIVX r | IND r/w | MXF r | R3D r | XLSX r
4772
+ DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
4773
+ DLL r | INSV r | NKA r | RAF r/w | ZIP r
4774
+ DNG r/w | INX r | NKSC r/w | RAM r |
4775
+ DOC r | ISO r | NRW r/w | RAR r |
4766
4776
 
4767
4777
  Meta Information
4768
4778
  ----------------------+----------------------+---------------------
@@ -5664,7 +5674,7 @@ OPTIONS
5664
5674
  character, hyphen, underline, colon or number sign). Use $$ to
5665
5675
  represent a "$" symbol, and $/ for a newline. When the string
5666
5676
  argument is used (ie. *STR*), a newline is added to the end of the
5667
- string unless -p- is specified.
5677
+ string unless -p- is specified or the -b option is used.
5668
5678
 
5669
5679
  Multiple -p options may be used. Lines beginning with "#[HEAD]" and
5670
5680
  "#[TAIL]" are output before the first processed file and after the
@@ -5691,7 +5701,7 @@ OPTIONS
5691
5701
 
5692
5702
  produces output like this:
5693
5703
 
5694
- -- Generated by ExifTool 12.82 --
5704
+ -- Generated by ExifTool 12.85 --
5695
5705
  File: a.jpg - 2003:10:31 15:44:19
5696
5706
  (f/5.6, 1/60s, ISO 100)
5697
5707
  File: b.jpg - 2006:05:23 11:57:38
@@ -5932,11 +5942,12 @@ OPTIONS
5932
5942
  a sequential number to be added to output file names, even if the
5933
5943
  names are different. For %C, a copy number of zero is not omitted
5934
5944
  as it is with %c. A leading '-' causes the number to be reset at
5935
- the start of each new directory, and '+' has no effect. The number
5936
- before the decimal place gives the starting index, the number after
5937
- the decimal place gives the field width. The following examples
5938
- show the output filenames when used with the command "exiftool
5939
- rose.jpg star.jpg jet.jpg ...":
5945
+ the start of each new directory (in the original directory
5946
+ structure if the files are being moved), and '+' has no effect. The
5947
+ number before the decimal place gives the starting index, the
5948
+ number after the decimal place gives the field width. The following
5949
+ examples show the output filenames when used with the command
5950
+ "exiftool rose.jpg star.jpg jet.jpg ...":
5940
5951
 
5941
5952
  -w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt
5942
5953
  -w %f-%10C.txt # rose-10.txt, star-11.txt, jet-12.txt
@@ -6911,6 +6922,19 @@ OPTIONS
6911
6922
 
6912
6923
  exiftool -tagsfromfile @ -keywords -api nodups a.jpg
6913
6924
 
6925
+ "SetTags"
6926
+
6927
+ Used to set tags in extracted images. With no arguments, copies all tags
6928
+ from the source file to the embedded image:
6929
+
6930
+ exiftool -p '${previewimage;SetTags}' -b a.arw > preview.jpg
6931
+
6932
+ Arguments may be added to copy or set specific tags. Arguments take
6933
+ exactly the same form as those on the command line when copying or
6934
+ writing tags, but without the leading dash. For example:
6935
+
6936
+ exiftool -p '${previewimage;SetTags("comment=test","title<filename")}' ...
6937
+
6914
6938
  WINDOWS UNICODE FILE NAMES
6915
6939
  In Windows, command-line arguments are specified using the current code
6916
6940
  page and are recoded automatically to the system code page. This
@@ -11,6 +11,7 @@
11
11
  # 2018/01/04 - PH Added IF to be sure position exists
12
12
  # 2018/01/06 - PH Use DateFmt function instead of -d option
13
13
  # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
14
+ # 2024/04/11 - PH Use %f feature in GPSDateTime formatting
14
15
  #
15
16
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
16
17
  # 2) The -ee3 option is to extract the full track from video files.
@@ -32,7 +33,7 @@
32
33
  #[IF] $gpslatitude $gpslongitude
33
34
  #[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
34
35
  #[BODY] <ele>$gpsaltitude#</ele>
35
- #[BODY] <time>${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}</time>
36
+ #[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%S%fZ")}</time>
36
37
  #[BODY]</trkpt>
37
38
  #[TAIL]</trkseg>
38
39
  #[TAIL]</trk>
@@ -12,6 +12,7 @@
12
12
  # 2018/01/04 - PH Added IF to be sure position exists
13
13
  # 2018/01/06 - PH Use DateFmt function instead of -d option
14
14
  # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
15
+ # 2024/04/11 - PH Use %f feature in GPSDateTime formatting
15
16
  #
16
17
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
17
18
  # 2) The -ee3 option is to extract the full track from video files.
@@ -30,7 +31,7 @@
30
31
  #[IF] $gpslatitude $gpslongitude
31
32
  #[BODY]<wpt lat="$gpslatitude#" lon="$gpslongitude#">
32
33
  #[BODY] <ele>$gpsaltitude#</ele>
33
- #[BODY] <time>${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}</time>
34
+ #[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%S%fZ")}</time>
34
35
  #[BODY] <name>$filename</name>
35
36
  #[BODY] <link href="$directory/$filename"/>
36
37
  #[BODY] <sym>Scenic Area</sym>
@@ -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.11';
19
+ $VERSION = '1.12';
20
20
 
21
21
  sub ConvertPLIST($$);
22
22
 
@@ -128,6 +128,8 @@ sub ConvertPLIST($$);
128
128
  1 => 'ProRAW',
129
129
  2 => 'Portrait',
130
130
  10 => 'Photo',
131
+ 11 => 'Manual Focus', #forum16044
132
+ 12 => 'Scene', #forum16044
131
133
  },
132
134
  },
133
135
  0x0015 => { # (ImageGroupIdentifier, ref 2)
@@ -154,12 +156,17 @@ sub ConvertPLIST($$);
154
156
  },
155
157
  # 0x001b - (PhotosRenderEffect, ref 2)
156
158
  # 0x001c - (BracketedCaptureSequenceNumber, ref 2)
159
+ # 0x001c - Flash, 2="On" (ref PH)
157
160
  0x001d => { #2
158
161
  Name => 'LuminanceNoiseAmplitude',
159
162
  Writable => 'rational64s',
160
163
  },
161
164
  # 0x001e - (OriginatingAppID, ref 2)
162
- # 0x001f - int32s: 0,1 (PhotosAppFeatureFlags, ref 2)
165
+ 0x001f => {
166
+ Name => 'PhotosAppFeatureFlags', #2
167
+ Notes => 'set if person or pet detected in image', #PH
168
+ Writable => 'int32s',
169
+ },
163
170
  0x0020 => { # (ImageCaptureRequestIdentifier, ref 2)
164
171
  Name => 'ImageCaptureRequestID',
165
172
  Writable => 'string',
@@ -170,6 +177,17 @@ sub ConvertPLIST($$);
170
177
  Writable => 'rational64s',
171
178
  },
172
179
  # 0x0022 - (ARKitPhoto, ref 2)
180
+ 0x0023 => {
181
+ Name => 'AFPerformance', #2
182
+ Writable => 'int32s',
183
+ Count => 2,
184
+ Notes => q{
185
+ first number maybe related to focus distance, last number maybe related to
186
+ focus accuracy
187
+ },
188
+ PrintConv => 'my @a=split " ",$val; sprintf("%d %d %d",$a[0],$a[1]>>28,$a[1]&0xfffffff)',
189
+ PrintConvInv => 'my @a=split " ",$val; sprintf("%d %d",$a[0],($a[1]<<28)+$a[2])',
190
+ },
173
191
  # 0x0023 - int32s[2] (AFPerformance, ref 2)
174
192
  # 0x0024 - (AFExternalOffset, ref 2)
175
193
  0x0025 => { # (StillImageSceneFlags, ref 2)
@@ -196,7 +214,21 @@ sub ConvertPLIST($$);
196
214
  },
197
215
  # 0x002C - (SpatialOverCaptureImageType, ref 2)
198
216
  # 0x002D - (CCT, ref 2)
217
+ 0x002d => { #PH
218
+ Name => 'ColorTemperature',
219
+ Writable => 'int32s',
220
+ },
199
221
  # 0x002E - (ApsMode, ref 2)
222
+ 0x002e => { #PH
223
+ Name => 'CameraType',
224
+ Writable => 'int32s',
225
+ PrintConv => {
226
+ 0 => 'Back Wide Angle',
227
+ 1 => 'Back Normal',
228
+ 6 => 'Front',
229
+ },
230
+ },
231
+ # 0x002e - set to 0 for 0.5x (crop?) (ref PH)
200
232
  0x002F => { #2
201
233
  Name => 'FocusPosition',
202
234
  Writable => 'int32s',
@@ -209,7 +241,9 @@ sub ConvertPLIST($$);
209
241
  # 0x0032 - (IntelligentDistortionCorrection, ref 2)
210
242
  # 0x0033 - (NRFStatus, ref 2)
211
243
  # 0x0034 - (NRFInputBracketCount, ref 2)
244
+ # 0x0034 - 1 for flash on, otherwise doesn't exist (ref PH)
212
245
  # 0x0035 - (NRFRegisteredBracketCount, ref 2)
246
+ # 0x0035 - 0 for flash on, otherwise doesn't exist (ref PH)
213
247
  # 0x0036 - (LuxLevel, ref 2)
214
248
  # 0x0037 - (LastFocusingMethod, ref 2)
215
249
  0x0038 => { # (TimeOfFlightAssistedAutoFocusEstimatorMeasuredDepth, ref 2)
@@ -219,8 +253,10 @@ sub ConvertPLIST($$);
219
253
  },
220
254
  # 0x0039 - (TimeOfFlightAssistedAutoFocusEstimatorROIType, ref 2)
221
255
  # 0x003A - (NRFSRLStatus, ref 2)
256
+ # 0x003a - non-zero if a person was in the image? (ref PH)
222
257
  # 0x003B - (SystemPressureLevel, ref 2)
223
258
  # 0x003C - (CameraControlsStatisticsMaster, ref 2)
259
+ # 0x003c - 4=rear cam, 1=front cam? (ref PH)
224
260
  0x003D => { # (TimeOfFlightAssistedAutoFocusEstimatorSensorConfidence, ref 2)
225
261
  Name => 'AFConfidence',
226
262
  Writable => 'int32s',
@@ -237,6 +273,7 @@ sub ConvertPLIST($$);
237
273
  },
238
274
  0x0040 => { #2
239
275
  Name => 'SemanticStyle',
276
+ Notes => '_1=Tone, _2=Warm, _3=1.Std,2.Vibrant,3.Rich Contrast,4.Warm,5.Cool', #PH
240
277
  ValueConv => \&ConvertPLIST,
241
278
  },
242
279
  0x0041 => { # (SemanticStyleKey_RenderingVersion, ref 2)
@@ -249,20 +286,28 @@ sub ConvertPLIST($$);
249
286
  },
250
287
  # 0x0043 - (SemanticStyleKey_ToneBias, ref 2)
251
288
  # 0x0044 - (SemanticStyleKey_WarmthBias, ref 2)
252
- 0x0045 => { # (FrontFacing, ref 2)
253
- Name => 'FrontFacingCamera',
254
- Writable => 'int32s',
255
- PrintConv => { 0 => 'No', 1 => 'Yes' }, #PH (NC)
256
- },
289
+ # 0x0045 - (FrontFacing, ref 2) (not for iPhone15, ref PH)
257
290
  # 0x0046 - (TimeOfFlightAssistedAutoFocusEstimatorContainsBlindSpot, ref 2)
258
291
  # 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
259
292
  # 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
260
293
  # 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
261
294
  # 0x004A - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
295
+ # 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
262
296
  # 0x004B - (ZeroShutterLagFailureReason, ref 2)
263
297
  # 0x004C - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
264
298
  # 0x004D - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
265
299
  # 0x004E - (Camera, ref 2)
300
+ 0x004e => {
301
+ Name => 'Apple_0x004e',
302
+ Unknown => 1,
303
+ # first number is 0 for front cam, 1 for either back cam (ref PH)
304
+ ValueConv => \&ConvertPLIST,
305
+ },
306
+ 0x004f => {
307
+ Name => 'Apple_0x004f',
308
+ Unknown => 1,
309
+ ValueConv => \&ConvertPLIST,
310
+ }
266
311
  );
267
312
 
268
313
  # PLIST-format CMTime structure (ref PH)
@@ -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.55';
38
+ $VERSION = '3.56';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -672,7 +672,10 @@ Camero.
672
672
 
673
673
  Use the API L<PrintCSV|../ExifTool.html#PrintCSV> option to output all timed
674
674
  PDR data in CSV format at greatly increased speed and with much lower memory
675
- usage.
675
+ usage. This option prints the numerical values for each channel in CSV
676
+ format, suitable for import into RaceRender. In this output, the gear
677
+ numbers for Neutral and Reverse are changed to -1 and -100 respectively for
678
+ compatibility with RaceRender.
676
679
  },
677
680
  PodTrailer => q{
678
681
  ~head1 NOTES
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.74';
91
+ $VERSION = '4.75';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -2590,6 +2590,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2590
2590
  },
2591
2591
  # 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
2592
2592
  # (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
2593
+ 51 => { #forum16036 (EOS R models)
2594
+ Name => 'Clarity',
2595
+ PrintConv => {
2596
+ OTHER => sub { shift },
2597
+ 0x7fff => 'n/a',
2598
+ },
2599
+ },
2593
2600
  );
2594
2601
 
2595
2602
  # focal length information (MakerNotes tag 0x02)
@@ -7031,7 +7038,7 @@ my %ciMaxFocal = (
7031
7038
  },
7032
7039
  },
7033
7040
  2 => { #12
7034
- Name => 'Sharpness',
7041
+ Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
7035
7042
  Notes => 'all models except the 20D and 350D',
7036
7043
  Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
7037
7044
  Priority => 0, # (maybe not as reliable as other sharpness values)
@@ -7077,6 +7084,8 @@ my %ciMaxFocal = (
7077
7084
  Name => 'WBShiftGM',
7078
7085
  Notes => 'positive is a shift toward green',
7079
7086
  },
7087
+ 14 => 'UnsharpMaskFineness', #forum16036
7088
+ 15 => 'UnsharpMaskThreshold', #forum16036
7080
7089
  );
7081
7090
 
7082
7091
  # Color balance information (MakerNotes tag 0xa9) (ref PH)
@@ -23,7 +23,7 @@ use vars qw($VERSION);
23
23
  use Image::ExifTool qw(:DataAccess :Utils);
24
24
  use Image::ExifTool::Canon;
25
25
 
26
- $VERSION = '1.39';
26
+ $VERSION = '1.41';
27
27
 
28
28
  sub ProcessCanonVRD($$;$);
29
29
  sub WriteCanonVRD($$;$);
@@ -1020,6 +1020,18 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1020
1020
  # 0x10018 - fmt=8: 0
1021
1021
  # 0x10020 - fmt=2: ''
1022
1022
  0x10021 => 'CustomPictureStyle', # (string)
1023
+ 0x10100 => { #forum15965
1024
+ Name => 'Rating',
1025
+ PrintConv => {
1026
+ 0 => 'Unrated',
1027
+ 1 => 1,
1028
+ 2 => 2,
1029
+ 3 => 3,
1030
+ 4 => 4,
1031
+ 5 => 5,
1032
+ 4294967295 => 'Rejected',
1033
+ },
1034
+ },
1023
1035
  0x10101 => {
1024
1036
  Name => 'CheckMark',
1025
1037
  PrintConv => {
@@ -1427,15 +1439,16 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
1427
1439
  4 => 'CropY',
1428
1440
  5 => 'CropWidth',
1429
1441
  6 => 'CropHeight',
1442
+ 7 => 'CropRotation',
1430
1443
  8 => {
1431
- Name => 'CropRotation',
1444
+ Name => 'CropAngle',
1432
1445
  Format => 'double',
1433
1446
  PrintConv => 'sprintf("%.7g",$val)',
1434
1447
  PrintConvInv => '$val',
1435
1448
  },
1436
- 0x0a => 'CropOriginalWidth',
1437
- 0x0b => 'CropOriginalHeight',
1438
- # 0x0c double - value: 100
1449
+ 10 => 'CropOriginalWidth',
1450
+ 11 => 'CropOriginalHeight',
1451
+ # 12 double - value: 100
1439
1452
  );
1440
1453
 
1441
1454
  # DR4 Stamp Tool tags (ref PH)
@@ -19,6 +19,7 @@ use Image::ExifTool::GPS;
19
19
  $VERSION = '1.09';
20
20
 
21
21
  sub ProcessDJIInfo($$$);
22
+ sub Process_djmd($$$);
22
23
 
23
24
  my %convFloat2 = (
24
25
  PrintConv => 'sprintf("%+.2f", $val)',
@@ -186,6 +187,34 @@ my %convFloat2 = (
186
187
  },
187
188
  );
188
189
 
190
+ # TODO - eventually add ability to decode this?
191
+ %Image::ExifTool::DJI::djmd = (
192
+ PROCESS_PROC => \&Process_djmd,
193
+ );
194
+
195
+ #------------------------------------------------------------------------------
196
+ # Process DJI djmd timed data from Action4 videos (ref PH)
197
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
198
+ # Returns: 1 on success
199
+ # TODO: work in progress
200
+ sub Process_djmd($$$)
201
+ {
202
+ my ($et, $dirInfo, $tagTbl) = @_;
203
+ my $dataPt = $$dirInfo{DataPt};
204
+ my ($pos, $bit, $val) = (6, 0, 0);
205
+ for (;;) {
206
+ my $v = Get8u($dataPt, $pos);
207
+ $val += ($v & 0x7f) << $bit;
208
+ last unless $v & 0x80;
209
+ ++$pos;
210
+ $bit += 7;
211
+ }
212
+ $pos += 49;
213
+ my @a = unpack("x${pos}fxfxfxfx3fxfxf", $$dataPt);
214
+ print "$val @a\n";
215
+ return 1;
216
+ }
217
+
189
218
  #------------------------------------------------------------------------------
190
219
  # Process DJI info (ref PH)
191
220
  # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # DPX tags
21
21
  %Image::ExifTool::DPX::Main = (
@@ -97,7 +97,7 @@ $VERSION = '1.06';
97
97
  3 => 'Logarithmic',
98
98
  4 => 'Unspecified video',
99
99
  5 => 'SMPTE 274M',
100
- 6 => 'ITU-R 704-4',
100
+ 6 => 'ITU-R 709-4',
101
101
  7 => 'ITU-R 601-5 system B or G (625)',
102
102
  8 => 'ITU-R 601-5 system M (525)',
103
103
  9 => 'Composite video (NTSC)',
@@ -124,7 +124,7 @@ $VERSION = '1.06';
124
124
  1 => 'Printing density',
125
125
  4 => 'Unspecified video',
126
126
  5 => 'SMPTE 274M',
127
- 6 => 'ITU-R 704-4',
127
+ 6 => 'ITU-R 709-4',
128
128
  7 => 'ITU-R 601-5 system B or G (625)',
129
129
  8 => 'ITU-R 601-5 system M (525)',
130
130
  9 => 'Composite video (NTSC)',
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.51';
60
+ $VERSION = '4.52';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -4342,7 +4342,7 @@ my %opcodeInfo = (
4342
4342
  Count => -1,
4343
4343
  Protected => 1,
4344
4344
  },
4345
- 0xcd3b => { # DNG 1.6
4345
+ 0xcd3f => { # DNG 1.6
4346
4346
  Name => 'RGBTables',
4347
4347
  Writable => 'undef',
4348
4348
  WriteGroup => 'IFD0',
@@ -4404,6 +4404,23 @@ my %opcodeInfo = (
4404
4404
  WriteGroup => 'IFD0',
4405
4405
  Protected => 1,
4406
4406
  },
4407
+ 0xcd49 => { # DNG 1.7.1
4408
+ Name => 'JXLDistance',
4409
+ Writable => 'float',
4410
+ WriteGroup => 'IFD0',
4411
+ },
4412
+ 0xcd4a => { # DNG 1.7.1
4413
+ Name => 'JXLEffort',
4414
+ Notes => 'values range from 1=low to 9=high',
4415
+ Writable => 'int32u',
4416
+ WriteGroup => 'IFD0',
4417
+ },
4418
+ 0xcd4b => { # DNG 1.7.1
4419
+ Name => 'JXLDecodeSpeed',
4420
+ Notes => 'values range from 1=slow to 4=fast',
4421
+ Writable => 'int32u',
4422
+ WriteGroup => 'IFD0',
4423
+ },
4407
4424
  0xea1c => { #13
4408
4425
  Name => 'Padding',
4409
4426
  Binary => 1,