exiftool_vendored 13.12.0 → 13.16.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +79 -22
  3. data/bin/MANIFEST +7 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/arg_files/exif2xmp.args +4 -0
  8. data/bin/arg_files/xmp2exif.args +2 -1
  9. data/bin/build_geolocation +1 -1
  10. data/bin/exiftool +6 -5
  11. data/bin/lib/Image/ExifTool/AFCP.pm +5 -5
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +20 -15
  13. data/bin/lib/Image/ExifTool/Canon.pm +5 -3
  14. data/bin/lib/Image/ExifTool/DJI.pm +64 -11
  15. data/bin/lib/Image/ExifTool/EXE.pm +17 -3
  16. data/bin/lib/Image/ExifTool/Geolocation.pm +16 -7
  17. data/bin/lib/Image/ExifTool/ID3.pm +4 -4
  18. data/bin/lib/Image/ExifTool/JPEG.pm +5 -1
  19. data/bin/lib/Image/ExifTool/LigoGPS.pm +1 -0
  20. data/bin/lib/Image/ExifTool/MIE.pm +6 -3
  21. data/bin/lib/Image/ExifTool/Nikon.pm +328 -4
  22. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  23. data/bin/lib/Image/ExifTool/Panasonic.pm +7 -1
  24. data/bin/lib/Image/ExifTool/Protobuf.pm +25 -7
  25. data/bin/lib/Image/ExifTool/QuickTime.pm +215 -59
  26. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +12 -12
  27. data/bin/lib/Image/ExifTool/README +4 -1
  28. data/bin/lib/Image/ExifTool/RIFF.pm +11 -1
  29. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  30. data/bin/lib/Image/ExifTool/TagLookup.pm +4821 -4811
  31. data/bin/lib/Image/ExifTool/TagNames.pod +231 -25
  32. data/bin/lib/Image/ExifTool/Torrent.pm +2 -2
  33. data/bin/lib/Image/ExifTool/Vivo.pm +124 -0
  34. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +114 -63
  35. data/bin/lib/Image/ExifTool/WriteRIFF.pl +3 -1
  36. data/bin/lib/Image/ExifTool/Writer.pl +16 -11
  37. data/bin/lib/Image/ExifTool.pm +24 -8
  38. data/bin/lib/Image/ExifTool.pod +52 -49
  39. data/bin/perl-Image-ExifTool.spec +1 -1
  40. data/lib/exiftool_vendored/version.rb +1 -1
  41. metadata +3 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28231 tags, with 17521 unique tag names.
15
+ They contain a total of 28393 tags, with 17525 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -171,6 +171,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
171
171
  PhotoMechanic PhotoMechanic
172
172
  MIE MIE
173
173
  Samsung Samsung Trailer
174
+ Vivo Vivo
174
175
  EmbeddedVideo no
175
176
  Insta360 no
176
177
  NikonApp no
@@ -12972,34 +12973,56 @@ Thermal parameters extracted from APP4 of some DJI RJPEG files.
12972
12973
 
12973
12974
  =head3 DJI Protobuf Tags
12974
12975
 
12975
- Tags found in protobuf-format DJI djmd and dbgi timed metadata. Only a few
12976
- tags are currently known, but unknown djmd tags may be extracted by setting
12977
- the Unknown option to 1 (or 2 to also extract unknown dbgi debug tags). Tag
12978
- ID's are composed of the corresponding .proto file name combined with the
12979
- hierarchical protobuf field numbers.
12976
+ Tags found in protobuf-format DJI djmd and dbgi timed metadata. The known
12977
+ tags listed below are extracted by default, but unknown djmd tags may be
12978
+ extracted as well by setting the Unknown option to 1, or 2 to also extract
12979
+ unknown dbgi debug tags. Tag ID's are composed of the corresponding .proto
12980
+ file name combined with the hierarchical protobuf field numbers.
12980
12981
 
12981
12982
  ExifTool currently extracts timed GPS plus a few other tags from DJI devices
12982
12983
  which use the following protocols: dvtm_AVATA2.proto (Avanta 2),
12983
- dvtm_ac203.proto (Osmo Action 4), and dvtm_ac204.proto (Osmo Action 5).
12984
+ dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5) and
12985
+ dvtm_wm265e.proto (Mavic 3).
12986
+
12987
+ Note that with the protobuf format, numerical tags missing from the output
12988
+ for a given protocol should be considered to have the default value of 0.
12984
12989
 
