exiftool_vendored 12.82.0 → 12.85.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +59 -0
  3. data/bin/MANIFEST +2 -18
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +47 -46
  7. data/bin/build_geolocation +945 -0
  8. data/bin/config_files/example.config +2 -2
  9. data/bin/exiftool +75 -51
  10. data/bin/fmt_files/gpx.fmt +2 -1
  11. data/bin/fmt_files/gpx_wpt.fmt +2 -1
  12. data/bin/lib/Image/ExifTool/Apple.pm +52 -7
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +5 -2
  14. data/bin/lib/Image/ExifTool/Canon.pm +11 -2
  15. data/bin/lib/Image/ExifTool/CanonVRD.pm +18 -5
  16. data/bin/lib/Image/ExifTool/DJI.pm +29 -0
  17. data/bin/lib/Image/ExifTool/DPX.pm +3 -3
  18. data/bin/lib/Image/ExifTool/Exif.pm +19 -2
  19. data/bin/lib/Image/ExifTool/GM.pm +17 -8
  20. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  21. data/bin/lib/Image/ExifTool/Geolocation.pm +170 -104
  22. data/bin/lib/Image/ExifTool/Geotag.pm +18 -10
  23. data/bin/lib/Image/ExifTool/ID3.pm +28 -6
  24. data/bin/lib/Image/ExifTool/Nikon.pm +25 -6
  25. data/bin/lib/Image/ExifTool/Pentax.pm +64 -13
  26. data/bin/lib/Image/ExifTool/QuickTime.pm +26 -7
  27. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +5 -0
  28. data/bin/lib/Image/ExifTool/Sony.pm +15 -6
  29. data/bin/lib/Image/ExifTool/TagLookup.pm +3557 -3540
  30. data/bin/lib/Image/ExifTool/TagNames.pod +61 -13
  31. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +4 -2
  32. data/bin/lib/Image/ExifTool/Writer.pl +166 -134
  33. data/bin/lib/Image/ExifTool/XMP.pm +2 -0
  34. data/bin/lib/Image/ExifTool/XMP2.pl +3 -0
  35. data/bin/lib/Image/ExifTool.pm +59 -27
  36. data/bin/lib/Image/ExifTool.pod +88 -71
  37. data/bin/perl-Image-ExifTool.spec +45 -45
  38. data/lib/exiftool_vendored/version.rb +1 -1
  39. metadata +3 -20
  40. data/bin/lib/Image/ExifTool/GeoLang/cs.pm +0 -978
  41. data/bin/lib/Image/ExifTool/GeoLang/de.pm +0 -1975
  42. data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +0 -44
  43. data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +0 -124
  44. data/bin/lib/Image/ExifTool/GeoLang/es.pm +0 -2921
  45. data/bin/lib/Image/ExifTool/GeoLang/fi.pm +0 -1116
  46. data/bin/lib/Image/ExifTool/GeoLang/fr.pm +0 -3171
  47. data/bin/lib/Image/ExifTool/GeoLang/it.pm +0 -2750
  48. data/bin/lib/Image/ExifTool/GeoLang/ja.pm +0 -10256
  49. data/bin/lib/Image/ExifTool/GeoLang/ko.pm +0 -4499
  50. data/bin/lib/Image/ExifTool/GeoLang/nl.pm +0 -1270
  51. data/bin/lib/Image/ExifTool/GeoLang/pl.pm +0 -3019
  52. data/bin/lib/Image/ExifTool/GeoLang/ru.pm +0 -18220
  53. data/bin/lib/Image/ExifTool/GeoLang/sk.pm +0 -441
  54. data/bin/lib/Image/ExifTool/GeoLang/sv.pm +0 -714
  55. data/bin/lib/Image/ExifTool/GeoLang/tr.pm +0 -452
  56. data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +0 -2225
  57. data/bin/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
  #------------------------------------------------------------------------------
