exiftool_vendored 12.68.0 → 12.72.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +98 -15
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +10 -10
  7. data/bin/exiftool +32 -25
  8. data/bin/lib/Image/ExifTool/AAC.pm +175 -0
  9. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
  10. data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
  11. data/bin/lib/Image/ExifTool/Canon.pm +87 -20
  12. data/bin/lib/Image/ExifTool/DJI.pm +3 -2
  13. data/bin/lib/Image/ExifTool/DNG.pm +25 -2
  14. data/bin/lib/Image/ExifTool/EXE.pm +54 -6
  15. data/bin/lib/Image/ExifTool/Exif.pm +204 -22
  16. data/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
  17. data/bin/lib/Image/ExifTool/GIF.pm +5 -1
  18. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  19. data/bin/lib/Image/ExifTool/ID3.pm +76 -10
  20. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  21. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/JSON.pm +4 -1
  23. data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
  24. data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
  25. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  26. data/bin/lib/Image/ExifTool/Nikon.pm +213 -105
  27. data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
  28. data/bin/lib/Image/ExifTool/PNG.pm +8 -13
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +15 -2
  30. data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
  31. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -2
  32. data/bin/lib/Image/ExifTool/QuickTime.pm +60 -14
  33. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
  34. data/bin/lib/Image/ExifTool/README +14 -5
  35. data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
  36. data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
  37. data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
  38. data/bin/lib/Image/ExifTool/Sony.pm +177 -37
  39. data/bin/lib/Image/ExifTool/TagLookup.pm +6971 -6714
  40. data/bin/lib/Image/ExifTool/TagNames.pod +957 -372
  41. data/bin/lib/Image/ExifTool/Text.pm +4 -5
  42. data/bin/lib/Image/ExifTool/Validate.pm +23 -20
  43. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  44. data/bin/lib/Image/ExifTool/WriteExif.pl +33 -8
  45. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
  46. data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
  47. data/bin/lib/Image/ExifTool/Writer.pl +121 -28
  48. data/bin/lib/Image/ExifTool/XMP.pm +67 -2
  49. data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
  50. data/bin/lib/Image/ExifTool.pm +94 -43
  51. data/bin/lib/Image/ExifTool.pod +28 -17
  52. data/bin/perl-Image-ExifTool.spec +9 -9
  53. data/lib/exiftool_vendored/version.rb +1 -1
  54. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8775a6c495517ead6255debf3b1c804d3e5648d563bea48171176632cfb5043b
4
- data.tar.gz: 305d08e52e2ef9b75538fe0305093dad86581448d56a21d66503863b11321a6f
3
+ metadata.gz: a1f510ba188ef652b3d3d2b5cf0a8f317c7ce8eb1ef27448b0de2d6ea326e67d
4
+ data.tar.gz: 8221ec58b898f84a00d6739e79a88417d83b57e481b473216d2a4001f34e7909
5
5
  SHA512:
6
- metadata.gz: aa79d6fa82ae949030c90fc5e07c0271eb837336e9ee8675a1bb468b1f4f5b430b0ce78678a75e5025520a1118b7defd21a8f06242ad019d2001e10d1f270e54
7
- data.tar.gz: ac7c7da4ef3ba52118a9bea9c0ccdc6a85f4d247e622e75c4e40567d582f0ca062eb68ad796a1a3745c5631c9800e243f45599a52cc8a2bfc99daf00af9cd928
6
+ metadata.gz: c294ea7e4739692d2e938409230f791474b64e427a494d0abc984165415dd59a18a3e33ec5c37a8deddbf809d61adc338936762993d6cd43462b717be22be5d3
7
+ data.tar.gz: 8083b7e1418ecf28253e5fef7ec3a1125e430b1235feb820cf85c7796af1d94a65ac7c5521ca36162916c4908da5f2f9a8a8598bf9ecf06d07c0d757166f21a4
data/bin/Changes CHANGED
@@ -4,24 +4,109 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 12.60. (Other versions are
7
+ Note: The most recent production release is Version 12.70. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Dec. 29, 2023 - Version 12.72
11
+
12
+ - Added read support for AAC audio files
13
+ - Added a new QuickTime Keys Android tag
14
+ - Added a number of new values for some Ricoh GR III tags
15
+ - Decode timed metadata from Intsa360 Ace Pro MP4 videos
16
+ - Decode GPSDateTime milliseconds in timed Insta360 metadata
17
+ - Decode timed metadata from INNOV K5 TS videos
18
+ - Decode a number of new GoPro timed-metadata tags
19
+ - Decode a few new Xiaomi EXIF tags
20
+ - Fixed writing of JPG/ARW images from some newer Sony models to preserve
21
+ HiddenData
22
+
23
+ Dec. 21, 2023 - Version 12.71
24
+
25
+ - Added a warning if there was an error reading an alternate file with the
26
+ -fileNUM option
27
+ - Added the ability to write QuickTime Keys:Encoder
28
+ - Added a few new Canon LensType values (thanks Norbert Wasser)
29
+ - Added a new, obscure EXIF tag (thanks Neal Krawetz)
30
+ - Decode real-time metadata from Ricoh Theta videos
31
+ - Decode SpecularWhiteLevel for more Canon models (github #232)
32
+ - Decode Canon DualPixelRaw tag (thanks John Moyer)
33
+ - Decode a few new Nikon tags (thanks Warren Hatch)
34
+ - Decode more FujiFilm M-RAW tags (thanks Greybeard)
35
+ - Improved generation of tag names for some JSON tag ID's containing colons
36
+ - Fixed "Undefined subroutine" error when writing makernotes as a block
37
+ - Fixed missing ID in family 7 group name for ID3 tags which are not valid for
38
+ the specified ID3 version
39
+ - Fixed bug where some tags from alternate files (with the -fileNUM option)
40
+ could show up as "not defined" when used in expressions even though they did
41
+ exist
42
+ - API Changes:
43
+ - Added NoMandatory option
44
+
45
+ Nov. 19, 2023 - Version 12.70 (production release) - "20th Anniversary"
46
+
47
+ - This marks the 20th anniversary of the initial ExifTool release!
48
+ - Added ability to read/delete C2PA CAI JUMBF metadata from TIFF-based images
49
+ (eg. DNG), QuickTime-based files (eg. MP4) and WebP images, and read JUMBF
50
+ from other RIFF-based files (eg. WAV, AVI), GIF images and ID3v2 metadata
51
+ - Added read/write support for JPH images
52
+ - Added ability to read Leica Q3 maker notes
53
+ - Added ability to recognize and write FujiFilm M-RAW RAF images (multiple raw
54
+ images in a single file) and the ability to read preview-less RAF images
55
+ - Added support for reading a number of obscure Microsoft EXIF tags
56
+ - Added a few new Sony lenses and support for the ILCE-9M3 (thanks Jos Roost)
57
+ - Added a couple of new Panasonic Leica lenses
58
+ - Added a couple of new Canon RF lenses (thanks Norbert Wasser)
59
+ - Added a number of new CPUType values for ELF executables
60
+ - Added some new Olympus CameraType values
61
+ - Decode a few more ID3v2.2 tags (github #142)
62
+ - Decode a few new Canon G5X Mark II tags (thanks Martin B.)
63
+ - Decode WB_RGGBLevels for a few more Nikon cameras
64
+ - Extract information from FujiFilm M-RAW header
65
+ - Improved decoding of a few Nikon Z tags (thanks Warren Hatch)
66
+ - Marked misspelt XMP-drone-dji:GPSLongtitude tag to Avoid when writing
67
+ - Changed RIFF MaxDataRate conversion to use SI prefixes by default
68
+ - Fixed decoding of unknown ColorBalance information for some Nikon models
69
+ - Fixed an incorrect Nikon Z LensID
70
+ - API Changes:
71
+ - Added ByteUnit option
72
+
73
+ Oct. 26, 2023 - Version 12.69
74
+
75
+ - Added support for DNG version 1.7.0.0
76
+ - Added a new XMP-GCamera tag
77
+ - Added a number of new Nikon Z lenses (thanks Warren Hatch and Stefan)
78
+ - Added a number of new XMP-crs tags
79
+ - Extract XML metadata from some Hasselblad images
80
+ - Tweaked -fast2 option to read metadata from inside mdat atom of HEIC images
81
+ - Patched FFF reader to be more tolerant of the mess made by incompetent
82
+ Hasselblad programmers (wrong IFD count for some values)
83
+ - Patched WebP reader to be more tolerant of the mess made by incompetent
84
+ Google programmers (EXIF with wrong header and XMP with wrong ID)
85
+ - Fixed writing of MakerNotes as a block to CR3 images (now properly stored in
86
+ the CMT3 chunk instead of the ExifIFD) and added ability to delete them from
87
+ the ExifIFD of CR3 images
88
+ - Fixed problem which could cause runtime error when copying MakerNotes from a
89
+ file that contains multiple maker note blocks
90
+ - Fixed problem which could cause "use of uninitialized variable" warnings
91
+ when reading images from some Nikon cameras
92
+ - Fixed List type for new XMP-photomech:CreatorIdentity tag
93
+
10
94
  Oct. 16, 2023 - Version 12.68
11
95
 
12
96
  - Added preliminary read support for XISF images
13
- - Added the ability to delete JUMBF metadata from PNG images
97
+ - Added the ability to delete CAI JUMBF metadata from PNG images
14
98
  - Added support for writing Canon burst-roll CR3 images
15
- - Added a new Nikon Z9 SubjectDetection value, and improved Zf support
99
+ - Added a new Nikon Z9 SubjectDetection value, and improved Zf support (thanks
100
+ Warren Hatch)
16
101
  - Added a couple of new PentaxModelID values
17
102
  - Added a few couple of new tag values for the Pentax K-3 Mark III Monochrome (github #226)
18
- - Added a support for a new XMP-photomech tag
103
+ - Added a new XMP-photomech tag
104
+ - Added a new QuickTime ItemList tag
19
105
  - Added a new Nikon LensID
20
106
  - Added a new Canon LensType
21
- - Added a new QuickTime ItemList tag
22
107
  - Support decimal values for FujiFilm ShadowTone and HighlightTone tags
23
108
  - Decode some new Sony tags (thanks Jos Roost)
24
- - Decode ShutterCount for Canon EOS R6 (thanks gamin)
109
+ - Decode ShutterCount for Canon EOS R6 (thanks Martin B.)
25
110
  - Decode QuickTime VideoFullRangeFlag
26
111
  - Decode JPGCompression for the Nikon D3S
27
112
  - Enhanced -geotag feature to allow writing QuickTime:GPSCoordinates
@@ -176,8 +261,6 @@ Apr. 5, 2023 - Version 12.60 (production release)
176
261
  - Fixed problem where setting the Geotime value didn't work when using an
177
262
  advanced-formatting expression containing a greater-than symbol (>)
178
263
 
179
- History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
180
-
181
264
  Mar. 28, 2023 - Version 12.59
182
265
 
183
266
  - COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
@@ -307,7 +390,7 @@ Dec. 6, 2022 - Version 12.52
307
390
  Nov. 21, 2022 - Version 12.51
308
391
 
309
392
  - Added a new Olympus LensType (thanks Herb)
310
- - Extract C2PA JUMBF metadata from PNG images and extract C2PA Salt values
393
+ - Extract C2PA CAI JUMBF metadata from PNG images and extract C2PA Salt values
311
394
  - Decode NikonSettings for Z9 firmware 3.0 (thanks Warren Hatch)
312
395
  - Decode additional camm metadata from Insta360 Pro2 MP4 videos
313
396
  - Improved Verbose output when writing Composite tags to add a "+" sign to
@@ -690,8 +773,8 @@ Oct. 16, 2021 - Version 12.33
690
773
 
691
774
  Sept. 30, 2021 - Version 12.32
692
775
 
693
- - Added support for CBOR-format metadata in JUMBF (note that JUMBF support is
694
- still experimental)
776
+ - Added support for CBOR-format metadata in CAI JUMBF (note that JUMBF support
777
+ is still experimental)
695
778
  - Added a new Nikon LensID
696
779
  - Added a new Pentax LensType
697
780
  - Decode timed GPS for two more dashcam formats
@@ -750,7 +833,7 @@ July 9, 2021 - Version 12.29
750
833
  - Improved a QuickTime "File format error" message to be more meaningful, and
751
834
  made it a minor error
752
835
  - Changed PNG writer to add EXIF before IDAT
753
- - Some changes the way JUMBF metadata is handled
836
+ - Some changes the way CAI JUMBF metadata is handled
754
837
  - Patched to read timed GPS from a different type of INSV videos
755
838
  - Patched a security issue
756
839
  - Fixed problem where ExifTool could hang when processing mebx timed metadata
@@ -826,7 +909,7 @@ Apr. 13, 2021 - Version 12.24
826
909
  - Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
827
910
  - Updated acdsee.config in distribution (thanks StarGeek)
828
911
  - Recognize AutoCAD DXF files
829
- - More work on experimental JUMBF read support
912
+ - More work on experimental CAI JUMBF read support
830
913
  - More work on experimental JPEG XL read/write support
831
914
  - Patched security vulnerability in DjVu reader
832
915
 
@@ -834,8 +917,8 @@ Apr. 1, 2021 - Version 12.23
834
917
 
835
918
  - Added support for Olympus ORI files
836
919
  - Added experimental read/write support for JPEG XL images
837
- - Added experimental read support for JUMBF metadata in JPEG and Jpeg2000
838
- images
920
+ - Added experimental read support for CAI (Content Authenticity Initiative)
921
+ JUMBF-format metadata in JPEG and Jpeg2000 images
839
922
  - Added built-in support for parsing GPS track from Denver ACG-8050 videos
840
923
  with the -ee option
841
924
  - Added a some new Sony lenses (thanks Jos Roost and LibRaw)
data/bin/MANIFEST CHANGED
@@ -41,6 +41,7 @@ fmt_files/kml_track.fmt
41
41
  html/ExifTool.html
42
42
  html/MIE1.1-20070121.pdf
43
43
  html/Shift.html
44
+ html/TagNames/AAC.html
44
45
  html/TagNames/AFCP.html
45
46
  html/TagNames/AIFF.html
46
47
  html/TagNames/APE.html
@@ -214,6 +215,7 @@ lib/File/RandomAccess.pod
214
215
  lib/Image/ExifTool.pm
215
216
  lib/Image/ExifTool.pod
216
217
  lib/Image/ExifTool/7Z.pm
218
+ lib/Image/ExifTool/AAC.pm
217
219
  lib/Image/ExifTool/AES.pm
218
220
  lib/Image/ExifTool/AFCP.pm
219
221
  lib/Image/ExifTool/AIFF.pm
@@ -441,6 +443,8 @@ lib/Image/ExifTool/ZIP.pm
441
443
  lib/Image/ExifTool/ZISRAW.pm
442
444
  lib/Image/ExifTool/iWork.pm
443
445
  perl-Image-ExifTool.spec
446
+ t/AAC.t
447
+ t/AAC_2.out
444
448
  t/AFCP.t
445
449
  t/AFCP_2.out
446
450
  t/AFCP_3.out
@@ -979,6 +983,7 @@ t/ZIP_7.out
979
983
  t/ZIP_8.out
980
984
  t/ZISRAW.t
981
985
  t/ZISRAW_2.out
986
+ t/images/AAC.aac
982
987
  t/images/AFCP.jpg
983
988
  t/images/AIFF.aif
984
989
  t/images/APE.ape
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.68"
53
+ "version" : "12.72"
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: 12.68
34
+ version: 12.72
data/bin/README CHANGED
@@ -14,13 +14,14 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
18
- 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
19
- 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
20
- 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
21
- 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
22
- A r | DVR-MS r | JSON r | OFR r | RWL r/w
23
- AA r | DYLIB r | JXL r | OGG r | RWZ r
17
+ 360 r/w | DOCX r | ISO r | NRW r/w | RAR r
18
+ 3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
19
+ 3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
20
+ 3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
21
+ 7Z r | DV r | JP2 r/w | ODS r | RTF r
22
+ A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
23
+ AA r | DVR-MS r | JSON r | OFR r | RWL r/w
24
+ AAC r | DYLIB r | JXL r | OGG r | RWZ r
24
25
  AAE r | EIP r | K25 r | OGV r | RM r
25
26
  AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
26
27
  ACR r | EPUB r | KEY r | OPUS r | SKETCH r
@@ -56,7 +57,6 @@ supported by ExifTool (r = read, w = write, c = create):
56
57
  DLL r | INSP r/w | MXF r | RA r | XLSX r
57
58
  DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
58
59
  DOC r | INX r | NKSC r/w | RAM r | ZIP r
59
- DOCX r | ISO r | NRW r/w | RAR r |
60
60
 
61
61
  Meta Information
62
62
  ----------------------+----------------------+---------------------
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
108
108
  terminal window to extract and run ExifTool:
109
109
 
110
110
  cd ~/Desktop
111
- gzip -dc Image-ExifTool-12.68.tar.gz | tar -xf -
112
- cd Image-ExifTool-12.68
111
+ gzip -dc Image-ExifTool-12.72.tar.gz | tar -xf -
112
+ cd Image-ExifTool-12.72
113
113
  ./exiftool t/images/ExifTool.jpg
114
114
 
115
115
  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 = '12.68';
14
+ my $version = '12.72';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -1642,7 +1642,10 @@ if (@newValues) {
1642
1642
  if ($tag =~ /^(All)?TagsFromFile$/i) {
1643
1643
  defined $newVal or Error("Need file name for -tagsFromFile\n"), next Command;
1644
1644
  ++$isWriting;
1645
- if ($newVal eq '@' or not defined FilenameSPrintf($newVal)) {
1645
+ if ($newVal eq '@' or not defined FilenameSPrintf($newVal) or
1646
+ # can't set tags yet if we are using tags from other files with the -fileNUM option
1647
+ grep /\bfile\d+:/i, @{$setTags{$newVal}})
1648
+ {
1646
1649
  push @dynamicFiles, $newVal;
1647
1650
  next; # set tags from dynamic file later
1648
1651
  }
@@ -4628,13 +4631,14 @@ supported by ExifTool (r = read, w = write, c = create):
4628
4631
 
4629
4632
  File Types
4630
4633
  ------------+-------------+-------------+-------------+------------
4631
- 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
4632
- 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
4633
- 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
4634
- 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
4635
- 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
4636
- A r | DVR-MS r | JSON r | OFR r | RWL r/w
4637
- AA r | DYLIB r | JXL r | OGG r | RWZ r
4634
+ 360 r/w | DOCX r | ISO r | NRW r/w | RAR r
4635
+ 3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
4636
+ 3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
4637
+ 3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
4638
+ 7Z r | DV r | JP2 r/w | ODS r | RTF r
4639
+ A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
4640
+ AA r | DVR-MS r | JSON r | OFR r | RWL r/w
4641
+ AAC r | DYLIB r | JXL r | OGG r | RWZ r
4638
4642
  AAE r | EIP r | K25 r | OGV r | RM r
4639
4643
  AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
4640
4644
  ACR r | EPUB r | KEY r | OPUS r | SKETCH r
@@ -4670,7 +4674,6 @@ supported by ExifTool (r = read, w = write, c = create):
4670
4674
  DLL r | INSP r/w | MXF r | RA r | XLSX r
4671
4675
  DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
4672
4676
  DOC r | INX r | NKSC r/w | RAM r | ZIP r
4673
- DOCX r | ISO r | NRW r/w | RAR r |
4674
4677
 
4675
4678
  Meta Information
4676
4679
  ----------------------+----------------------+---------------------
@@ -4738,7 +4741,7 @@ L<Input-output text formatting|/Input-output text formatting>
4738
4741
  -n (--printConv) No print conversion
4739
4742
  -p FMTFILE (-printFormat) Print output in specified format
4740
4743
  -php Export tags as a PHP Array
4741
- -s[NUM] (-short) Short output format
4744
+ -s[NUM] (-short) Short output format (-s for tag names)
4742
4745
  -S (-veryShort) Very short output format
4743
4746
  -sep STR (-separator) Set separator string for list items
4744
4747
  -sort Sort output alphabetically
@@ -4951,7 +4954,7 @@ while C<-all:all=> deletes entire blocks.
4951
4954
  application segments which are not associated with another deletable group.
4952
4955
  For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
4953
4956
  segment because this is accomplished with C<-Adobe:All>. But note that
4954
- these unnamed APP segments may not be excluded with C<--APPxx:all>) when
4957
+ these unnamed APP segments may not be excluded with C<--APPxx:all> when
4955
4958
  deleting all information.
4956
4959
 
4957
4960
  6) When shifting a value, the shift is applied to the original value of the
@@ -5440,7 +5443,7 @@ tags specified for the specific SourceFile processed. The imported JSON
5440
5443
  file must have the same format as the exported JSON files with the exception
5441
5444
  that options exporting JSON objects instead of simple values are not
5442
5445
  compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
5443
- or B<-T> is not compatable, and use B<-G> instead of B<-g>). Additionally,
5446
+ or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
5444
5447
  tag names in the input JSON file may be suffixed with a C<#> to disable
5445
5448
  print conversion.
5446
5449
 
@@ -5582,7 +5585,7 @@ with this command:
5582
5585
 
5583
5586
  produces output like this:
5584
5587
 
5585
- -- Generated by ExifTool 12.68 --
5588
+ -- Generated by ExifTool 12.72 --
5586
5589
  File: a.jpg - 2003:10:31 15:44:19
5587
5590
  (f/5.6, 1/60s, ISO 100)
5588
5591
  File: b.jpg - 2006:05:23 11:57:38
@@ -6593,20 +6596,24 @@ option no longer suppresses the output "{readyNUM}" message.
6593
6596
 
6594
6597
  Read tags from an alternate source file. Among other things, this allows
6595
6598
  tags from different files to be compared and combined using the B<-if> and
6596
- B<-p> options. Tags from alternate files are accessed via the corresponding
6597
- family 8 group name (eg. C<File1:TAG> for the B<-file1> option, C<File2:TAG>
6598
- for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes like
6599
- the B<-w> option (%d, %f, etc), and/or tag names with a leading C<$> symbol
6600
- to access tags from the source file in the same way as the B<-p> option (so
6601
- any other dollar symbol in the file name must be doubled, eg.
6602
- C<money$$.jpg>). For example, assuming that the OriginalFileName tag has
6603
- been set in the edited file, a command to copy Rights from the original file
6604
- could look like this:
6599
+ B<-p> options. I<NUM> is any string of digits. Tags from alternate files
6600
+ are accessed via the corresponding family 8 group name (eg. C<File1:TAG> for
6601
+ the B<-file1> option, C<File2:TAG> for B<-file2>, etc). I<ALTFILE> may
6602
+ contain filename formatting codes like the B<-w> option (%d, %f, etc),
6603
+ and/or tag names with a leading C<$> symbol to access tags from the source
6604
+ file in the same way as the B<-p> option (so any other dollar symbol in the
6605
+ file name must be doubled, eg. C<money$$.jpg>). For example, assuming that
6606
+ the OriginalFileName tag has been set in the edited file, a command to copy
6607
+ Rights from the original file could look like this:
6605
6608
 
6606
6609
  exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
6607
6610
 
6608
- Composite tags may access tags from alternate files using the appropriate
6609
- (case-sensitive) family 8 group name.
6611
+ Subtle note: If a B<-tagsFromFile> option is used, tags in the I<ALTFILE>
6612
+ argument come from the I<SRCFILE> that applies to the first argument
6613
+ accessing tags from the corresponding C<FileNUM> group.
6614
+
6615
+ User-defined Composite tags may access tags from alternate files using the
6616
+ appropriate (case-sensitive) family 8 group name.
6610
6617
 
6611
6618
  =item B<-list_dir>
6612
6619
 
@@ -0,0 +1,175 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: AAC.pm
3
+ #
4
+ # Description: Read AAC audio files
5
+ #
6
+ # Revisions: 2023-12-29 - P. Harvey Created
7
+ #------------------------------------------------------------------------------
8
+
9
+ package Image::ExifTool::AAC;
10
+
11
+ use strict;
12
+ use vars qw($VERSION);
13
+ use Image::ExifTool qw(:DataAccess :Utils);
14
+ use Image::ExifTool::FLAC;
15
+
16
+ $VERSION = '1.00';
17
+
18
+ my %convSampleRate = (
19
+ 0 => 96000, 7 => 22050,
20
+ 1 => 88200, 8 => 16000,
21
+ 2 => 64000, 9 => 12000,
22
+ 3 => 48000, 10 => 11025,
23
+ 4 => 44100, 11 => 8000,
24
+ 5 => 32000, 12 => 7350,
25
+ 6 => 24000,
26
+ );
27
+
28
+ %Image::ExifTool::AAC::Main = (
29
+ PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
30
+ GROUPS => { 2 => 'Audio' },
31
+ # Bit000-011 - sync word (all 1's)
32
+ # Bit012 - ID (seems to be always 0)
33
+ # Bit013-014 - layer (00)
34
+ # Bit015 - CRC absent (0=crc exists, 1=no crc)
35
+ 'Bit016-017' => {
36
+ Name => 'ProfileType',
37
+ PrintConv => {
38
+ 0 => 'Main',
39
+ 1 => 'Low Complexity',
40
+ 2 => 'Scalable Sampling Rate',
41
+ },
42
+ },
43
+ 'Bit018-021' => {
44
+ Name => 'SampleRate',
45
+ ValueConv => \%convSampleRate,
46
+ },
47
+ # Bit022 - private
48
+ 'Bit023-025' => {
49
+ Name => 'Channels',
50
+ PrintConv => {
51
+ 0 => '?',
52
+ 1 => 1,
53
+ 2 => 2,
54
+ 3 => 3,
55
+ 4 => 4,
56
+ 5 => 5,
57
+ 6 => '5+1',
58
+ 7 => '7+1',
59
+ },
60
+ },
61
+ # Bit026 - original/copy
62
+ # Bit027 - home
63
+ # Bit028 - copyright ID
64
+ # Bit029 - copyright start
65
+ # Bit030-042 - FrameLength
66
+ # Bit043-053 - buffer fullness
67
+ # Bit054-055 - BlocksInFrame (minus 1)
68
+ # Note: Bitrate for frame = FrameLength * 8 * SampleRate / ((BlocksInFrame+1) * 1024)
69
+ # - but all frames must be scanned to calculate average bitrate
70
+ Encoder => {
71
+ Name => 'Encoder',
72
+ Notes => 'taken from filler payload of first frame',
73
+ },
74
+ );
75
+
76
+ #------------------------------------------------------------------------------
77
+ # Read information from an AAC file
78
+ # Inputs: 0) ExifTool object reference, 1) Directory information reference
79
+ # Returns: 1 on success, 0 if this wasn't a valid AAC file
80
+ sub ProcessAAC($$)
81
+ {
82
+ my ($et, $dirInfo) = @_;
83
+ my $raf = $$dirInfo{RAF};
84
+ my ($buff, $buf2);
85
+
86
+ # format of frame header (7 bytes):
87
+ # SSSS SSSS SSSS ILLC PPRR RRpC CCoh csff ffff ffff fffb bbbb bbbb bbNN
88
+ # 1111 1111 1111 0001 0110 0000 0100 0000 0000 0101 0101 1111 1111 1100 (eg.)
89
+ # S = sync word o = original/copy
90
+ # I = ID h = home
91
+ # L = layer (00) c = copyright ID
92
+ # C = CRC absent s = copyright start
93
+ # P = profile object type f = frame length
94
+ # R = sampling rate index b = buffer fullness
95
+ # p = private N = number of raw data blocks in frame
96
+ # C = channel configuration
97
+
98
+ $raf->Read($buff, 7) == 7 or return 0;
99
+ return 0 unless $buff =~ /^\xff[\xf0\xf1]/;
100
+ my @t = unpack('NnC', $buff);
101
+ return 0 if (($t[0] >> 16) & 0x03) == 3; # (reserved profile type)
102
+ return 0 if (($t[0] >> 12) & 0x0f) > 12; # validate sampling frequency index
103
+ my $len = (($t[0] << 11) & 0x1800) | (($t[1] >> 5) & 0x07ff);
104
+ return 0 if $len < 7;
105
+
106
+ $et->SetFileType();
107
+
108
+ my $tagTablePtr = GetTagTable('Image::ExifTool::AAC::Main');
109
+ $et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr);
110
+
111
+ # read the first frame data to check for a filler with the encoder name
112
+ if ($len > 8 and $raf->Read($buff, $len-7) == $len-7) {
113
+ my $noCRC = ($t[0] & 0x00010000);
114
+ my $blocks = ($t[2] & 0x03);
115
+ my $pos = 0;
116
+ $pos += 2 + 2 * $blocks unless $noCRC;
117
+ last if $pos + 2 > length($buff);
118
+ my $tmp = unpack("x${pos}n", $buff);
119
+ my $id = $tmp >> 13;
120
+ # read filler payload
121
+ if ($id == 6) {
122
+ my $cnt = ($tmp >> 9) & 0x0f;
123
+ ++$pos;
124
+ if ($cnt == 15) {
125
+ $cnt += (($tmp >> 1) & 0xff) - 1 if $cnt == 15;
126
+ ++$pos;
127
+ }
128
+ if ($pos + $cnt < length($buff)) {
129
+ my $dat = substr($buff, $pos, $cnt);
130
+ $dat =~ s/^\0+//;
131
+ $dat =~ s/\0+$//;
132
+ $et->HandleTag($tagTablePtr, Encoder => $dat) if $dat =~ /^[\x20-\x7e]+$/;
133
+ }
134
+ }
135
+ }
136
+
137
+ return 1;
138
+ }
139
+
140
+ 1; # end
141
+
142
+ __END__
143
+
144
+ =head1 NAME
145
+
146
+ Image::ExifTool::AAC - Read AAC audio files
147
+
148
+ =head1 SYNOPSIS
149
+
150
+ This module is used by Image::ExifTool
151
+
152
+ =head1 DESCRIPTION
153
+
154
+ This module contains definitions required by Image::ExifTool to read AAC
155
+ audio files.
156
+
157
+ =head1 NOTES
158
+
159
+ Since ISO charges money for the official AAC specification, this module is
160
+ based on unofficial sources which may be incomplete, inaccurate or outdated.
161
+
162
+ =head1 AUTHOR
163
+
164
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
165
+
166
+ This library is free software; you can redistribute it and/or modify it
167
+ under the same terms as Perl itself.
168
+
169
+ =head1 SEE ALSO
170
+
171
+ L<Image::ExifTool::TagNames/AAC Tags>,
172
+ L<Image::ExifTool(3pm)|Image::ExifTool>
173
+
174
+ =cut
175
+
@@ -219,7 +219,8 @@ writable directly, but is written automatically by ExifTool (often when a
219
219
  corresponding L<Composite|Image::ExifTool::TagNames/Composite Tags> or
220
220
  L<Extra|Image::ExifTool::TagNames/Extra Tags> tag is written). A colon
221
221
  (C<:>) indicates a I<Mandatory> tag which may be added automatically when
222
- writing. Normally MakerNotes tags may not be deleted individually, but a
222
+ writing (use the API L<NoMandatory|../ExifTool.html#NoMandatory> option to avoid creating mandatory EXIF
223
+ tags). Normally MakerNotes tags may not be deleted individually, but a
223
224
  caret (C<^>) indicates a I<Deletable> MakerNotes tag.
224
225
 
225
226
  The HTML version of these tables also lists possible B<Values> for
@@ -7,6 +7,7 @@
7
7
  #
8
8
  # References: 1) https://c2pa.org/public-draft/
9
9
  # 2) https://datatracker.ietf.org/doc/html/rfc7049
10
+ # 3) https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml
10
11
  #------------------------------------------------------------------------------
11
12
 
12
13
  package Image::ExifTool::CBOR;
@@ -15,7 +16,7 @@ use vars qw($VERSION);
15
16
  use Image::ExifTool qw(:DataAccess :Utils);
16
17
  use Image::ExifTool::JSON;
17
18
 
18
- $VERSION = '1.01';
19
+ $VERSION = '1.02';
19
20
 
20
21
  sub ProcessCBOR($$$);
21
22
  sub ReadCBORValue($$$$);
@@ -28,15 +29,27 @@ my %cborType6 = (
28
29
  3 => 'negative bignum',
29
30
  4 => 'decimal fraction',
30
31
  5 => 'bigfloat',
32
+ 16 => 'COSE Encrypt0', #3 (COSE Single Recipient Encrypted Data Object)
33
+ 17 => 'COSE Mac0', #3 (COSE Mac w/o Recipients Object)
34
+ 18 => 'COSE Sign1', #3 (COSE Single Signer Data Object)
35
+ 19 => 'COSE Countersignature', #3 (COSE standalone V2 countersignature)
31
36
  21 => 'expected base64url encoding',
32
37
  22 => 'expected base64 encoding',
33
38
  23 => 'expected base16 encoding',
34
39
  24 => 'encoded CBOR data',
40
+ 25 => 'string number', #3 (reference the nth previously seen string)
41
+ 26 => 'serialized Perl', #3 (Serialised Perl object with classname and constructor arguments)
42
+ 27 => 'serialized code', #3 (Serialised language-independent object with type name and constructor arguments)
43
+ 28 => 'shared value', #3 (mark value as (potentially) shared)
44
+ 29 => 'shared value number', #3 (reference nth marked value)
45
+ 30 => 'rational', #3 (Rational number)
46
+ 31 => 'missing array value', #3 (Absent value in a CBOR Array)
35
47
  32 => 'URI',
36
48
  33 => 'base64url',
37
49
  34 => 'base64',
38
50
  35 => 'regular expression',
39
51
  36 => 'MIME message',
52
+ # (lots more after this in ref 3, but don't include them unless we see them)
40
53
  55799 => 'CBOR magic number',
41
54
  );
42
55
 
@@ -212,7 +225,7 @@ sub ReadCBORValue($$$$)
212
225
  {
213
226
  $val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
214
227
  }
215
- } elsif ($fmt == 7) {
228
+ } elsif ($fmt == 7) {
216
229
  if ($dat == 31) {
217
230
  undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
218
231
  } elsif ($dat < 24) {
@@ -263,6 +276,7 @@ sub ProcessCBOR($$$)
263
276
  my ($val, $err, $tag, $i);
264
277
 
265
278
  $et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
279
+ SetByteOrder('MM');
266
280
 
267
281
  $$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
268
282
 
@@ -320,6 +334,8 @@ under the same terms as Perl itself.
320
334
 
321
335
  =item L<https://datatracker.ietf.org/doc/html/rfc7049>
322
336
 
337
+ =item L<https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml>
338
+
323
339
  =back
324
340
 
325
341
  =head1 SEE ALSO