12985
12990
  Tag ID Tag Name Writable
12986
12991
  ------ -------- --------
12987
12992
  'Protocol' Protocol no
12993
+ 'dvtm_AVATA2_1-1-5' SerialNumber no
12988
12994
  'dvtm_AVATA2_1-1-10' Model no
12989
- 'dvtm_AVATA2_2-2-3-1' SerialNumber no
12995
+ 'dvtm_AVATA2_2-2-3-1' SerialNumber2 no
12990
12996
  'dvtm_AVATA2_2-3' FrameInfo DJI FrameInfo
12991
12997
  'dvtm_AVATA2_3-1-2' TimeStamp no
12992
12998
  'dvtm_AVATA2_3-4-4-1' GPSInfo DJI GPSInfo
12999
+ 'dvtm_ac203_1-1-5' SerialNumber no
12993
13000
  'dvtm_ac203_1-1-10' Model no
12994
13001
  'dvtm_ac203_2-3' FrameInfo DJI FrameInfo
12995
13002
  'dvtm_ac203_3-4-2-1' GPSInfo DJI GPSInfo
12996
13003
  'dvtm_ac203_3-4-2-2' GPSAltitude no
12997
13004
  'dvtm_ac203_3-4-2-6-1' GPSDateTime no
13005
+ 'dvtm_ac204_1-1-5' SerialNumber no
12998
13006
  'dvtm_ac204_1-1-10' Model no
12999
13007
  'dvtm_ac204_2-3' FrameInfo DJI FrameInfo
13000
13008
  'dvtm_ac204_3-4-2-1' GPSInfo DJI GPSInfo
13001
13009
  'dvtm_ac204_3-4-2-2' GPSAltitude no
13002
13010
  'dvtm_ac204_3-4-2-6-1' GPSDateTime no
13011
+ 'dvtm_wm265e_1-1-5' SerialNumber no
13012
+ 'dvtm_wm265e_1-1-10' Model no
13013
+ 'dvtm_wm265e_2-2' FrameInfo DJI FrameInfo
13014
+ 'dvtm_wm265e_3-2-2-1' ISO no
13015
+ 'dvtm_wm265e_3-2-3-1' ShutterSpeed no
13016
+ 'dvtm_wm265e_3-2-6-1' DigitalZoom no
13017
+ 'dvtm_wm265e_3-3-3-1' DroneRoll no
13018
+ 'dvtm_wm265e_3-3-3-2' DronePitch no
13019
+ 'dvtm_wm265e_3-3-3-3' DroneYaw no
13020
+ 'dvtm_wm265e_3-3-4-1' GPSInfo DJI GPSInfo
13021
+ 'dvtm_wm265e_3-3-4-2' AbsoluteAltitude no
13022
+ 'dvtm_wm265e_3-3-5-1' RelativeAltitude no
13023
+ 'dvtm_wm265e_3-4-3-1' GimbalPitch no
13024
+ 'dvtm_wm265e_3-4-3-2' GimbalRoll no
13025
+ 'dvtm_wm265e_3-4-3-3' GimbalYaw no
13003
13026
 
13004
13027
  =head3 DJI FrameInfo Tags
13005
13028
 
@@ -17214,6 +17237,8 @@ These tags are extracted from encrypted data in images from the Z9.
17214
17237
  MenuSettingsOffsetZ9v4 Nikon MenuSettingsZ9v3
17215
17238
  -
17216
17239
  Nikon MenuSettingsZ9v4
17240
+ -
17241
+ Nikon MenuSettingsZ9v5
17217
17242
 
17218
17243
  =head3 Nikon MenuSettingsZ9 Tags
17219
17244
 
@@ -17375,7 +17400,7 @@ These tags are used by the Z9 firmware 3.00.
17375
17400
 
17376
17401
  =head3 Nikon MenuSettingsZ9v4 Tags
17377
17402
 
17378
- These tags are used by the Z9 firmware 4.0.0 and 4.1.0
17403
+ These tags are used by the Z9 firmware 4.0.0 and 4.1.0.
17379
17404
 
17380
17405
  Index1 Tag Name Writable
17381
17406
  ------ -------- --------
@@ -17515,6 +17540,148 @@ These tags are used by the Z9 firmware 4.0.0 and 4.1.0
17515
17540
  2070 BracketButtonPlaybackMode int8u