data/bin/exiftool CHANGED
@@ -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;
@@ -735,6 +735,7 @@ for (;;) {
735
735
  push @isUTF8, 10 if $isAlt;
736
736
  for ($i=0; ; ++$i) {
737
737
  my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
738
+ $#entry = 9; # remove everything after latitude (eg. feature type)
738
739
  next if $minPop and $entry[7] < $minPop;
739
740
  next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
740
741
  push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
@@ -1166,7 +1167,7 @@ for (;;) {
1166
1167
  if (/^p(-?)$/ or /^printformat(-?)$/i) {
1167
1168
  my $fmt = shift;
1168
1169
  if ($pass) {
1169
- LoadPrintFormat($fmt, $1);
1170
+ LoadPrintFormat($fmt, $1 || $binaryOutput);
1170
1171
  # load MWG module now if necessary
1171
1172
  if (not $useMWG and grep /^mwg:/i, @requestTags) {
1172
1173
  $useMWG = 1;
@@ -2244,6 +2245,14 @@ sub GetImageInfo($$)
2244
2245
  if (%printFmt) {
2245
2246
  $et->Options(Duplicates => 1);
2246
2247
  $et->Options(RequestTags => \@requestTags);
2248
+ if ($printFmt{SetTags}) {
2249
+ # initialize options so we can set any tags we want
2250
+ $$et{TAGS_FROM_FILE} = 1;
2251
+ $et->Options(MakerNotes => 1);
2252
+ $et->Options(Struct => 2);
2253
+ $et->Options(List => 1);
2254
+ $et->Options(CoordFormat => '%d %d %.8f') unless $et->Options('CoordFormat');
2255
+ }
2247
2256
  } else {
2248
2257
  @foundTags = @tags;
2249
2258
  }
@@ -2296,8 +2305,8 @@ sub GetImageInfo($$)
2296
2305
  # output using print format file (-p) option
2297
2306
  my ($type, $doc, $grp, $lastDoc, $cache);
2298
2307
  $fileTrailer = '';
2299
- # repeat for each embedded document if necessary
2300
- if ($et->Options('ExtractEmbedded')) {
2308
+ # repeat for each sub-document if necessary
2309
+ if ($$et{DOC_COUNT}) {
2301
2310
  # (cache tag keys if there are sub-documents)
2302
2311
  $lastDoc = $$et{DOC_COUNT} and $cache = { };
2303
2312
  } else {
@@ -4121,6 +4130,7 @@ sub AddPrintFormat($)
4121
4130
  push @{$printFmt{$type}}, $expr;
4122
4131
  # add to list of requested tags
4123
4132
  push @requestTags, $expr =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g;
4133
+ $printFmt{SetTags} = 1 if $expr =~ /\bSetTags\b/;
4124
4134
  }
4125
4135
 
4126
4136
  #------------------------------------------------------------------------------
@@ -4711,50 +4721,50 @@ supported by ExifTool (r = read, w = write, c = create):
4711
4721
 
4712
4722
  File Types
4713
4723
  ------------+-------------+-------------+-------------+------------
4714
- 360 r/w | DOCX r | ITC r | O r | RSRC r
4715
- 3FR r | DPX r | J2C r | ODP r | RTF r
4716
- 3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
4717
- 3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
4718
- 7Z r | DV r | JPEG r/w | OFR r | RWZ r
4719
- A r | DVB r/w | JSON r | OGG r | RM r
4720
- AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
4721
- AAC r | DYLIB r | K25 r | ONP r | SKETCH r
4722
- AAE r | EIP r | KDC r | OPUS r | SO r
4723
- AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
4724
- ACR r | EPUB r | LA r | ORI r/w | SRF r
4725
- AFM r | ERF r/w | LFP r | OTF r | SRW r/w
4726
- AI r/w | EXE r | LIF r | PAC r | SVG r
4727
- AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
4728
- APE r | EXR r | LRV r/w | PBM r/w | THM r/w
4729
- ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
4730
- ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
4731
- ASF r | FFF r/w | MACOS r | PDB r | TTC r
4732
- AVI r | FITS r | MAX r | PDF r/w | TTF r
4733
- AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
4734
- AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
4735
- BMP r | FLIF r/w | MIFF r | PFB r | VNT r
4736
- BPG r | FLV r | MKA r | PFM r | VRD r/w/c
4737
- BTF r | FPF r | MKS r | PGF r | VSD r
4738
- C2PA r | FPX r | MKV r | PGM r/w | WAV r
4739
- CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
4740
- COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
4741
- CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
4742
- CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
4743
- CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
4744
- CRW r/w | HDR r | MOV r/w | PPT r | WPG r
4745
- CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
4746
- CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
4747
- CUR r | HTML r | MPC r | PSB r/w | X3F r/w
4748
- CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
4749
- DCM r | ICO r | MPO r/w | PSP r | XISF r
4750
- DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
4751
- DCR r | IDML r | MRC r | R3D r | XLSX r
4752
- DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
4753
- DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
4754
- DJVU r | INSP r/w | NEF r/w | RAM r |
4755
- DLL r | INSV r | NKSC r/w | RAR r |
4756
- DNG r/w | INX r | NRW r/w | RAW r/w |
4757
- DOC r | ISO r | NUMBERS r | RIFF r |
4724
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
4725
+ 3FR r | DPX r | J2C r | NXD r | RIFF r
4726
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
4727
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
4728
+ 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
4729
+ A r | DVB r/w | JSON r | ODT r | RWL r/w
4730
+ AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
4731
+ AAC r | DYLIB r | K25 r | OGG r | RM r
4732
+ AAE r | EIP r | KDC r | OGV r | SEQ r
4733
+ AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
4734
+ ACR r | EPUB r | LA r | OPUS r | SO r
4735
+ AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
4736
+ AI r/w | EXE r | LIF r | ORI r/w | SRF r
4737
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
4738
+ APE r | EXR r | LRV r/w | PAC r | SVG r
4739
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
4740
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
4741
+ ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
4742
+ AVI r | FITS r | MAX r | PCX r | TORRENT r
4743
+ AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
4744
+ AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
4745
+ BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
4746
+ BPG r | FLV r | MKA r | PFA r | VCF r
4747
+ BTF r | FPF r | MKS r | PFB r | VNT r
4748
+ C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
4749
+ CHM r | GIF r/w | MNG r/w | PGF r | VSD r
4750
+ COS r | GLV r/w | MOBI r | PGM r/w | WAV r
4751
+ CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
4752
+ CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
4753
+ CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
4754
+ CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
4755
+ CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
4756
+ CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
4757
+ CUR r | HTML r | MPC r | PPTX r | WTV r
4758
+ CZI r | ICC r/w/c | MPG r | PS r/w | WV r
4759
+ DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
4760
+ DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
4761
+ DCR r | IDML r | MRC r | PSP r | XISF r
4762
+ DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
4763
+ DIVX r | IND r/w | MXF r | R3D r | XLSX r
4764
+ DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
4765
+ DLL r | INSV r | NKA r | RAF r/w | ZIP r
4766
+ DNG r/w | INX r | NKSC r/w | RAM r |
4767
+ DOC r | ISO r | NRW r/w | RAR r |
4758
4768
 
4759
4769
  Meta Information
4760
4770
  ----------------------+----------------------+---------------------
@@ -5642,7 +5652,7 @@ it from subsequent text (and must be used if subsequent text begins with an
5642
5652
  alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
5643
5653
  to represent a C<$> symbol, and C<$/> for a newline. When the string
5644
5654
  argument is used (ie. I<STR>), a newline is added to the end of the string
5645
- unless B<-p-> is specified.
5655
+ unless B<-p-> is specified or the B<-b> option is used.
5646
5656
 
5647
5657
  Multiple B<-p> options may be used. Lines beginning with C<#[HEAD]> and
5648
5658
  C<#[TAIL]> are output before the first processed file and after the last
@@ -5668,7 +5678,7 @@ with this command:
5668
5678
 
5669
5679
  produces output like this:
5670
5680
 
5671
- -- Generated by ExifTool 12.82 --
5681
+ -- Generated by ExifTool 12.85 --
5672
5682
  File: a.jpg - 2003:10:31 15:44:19
5673
5683
  (f/5.6, 1/60s, ISO 100)
5674
5684
  File: b.jpg - 2006:05:23 11:57:38
@@ -5907,7 +5917,8 @@ processed file by using %C (upper case) instead of %c. This allows a
5907
5917
  sequential number to be added to output file names, even if the names are
5908
5918
  different. For %C, a copy number of zero is not omitted as it is with %c.
5909
5919
  A leading '-' causes the number to be reset at the start of each new
5910
- directory, and '+' has no effect. The number before the decimal place gives
5920
+ directory (in the original directory structure if the files are being
5921
+ moved), and '+' has no effect. The number before the decimal place gives
5911
5922
  the starting index, the number after the decimal place gives the field
5912
5923
  width. The following examples show the output filenames when used with the
5913
5924
  command C<exiftool rose.jpg star.jpg jet.jpg ...>:
@@ -6902,6 +6913,19 @@ sources. An equivalent to the above commands using this feature would be:
6902
6913
 
6903
6914
  exiftool -tagsfromfile @ -keywords -api nodups a.jpg
6904
6915
 
6916
+ C<SetTags>
6917
+
6918
+ Used to set tags in extracted images. With no arguments, copies all tags
6919
+ from the source file to the embedded image:
6920
+
6921
+ exiftool -p '${previewimage;SetTags}' -b a.arw > preview.jpg
6922
+
6923
+ Arguments may be added to copy or set specific tags. Arguments take exactly
6924
+ the same form as those on the command line when copying or writing tags,
6925
+ but without the leading dash. For example:
6926
+
6927
+ exiftool -p '${previewimage;SetTags("comment=test","title<filename")}' ...
6928
+
6905
6929
  =head1 WINDOWS UNICODE FILE NAMES
6906
6930
 
6907
6931
  In Windows, command-line arguments are specified using the current code page
@@ -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,