17516
17541
  2072 FlashModeButtonPlaybackMode int8u
17517
17542
 
17543
+ =head3 Nikon MenuSettingsZ9v5 Tags
17544
+
17545
+ These tags are used by the Z9 firmware 5.1.
17546
+
17547
+ Index1 Tag Name Writable
17548
+ ------ -------- --------
17549
+ 72 HighFrameRate int8u
17550
+ 158 MultipleExposureMode int8u
17551
+ 160 MultiExposureShots int8u
17552
+ 208 Intervals int32u
17553
+ 212 ShotsPerInterval int32u
17554
+ 252 FocusShiftNumberShots int8u
17555
+ 256 FocusShiftStepWidth int8u
17556
+ 260 FocusShiftInterval int8u~
17557
+ 264 FocusShiftExposureLock? int8u
17558
+ 294 PhotoShootingMenuBank int8u
17559
+ 296 ExtendedMenuBanks int8u
17560
+ 332 PhotoShootingMenuBankImageArea int8u
17561
+ 346 AutoISO int8u
17562
+ 348 ISOAutoHiLimit? int16u
17563
+ 350 ISOAutoFlashLimit? int16u
17564
+ 358 ISOAutoShutterTime no
17565
+ 440 MovieVignetteControl? int8u
17566
+ 442 DiffractionCompensation int8u
17567
+ 444 FlickerReductionShooting int8u
17568
+ 448 FlashControlMode int8u
17569
+ 450 FlashMasterCompensation? int8s
17570
+ 454 FlashGNDistance? no
17571
+ 458 FlashOutput? int8u
17572
+ 552 AFAreaMode int8u
17573
+ 554 VRMode int8u
17574
+ 558 BracketSet int8u
17575
+ 560 BracketProgram int8u
17576
+ 562 BracketIncrement int8u
17577
+ 574 HDR int8u
17578
+ 580 SecondarySlotFunction int8u
17579
+ 586 HDRLevel int8u
17580
+ 590 Slot2JpgSize? int8u
17581
+ 596 DXCropAlert int8u
17582
+ 598 SubjectDetection int8u
17583
+ 600 DynamicAFAreaSize int8u
17584
+ 640 HighFrequencyFlickerReduction? int8u
17585
+ 650 MovieImageArea? int8u & 0x01
17586
+ 660 MovieType? int8u
17587
+ 662 MovieISOAutoHiLimit? int16u
17588
+ 664 MovieISOAutoControlManualMode? int8u
17589
+ 666 MovieISOAutoManualMode? int16u
17590
+ 740 MovieActiveD-Lighting? int8u
17591
+ 742 MovieHighISONoiseReduction? int8u
17592
+ 748 MovieFlickerReduction int8u
17593
+ 750 MovieMeteringMode? int8u
17594
+ 752 MovieFocusMode? int8u
17595
+ 754 MovieAFAreaMode int8u
17596
+ 756 MovieVRMode? int8u
17597
+ 760 MovieElectronicVR? int8u
17598
+ 762 MovieSoundRecording? int8u
17599
+ 764 MicrophoneSensitivity? int8u
17600
+ 766 MicrophoneAttenuator? int8u
17601
+ 768 MicrophoneFrequencyResponse? int8u
17602
+ 770 WindNoiseReduction? int8u
17603
+ 792 MovieToneMap? int8u
17604
+ 798 MovieFrameSize? int8u
17605
+ 800 MovieFrameRate? int8u
17606
+ 806 MicrophoneJackPower? int8u
17607
+ 807 MovieDXCropAlert? int8u
17608
+ 808 MovieSubjectDetection? int8u
17609
+ 816 MovieHighResZoom? int8u
17610
+ 851 CustomSettingsZ9v4 NikonCustom SettingsZ9v4
17611
+ 1502 Language? int8u
17612
+ 1504 TimeZone int8u
17613
+ 1510 MonitorBrightness? int8u
17614
+ 1532 AFFineTune? int8u
17615
+ 1536 NonCPULens1FocalLength? int16s~
17616
+ 1540 NonCPULens2FocalLength? int16s~
17617
+ 1542 NonCPULens3FocalLength? int16s~
17618
+ 1548 NonCPULens4FocalLength? int16s~
17619
+ 1552 NonCPULens5FocalLength? int16s~
17620
+ 1556 NonCPULens6FocalLength? int16s~
17621
+ 1560 NonCPULens7FocalLength? int16s~
17622
+ 1564 NonCPULens8FocalLength? int16s~
17623
+ 1568 NonCPULens9FocalLength? int16s~
17624
+ 1572 NonCPULens10FocalLength? int16s~
17625
+ 1576 NonCPULens11FocalLength? int16s~
17626
+ 1580 NonCPULens12FocalLength? int16s~
17627
+ 1584 NonCPULens13FocalLength? int16s~
17628
+ 1588 NonCPULens14FocalLength? int16s~
17629
+ 1592 NonCPULens15FocalLength? int16s~
17630
+ 1596 NonCPULens16FocalLength? int16s~
17631
+ 1600 NonCPULens17FocalLength? int16s~
17632
+ 1604 NonCPULens18FocalLength? int16s~
17633
+ 1608 NonCPULens19FocalLength? int16s~
17634
+ 1612 NonCPULens20FocalLength? int16s~
17635
+ 1616 NonCPULens1MaxAperture? int16s~
17636
+ 1620 NonCPULens2MaxAperture? int16s~
17637
+ 1624 NonCPULens3MaxAperture? int16s~
17638
+ 1628 NonCPULens4MaxAperture? int16s~
17639
+ 1632 NonCPULens5MaxAperture? int16s~
17640
+ 1636 NonCPULens6MaxAperture? int16s~
17641
+ 1640 NonCPULens7MaxAperture? int16s~
17642
+ 1644 NonCPULens8MaxAperture? int16s~
17643
+ 1648 NonCPULens9MaxAperture? int16s~
17644
+ 1652 NonCPULens10MaxAperture? int16s~
17645
+ 1656 NonCPULens11MaxAperture? int16s~
17646
+ 1660 NonCPULens12MaxAperture? int16s~
17647
+ 1664 NonCPULens13MaxAperture? int16s~
17648
+ 1668 NonCPULens14MaxAperture? int16s~
17649
+ 1672 NonCPULens15MaxAperture? int16s~
17650
+ 1676 NonCPULens16MaxAperture? int16s~
17651
+ 1680 NonCPULens17MaxAperture? int16s~
17652
+ 1684 NonCPULens18MaxAperture? int16s~
17653
+ 1688 NonCPULens19MaxAperture? int16s~
17654
+ 1692 NonCPULens20MaxAperture? int16s~
17655
+ 1708 HDMIOutputResolution int8u
17656
+ 1721 SetClockFromLocationData? int8u
17657
+ 1728 AirplaneMode? int8u
17658
+ 1729 EmptySlotRelease? int8u
17659
+ 1764 EnergySavingMode? int8u
17660
+ 1788 RecordLocationData? int8u
17661
+ 1792 USBPowerDelivery? int8u
17662
+ 1801 SensorShield? int8u
17663
+ 1866 AutoCapturePreset int8u
17664
+ 1868 FocusShiftAutoReset? int8u
17665
+ 1926 PreReleaseBurstLength int8u
17666
+ 1928 PostReleaseBurstLength int8u
17667
+ 1942 VerticalISOButton int8u
17668
+ 1944 ExposureCompensationButton int8u
17669
+ 1946 ISOButton int8u
17670
+ 2006 ViewModeShowEffectsOfSettings? int8u
17671
+ 2008 DispButton int8u
17672
+ 2052 ExposureDelay fixed32u~
17673
+ 2056 CommandDialFrameAdvanceZoom? int8u
17674
+ 2058 SubCommandDialFrameAdvanceZoom? int8u
17675
+ 2060 PlaybackButton int8u
17676
+ 2062 WBButton int8u
17677
+ 2064 BracketButton int8u
17678
+ 2066 FlashModeButton int8u
17679
+ 2068 LensFunc1ButtonPlaybackMode int8u
17680
+ 2070 LensFunc2ButtonPlaybackMode int8u
17681
+ 2072 PlaybackButtonPlaybackMode int8u
17682
+ 2074 BracketButtonPlaybackMode int8u
17683
+ 2076 FlashModeButtonPlaybackMode int8u
17684
+
17518
17685
  =head3 Nikon ShotInfo Tags
17519
17686
 
17520
17687
  This information is encrypted for ShotInfoVersion 02xx, and some tags are
@@ -23679,6 +23846,16 @@ Tags written by the Sony Image Data Converter utility in ARW images.
23679
23846
  0xd100 VersionCreateDate string
23680
23847
  0xd101 VersionModifyDate string
23681
23848
 
23849
+ =head2 Vivo Tags
23850
+
23851
+ Proprietary information written by some Vivo phones.
23852
+
23853
+ Tag Name Writable
23854
+ -------- --------
23855
+ HDRImage no
23856
+ HiddenData no
23857
+ JSONInfo no
23858
+
23682
23859
  =head2 Unknown Tags
23683
23860
 
23684
23861
  The following tags are decoded in unsupported maker notes. Use the Unknown
@@ -29967,15 +30144,16 @@ appropriate table in the config file (see
29967
30144
  example.config in the full distribution for an
29968
30145
  example). Note that some tags with the same name but different ID's may
29969
30146
  exist in the same location, but the family 7 group names may be used to
29970
- differentiate these. ExifTool currently writes only top-level metadata in
29971
- QuickTime-based files; it extracts other track-specific and timed metadata,
29972
- but can not yet edit tags in these locations (with the exception of
29973
- track-level date/time tags).
30147
+ differentiate these.
29974
30148
 
29975
- Beware that the Keys tags are actually stored inside the ItemList in the
29976
- file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
29977
- deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
29978
- deleted individually with C<-QuickTime:ItemList:all=>.
30149
+ ExifTool currently writes
30150
+ L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
30151
+ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> only as
30152
+ top-level metadata, but select Keys tags are may be written to the audio or
30153
+ video track. See the
30154
+ L<AudioKeys|Image::ExifTool::TagNames/QuickTime AudioKeys Tags> and
30155
+ L<VideoKeys|Image::ExifTool::TagNames/QuickTime VideoKeys Tags> tags for
30156
+ more information.
29979
30157
 
29980
30158
  Alternate language tags may be accessed for
29981
30159
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
@@ -29987,8 +30165,8 @@ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> tags support a
29987
30165
  language code, but without a country code. If no language code is specified
29988
30166
  when writing, the default language is written and alternate languages for
29989
30167
  the tag are deleted. Use the "und" language code to write the default
29990
- language without deleting alternate languages. Note that "eng" is treated
29991
- as a default language when reading, but not when writing.
30168
+ language without deleting alternate languages. Note that when reading,
30169
+ "eng" is also treated as the default language if there is no country code.
29992
30170
 
29993
30171
  According to the specification, integer-format QuickTime date/time tags
29994
30172
  should be stored as UTC. Unfortunately, digital cameras often store local
@@ -30073,7 +30251,7 @@ for the official QuickTime specification.
30073
30251
  The tags below are extracted from timed metadata in QuickTime and other
30074
30252
  formats of video files when the ExtractEmbedded option is used. Although
30075
30253
  most of these tags are combined into the single table below, ExifTool
30076
- currently reads 98 different types of timed GPS metadata from video files.
30254
+ currently reads 100 different types of timed GPS metadata from video files.
30077
30255
 
30078
30256
  Tag Name Writable
30079
30257
  -------- --------
@@ -30276,15 +30454,11 @@ changed via the config file.
30276
30454
  'artist' Artist yes
30277
30455
  'artwork' Artwork yes
30278
30456
  'author' Author yes
30279
- 'camera.framereadouttimeinmicroseconds'
30280
- FrameReadoutTime yes
30281
- 'camera.identifier' CameraIdentifier yes
30282
30457
  'collection.user' UserCollection yes
30283
30458
  'com.android.capture.fps' AndroidCaptureFPS float
30284
30459
  'com.android.manufacturer' AndroidMake yes
30285
30460
  'com.android.model' AndroidModel yes
30286
30461
  'com.android.version' AndroidVersion yes
30287
- 'com.apple.photos.captureMode' CaptureMode yes
30288
30462
  'com.xiaomi.hdr10' XiaomiHDR10 int32s
30289
30463
  'com.xiaomi.preview_video_cover'
30290
30464
  XiaomiPreviewVideoCover int32s
@@ -30353,6 +30527,35 @@ changed via the config file.
30353
30527
  'xiaomi.exifInfo.videoinfo' XiaomiExifInfo yes
30354
30528
  'year' Year yes
30355
30529
 
30530
+ =head3 QuickTime AudioKeys Tags
30531
+
30532
+ Keys tags written in the audio track by some Apple devices. These tags
30533
+ belong to the ExifTool AudioKeys family 1 gorup.
30534
+
30535
+ Tag ID Tag Name Writable
30536
+ ------ -------- --------
30537
+ 'player.movie.audio.balance' Balance yes
30538
+ 'player.movie.audio.bass' Bass yes
30539
+ 'player.movie.audio.gain' AudioGain yes
30540
+ 'player.movie.audio.mute' Mute int8u
30541
+ 'player.movie.audio.pitchshift' PitchShift yes
30542
+ 'player.movie.audio.treble' Treble yes
30543
+
30544
+ =head3 QuickTime VideoKeys Tags
30545
+
30546
+ Keys tags written in the video track. These tags belong to the ExifTool
30547
+ VideoKeys family 1 gorup.
30548
+
30549
+ Tag ID Tag Name Writable
30550
+ ------ -------- --------
30551
+ 'camera.focal_length.35mm_equivalent'
30552
+ FocalLengthIn35mmFormat yes
30553
+ 'camera.framereadouttimeinmicroseconds'
30554
+ FrameReadoutTime yes
30555
+ 'camera.identifier' CameraIdentifier yes
30556
+ 'camera.lens_model' LensModel yes
30557
+ 'com.apple.photos.captureMode' CaptureMode yes
30558
+
30356
30559
  =head3 QuickTime FaceInfo Tags
30357
30560
 
30358
30561
  Tag ID Tag Name Writable
@@ -30452,7 +30655,9 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
30452
30655
  'ipro' ItemProtection? no
30453
30656
  'iprp' ItemProperties QuickTime ItemProp
30454
30657
  'iref' ItemReference QuickTime ItemRef
30455
- 'keys' Keys QuickTime Keys
30658
+ 'keys' AudioKeys QuickTime AudioKeys
30659
+ VideoKeys QuickTime VideoKeys
30660
+ Keys QuickTime Keys
30456
30661
  'pitm' PrimaryItemReference no
30457
30662
  'uuid' MetaVersion no
30458
30663
  UUID-Unknown? no
@@ -32120,6 +32325,7 @@ This chunk is found in lossless WebP files.
32120
32325
  ------ -------- --------
32121
32326
  1 ImageWidth no
32122
32327
  2 ImageHeight no
32328
+ 4 AlphaIsUsed no
32123
32329
 
32124
32330
  =head3 RIFF VP8X Tags
32125
32331
 
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.06';
17
+ $VERSION = '1.07';
18
18
 
19
19
  sub ReadBencode($$$);
20
20
  sub ExtractTags($$$;$$@);
@@ -282,7 +282,7 @@ sub ProcessTorrent($$)
282
282
  my $dict = ReadBencode($et, $raf, \$buff);
283
283
  my $err = $$raf{BencodeError};
284
284
  $et->Warn("Bencode error: $err") if $err;
285
- if (ref $dict eq 'HASH' and ($$dict{announce} or $$dict{'created by'})) {
285
+ if (ref $dict eq 'HASH' and ($$dict{announce} or $$dict{'created by'} or $$dict{info})) {
286
286
  $et->SetFileType();
287
287
  my $tagTablePtr = GetTagTable('Image::ExifTool::Torrent::Main');
288
288
  ExtractTags($et, $dict, $tagTablePtr) and $success = 1;
@@ -0,0 +1,124 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Vivo.pm
3
+ #
4
+ # Description: Read trailer written by Vivo phones
5
+ #
6
+ # Revisions: 2025-01-13 - P. Harvey Created
7
+ #------------------------------------------------------------------------------
8
+
9
+ package Image::ExifTool::Vivo;
10
+
11
+ use strict;
12
+ use vars qw($VERSION);
13
+ use Image::ExifTool qw(:DataAccess :Utils);
14
+ use Image::ExifTool::XMP;
15
+
16
+ $VERSION = '1.00';
17
+
18
+ %Image::ExifTool::Vivo::Main = (
19
+ GROUPS => { 0 => 'Trailer', 1 => 'Vivo', 2 => 'Image' },
20
+ VARS => { NO_ID => 1 },
21
+ NOTES => 'Proprietary information written by some Vivo phones.',
22
+ # (don't know for sure what type of image this is, but it is in JPEG format)
23
+ HDRImage => {
24
+ Notes => 'highlights of HDR image',
25
+ Groups => { 2 => 'Preview' },
26
+ Binary => 1,
27
+ },
28
+ JSONInfo => { },
29
+ HiddenData => {
30
+ Notes => 'hidden in EXIF, not in trailer. This data is lost if the file is edited',
31
+ Groups => { 0 => 'EXIF' },
32
+ },
33
+ );
34
+
35
+ #------------------------------------------------------------------------------
36
+ # Process Vivo trailer
37
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference
38
+ # Returns: 1 on success, -1 if we must scan for the start of the trailer
39
+ # - takes Offset as positive offset from end of trailer to end of file,
40
+ # and returns DataPos and DirLen, and updates OutFile when writing
41
+ sub ProcessVivo($$)
42
+ {
43
+ my ($et, $dirInfo) = @_;
44
+ my $raf = $$dirInfo{RAF};
45
+ my $buff;
46
+
47
+ # return now unless we are at a position to scan for the trailer
48
+ # (must scan because the trailer footer doesn't indicate the trailer length)
49
+ return -1 unless $$dirInfo{ScanForTrailer};
50
+
51
+ my $pos = $raf->Tell();
52
+ $raf->Seek(0, 2) or return 0;
53
+ my $len = $raf->Tell() - $pos - $$dirInfo{Offset};
54
+ $raf->Seek($pos, 0) or return 0;
55
+ return 0 unless $len > 0 and $len < 1e7 and $raf->Read($buff, $len) == $len and
56
+ $buff =~ /\xff{4}\x1b\*9HWfu\x84\x93\xa2\xb1$/ and # validate footer
57
+ $buff =~ /(streamdata|vivo\{")/g; # find start
58
+ my $start = pos($buff) - length($1);
59
+ if ($start) {
60
+ $pos += $start;
61
+ $len -= $start;
62
+ $buff = substr($buff, $start);
63
+ }
64
+ # set trailer position and length
65
+ @$dirInfo{'DataPos','DirLen'} = ($pos, $len);
66
+
67
+ if ($$dirInfo{OutFile}) {
68
+ if ($$et{DEL_GROUP}{Vivo}) {
69
+ $et->VPrint(0, " Deleting Vivo trailer ($len bytes)\n");
70
+ ++$$et{CHANGED};
71
+ } else {
72
+ $et->VPrint(0, " Copying Vivo trailer ($len bytes)\n");
73
+ Write($$dirInfo{OutFile}, $buff);
74
+ }
75
+ } else {
76
+ $et->DumpTrailer($dirInfo) if $$et{OPTIONS}{Verbose} or $$et{HTML_DUMP};
77
+ my $tbl = GetTagTable('Image::ExifTool::Vivo::Main');
78
+ pos($buff) = 0; # rewind search to start of buffer
79
+ if ($buff =~ /^streamdata\xff\xd8\xff/ and $buff =~ /\xff\xd9stream(info|coun)/g) {
80
+ $et->HandleTag($tbl, HDRImage => substr($buff, 10, pos($buff)-20));
81
+ }
82
+ # continue looking for Vivo JSON data
83
+ if ($buff =~ /vivo\{"/g) {
84
+ my $jsonStart = pos($buff) - 2;
85
+ if ($buff =~ /\}\0/g) {
86
+ my $jsonLen = pos($buff) - 1 - $jsonStart;
87
+ $et->HandleTag($tbl, JSONInfo => substr($buff, $jsonStart, $jsonLen));
88
+ }
89
+ }
90
+ }
91
+ return 1;
92
+ }
93
+
94
+ 1; # end
95
+
96
+ __END__
97
+
98
+ =head1 NAME
99
+
100
+ Image::ExifTool::Vivo - Read trailer written by Vivo phones
101
+
102
+ =head1 SYNOPSIS
103
+
104
+ This module is used by Image::ExifTool
105
+
106
+ =head1 DESCRIPTION
107
+
108
+ This module contains definitions required by Image::ExifTool to read
109
+ metadata the trailer written by some Vivo phones.
110
+
111
+ =head1 AUTHOR
112
+
113
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
114
+
115
+ This library is free software; you can redistribute it and/or modify it
116
+ under the same terms as Perl itself.
117
+
118
+ =head1 SEE ALSO
119
+
120
+ L<Image::ExifTool::TagNames/Vivo Tags>,
121
+ L<Image::ExifTool(3pm)|Image::ExifTool>
122
+
123
+ =cut
124
+