exiftool_vendored 13.17.0 → 13.18.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.
@@ -4797,6 +4797,7 @@ my %tagLookup = (
4797
4797
  'mediamodifydate' => { 413 => 0x2 },
4798
4798
  'mediasummarycode' => { 341 => 'MediaSummaryCode' },
4799
4799
  'mediatype' => { 409 => 'stik' },
4800
+ 'mediauid' => { 417 => 'MUID' },
4800
4801
  'memoaudioquality' => { 90 => 0x812 },
4801
4802
  'memorycardconfiguration' => { 451 => 0x16 },
4802
4803
  'memorycardnumber' => { 220 => 0x2 },
@@ -7872,6 +7873,8 @@ my %tagExists = (
7872
7873
  'asin' => 1,
7873
7874
  'asin2' => 1,
7874
7875
  'aspectinfo' => 1,
7876
+ 'aspectratiounwarped' => 1,
7877
+ 'aspectratiowarped' => 1,
7875
7878
  'aspectratiox' => 1,
7876
7879
  'aspectratioy' => 1,
7877
7880
  'assistantdirector' => 1,
@@ -7911,6 +7914,7 @@ my %tagExists = (
7911
7914
  'audioavailablenumberchannels' => 1,
7912
7915
  'audioavgbitrate' => 1,
7913
7916
  'audiobitratecontrolmode' => 1,
7917
+ 'audiobluetooth' => 1,
7914
7918
  'audiobytes' => 1,
7915
7919
  'audiochannellayout' => 1,
7916
7920
  'audiochanneltypes' => 1,
@@ -7949,6 +7953,7 @@ my %tagExists = (
7949
7953
  'audiopacketframesize' => 1,
7950
7954
  'audioprofile' => 1,
7951
7955
  'audioprofileversion' => 1,
7956
+ 'audioprotuneoption' => 1,
7952
7957
  'audioqualitysetting' => 1,
7953
7958
  'audiorequirespacketdescription' => 1,
7954
7959
  'audiosamplecount' => 1,
@@ -7975,12 +7980,14 @@ my %tagExists = (
7975
7980
  'authorship' => 1,
7976
7981
  'authorsortorder' => 1,
7977
7982
  'autoareaafstartingpoint' => 1,
7983
+ 'autoboostscore' => 1,
7978
7984
  'autocaptureoffset' => 1,
7979
7985
  'autoisomin' => 1,
7980
7986
  'autolowlightduration' => 1,
7981
7987
  'automationanimation' => 1,
7982
7988
  'automationflags' => 1,
7983
7989
  'autopoweroff' => 1,
7990
+ 'autoprotune' => 1,
7984
7991
  'autorotation' => 1,
7985
7992
  'autosavefilepath' => 1,
7986
7993
  'autosaveformat' => 1,
@@ -8069,6 +8076,7 @@ my %tagExists = (
8069
8076
  'bitrate' => 1,
8070
8077
  'bitrateinfo' => 1,
8071
8078
  'bitratemutualexclusion' => 1,
8079
+ 'bitratesetting' => 1,
8072
8080
  'bitsperextendedrunlength' => 1,
8073
8081
  'bitsperpixel' => 1,
8074
8082
  'bitsperrunlength' => 1,
@@ -8353,6 +8361,7 @@ my %tagExists = (
8353
8361
  'captproftype' => 1,
8354
8362
  'captprofversion' => 1,
8355
8363
  'captureconditionspar' => 1,
8364
+ 'capturedelaytimer' => 1,
8356
8365
  'capturedevicefid' => 1,
8357
8366
  'captureheightresetblacksegnormal' => 1,
8358
8367
  'captureheightresetblacksegtest' => 1,
@@ -8514,6 +8523,7 @@ my %tagExists = (
8514
8523
  'class' => 1,
8515
8524
  'classificationandmarkingsystem' => 1,
8516
8525
  'classificationcomments' => 1,
8526
+ 'classificationdatapresent' => 1,
8517
8527
  'classificationreason' => 1,
8518
8528
  'classifiedby' => 1,
8519
8529
  'classifyingcountry' => 1,
@@ -8733,6 +8743,7 @@ my %tagExists = (
8733
8743
  'contrastadjustment' => 1,
8734
8744
  'contrastinfo' => 1,
8735
8745
  'controller' => 1,
8746
+ 'controllevel' => 1,
8736
8747
  'conttake' => 1,
8737
8748
  'convergenceangle' => 1,
8738
8749
  'convergencebaseimage' => 1,
@@ -9032,6 +9043,7 @@ my %tagExists = (
9032
9043
  'devicesettings' => 1,
9033
9044
  'devicesounds' => 1,
9034
9045
  'dex' => 1,
9046
+ 'diagonalfieldofview' => 1,
9035
9047
  'dialect' => 1,
9036
9048
  'dicom' => 1,
9037
9049
  'dictionary' => 1,
@@ -9049,6 +9061,7 @@ my %tagExists = (
9049
9061
  'digitalexposuregains' => 1,
9050
9062
  'digitalimagebroker' => 1,
9051
9063
  'digitalsignature' => 1,
9064
+ 'digitalzoomamount' => 1,
9052
9065
  'dimensions' => 1,
9053
9066
  'directionalatob0' => 1,
9054
9067
  'directionalatob1' => 1,
@@ -9188,6 +9201,7 @@ my %tagExists = (
9188
9201
  'duotonehalftoninginfo' => 1,
9189
9202
  'duotoneimageinfo' => 1,
9190
9203
  'duotonetransferfuncs' => 1,
9204
+ 'durationsetting' => 1,
9191
9205
  'dustdeleteapplied' => 1,
9192
9206
  'dustinfo' => 1,
9193
9207
  'dvdid' => 1,
@@ -9217,6 +9231,7 @@ my %tagExists = (
9217
9231
  'eighthlanguage' => 1,
9218
9232
  'electricalextendermagnification' => 1,
9219
9233
  'electronicimagestabilization' => 1,
9234
+ 'electronicstabilizationon' => 1,
9220
9235
  'electronicvr' => 1,
9221
9236
  'elementarystreamtrack' => 1,
9222
9237
  'embeddedaudiofile' => 1,
@@ -9333,6 +9348,7 @@ my %tagExists = (
9333
9348
  'exposurereferencegain' => 1,
9334
9349
  'exposurereferenceoffset' => 1,
9335
9350
  'exposuretimes' => 1,
9351
+ 'exposuretype' => 1,
9336
9352
  'exposureunknown' => 1,
9337
9353
  'expressionmedia' => 1,
9338
9354
  'exrversion' => 1,
@@ -9888,6 +9904,7 @@ my %tagExists = (
9888
9904
  'hdrinfoversion' => 1,
9889
9905
  'hdrl' => 1,
9890
9906
  'hdrtoninginfo' => 1,
9907
+ 'hdrvideo' => 1,
9891
9908
  'header' => 1,
9892
9909
  'header4' => 1,
9893
9910
  'headerext' => 1,
@@ -9907,6 +9924,7 @@ my %tagExists = (
9907
9924
  'highlightendpoints' => 1,
9908
9925
  'highnote' => 1,
9909
9926
  'highvelocity' => 1,
9927
+ 'hindsightsettings' => 1,
9910
9928
  'hintformat' => 1,
9911
9929
  'hintheader' => 1,
9912
9930
  'hintinfo' => 1,
@@ -9931,6 +9949,7 @@ my %tagExists = (
9931
9949
  'homepostalcode' => 1,
9932
9950
  'homestateorprovince' => 1,
9933
9951
  'homestreet' => 1,
9952
+ 'horizoncontrol' => 1,
9934
9953
  'horizontalfieldofview' => 1,
9935
9954
  'horizontalresolution' => 1,
9936
9955
  'horizontalscale' => 1,
@@ -10452,6 +10471,7 @@ my %tagExists = (
10452
10471
  'lensmaker' => 1,
10453
10472
  'lensnumber' => 1,
10454
10473
  'lenspartnumber' => 1,
10474
+ 'lensprojection' => 1,
10455
10475
  'lensrec' => 1,
10456
10476
  'lensshading' => 1,
10457
10477
  'lenstableindex' => 1,
@@ -10581,6 +10601,10 @@ my %tagExists = (
10581
10601
  'manufactureindex' => 1,
10582
10602
  'manufacturername' => 1,
10583
10603
  'mappingscheme' => 1,
10604
+ 'mappingxcoefficients' => 1,
10605
+ 'mappingxmode' => 1,
10606
+ 'mappingycoefficients' => 1,
10607
+ 'mappingymode' => 1,
10584
10608
  'mapscale' => 1,
10585
10609
  'mariahthresholds' => 1,
10586
10610
  'mariahthresholdslow' => 1,
@@ -10613,7 +10637,6 @@ my %tagExists = (
10613
10637
  'maximumimageindex' => 1,
10614
10638
  'maximumobjectsize' => 1,
10615
10639
  'maximumoperationindex' => 1,
10616
- 'maximumshutterangle' => 1,
10617
10640
  'maximumtransformindex' => 1,
10618
10641
  'maxjpegtableindex' => 1,
10619
10642
  'maxpacketsize' => 1,
@@ -10802,6 +10825,7 @@ my %tagExists = (
10802
10825
  'mediaistape' => 1,
10803
10826
  'mediajukebox' => 1,
10804
10827
  'medialanguagecode' => 1,
10828
+ 'mediamode' => 1,
10805
10829
  'medianetworkaffiliation' => 1,
10806
10830
  'mediaoriginalbroadcastdatetime' => 1,
10807
10831
  'mediaoriginalchannel' => 1,
@@ -11217,6 +11241,7 @@ my %tagExists = (
11217
11241
  'orderingrestrictions' => 1,
11218
11242
  'organizeraddress' => 1,
11219
11243
  'organizername' => 1,
11244
+ 'orientationdatapresent' => 1,
11220
11245
  'orientationinfo' => 1,
11221
11246
  'orientationoffset' => 1,
11222
11247
  'orientoffset' => 1,
@@ -11475,6 +11500,8 @@ my %tagExists = (
11475
11500
  'podcastid' => 1,
11476
11501
  'podcastkeywords' => 1,
11477
11502
  'pointsize' => 1,
11503
+ 'polynomialcoefficients' => 1,
11504
+ 'polynomialpower' => 1,
11478
11505
  'popularimeter' => 1,
11479
11506
  'popupfillattributes' => 1,
11480
11507
  'popupflash' => 1,
@@ -11491,6 +11518,7 @@ my %tagExists = (
11491
11518
  'postscript2csa' => 1,
11492
11519
  'postscriptfont' => 1,
11493
11520
  'postscriptfontname' => 1,
11521
+ 'powerprofile' => 1,
11494
11522
  'pragma' => 1,
11495
11523
  'prediminanthue' => 1,
11496
11524
  'preferredfamily' => 1,
@@ -11644,6 +11672,7 @@ my %tagExists = (
11644
11672
  'protectiontype' => 1,
11645
11673
  'protocol' => 1,
11646
11674
  'protune' => 1,
11675
+ 'protuneisomode' => 1,
11647
11676
  'providercopyright' => 1,
11648
11677
  'providerlogourl' => 1,
11649
11678
  'providerrating' => 1,
@@ -12069,6 +12098,8 @@ my %tagExists = (
12069
12098
  'sceneclassification' => 1,
12070
12099
  'scenecolorimetryestimates' => 1,
12071
12100
  'sceneilluminance' => 1,
12101
+ 'schedulecapture' => 1,
12102
+ 'schedulecapturetime' => 1,
12072
12103
  'scheduleitemid' => 1,
12073
12104
  'schemeinfo' => 1,
12074
12105
  'schemetype' => 1,
@@ -12334,6 +12365,7 @@ my %tagExists = (
12334
12365
  'spectralviewingconditions' => 1,
12335
12366
  'spectralwhitepoint' => 1,
12336
12367
  'speed' => 1,
12368
+ 'speedrampsetting' => 1,
12337
12369
  'speedstamp' => 1,
12338
12370
  'speedunits' => 1,
12339
12371
  'sphericalvideo' => 1,
@@ -12341,6 +12373,7 @@ my %tagExists = (
12341
12373
  'spiffversion' => 1,
12342
12374
  'spinstrength' => 1,
12343
12375
  'spothalftone' => 1,
12376
+ 'spotmeter' => 1,
12344
12377
  'spouse' => 1,
12345
12378
  'sr2dataifd' => 1,
12346
12379
  'sr2private' => 1,
@@ -12982,7 +13015,6 @@ my %tagExists = (
12982
13015
  'videoorientation' => 1,
12983
13016
  'videoprofile' => 1,
12984
13017
  'videoprofileversion' => 1,
12985
- 'videosampledesc' => 1,
12986
13018
  'videoscantype' => 1,
12987
13019
  'videosize' => 1,
12988
13020
  'videostreamtype' => 1,
@@ -13012,6 +13044,7 @@ my %tagExists = (
13012
13044
  'visibleoutputs' => 1,
13013
13045
  'vistaidlistdata' => 1,
13014
13046
  'visualflightruleshud' => 1,
13047
+ 'visualsampledesc' => 1,
13015
13048
  'vivo' => 1,
13016
13049
  'vmaphandling' => 1,
13017
13050
  'vmcoldropthresh' => 1,
@@ -13233,6 +13266,7 @@ my %tagExists = (
13233
13266
  'zoomedpreviewimage' => 1,
13234
13267
  'zoompos' => 1,
13235
13268
  'zoomposition' => 1,
13269
+ 'zoomscalenormalization' => 1,
13236
13270
  'zoomstrength' => 1,
13237
13271
  'zxif' => 1,
13238
13272
  );
@@ -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 28402 tags, with 17530 unique tag names.
15
+ They contain a total of 28442 tags, with 17565 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
@@ -5566,6 +5566,8 @@ is to write ImageRegion as a structure with these tags as new fields.
5566
5566
 
5567
5567
  =head3 XMP LocationDetails Struct
5568
5568
 
5569
+ Note that the GPS elements of this structure are in the "exif" namespace.
5570
+
5569
5571
  Field Name Writable
5570
5572
  ---------- --------
5571
5573
  City string
@@ -12307,24 +12309,40 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
12307
12309
  Tag ID Tag Name Writable
12308
12310
  ------ -------- --------
12309
12311
  'AALP' AudioLevel no
12312
+ 'ABSC' AutoBoostScore no
12310
12313
  'ACCL' Accelerometer no
12311
12314
  'ALLD' AutoLowLightDuration no
12315
+ 'APTO' AudioProtuneOption no
12316
+ 'ARUW' AspectRatioUnwarped no
12317
+ 'ARWA' AspectRatioWarped no
12312
12318
  'ATTD' Attitude no
12313
12319
  'ATTR' AttitudeTarget no
12320
+ 'AUBT' AudioBlueTooth no
12314
12321
  'AUDO' AudioSetting no
12322
+ 'AUPT' AutoProtune no
12323
+ 'BITR' BitrateSetting no
12315
12324
  'BPOS' Controller? no
12316
12325
  'CASN' CameraSerialNumber no
12326
+ 'CDAT' CreationDate no
12327
+ 'CDTM' CaptureDelayTimer no
12328
+ 'CLDP' ClassificationDataPresent no
12317
12329
  'CORI' CameraOrientation no
12330
+ 'CPIN' ChapterNumber no
12318
12331
  'CSEN' CoyoteSense no
12332
+ 'CTRL' ControlLevel no
12319
12333
  'CYTS' CoyoteStatus no
12320
12334
  'DEVC' DeviceContainer GoPro GPMF
12335
+ 'DUST' DurationSetting no
12321
12336
  'DVID' DeviceID? no
12322
12337
  'DVNM' DeviceName no
12323
- 'DZOM' DigitalZoom no
12338
+ 'DZMX' DigitalZoomAmount no
12339
+ 'DZOM' DigitalZoomOn no
12340
+ 'DZST' DigitalZoom no
12324
12341
  'EISA' ElectronicImageStabilization no
12342
+ 'EISE' ElectronicStabilizationOn no
12325
12343
  'EMPT' Empty? no
12326
12344
  'ESCS' EscapeStatus? no
12327
- 'EXPT' MaximumShutterAngle no
12345
+ 'EXPT' ExposureType no
12328
12346
  'FACE' FaceDetected no
12329
12347
  'FCNM' FaceNumbers no
12330
12348
  'FMWR' FirmwareVersion no
@@ -12339,6 +12357,9 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
12339
12357
  'GPSU' GPSDateTime no
12340
12358
  'GRAV' GravityVector no
12341
12359
  'GYRO' Gyroscope no
12360
+ 'HCLT' HorizonControl no
12361
+ 'HDRV' HDRVideo no
12362
+ 'HSGT' HindsightSettings no
12342
12363
  'HUES' PrediminantHue no
12343
12364
  'IORI' ImageOrientation no
12344
12365
  'ISOE' ISOSpeeds no
@@ -12346,30 +12367,45 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
12346
12367
  'KBAT' BatteryStatus GoPro KBAT
12347
12368
  'LNED' LocalPositionNED no
12348
12369
  'MAGN' Magnetometer no
12370
+ 'MAPX' MappingXCoefficients no
12371
+ 'MAPY' MappingYCoefficients no
12349
12372
  'MINF' Model no
12373
+ 'MMOD' MediaMode no
12350
12374
  'MTRX' AccelerometerMatrix no
12351
12375
  'MUID' MediaUniqueID no
12352
12376
  'MWET' MicrophoneWet no
12377
+ 'MXCF' MappingXMode no
12378
+ 'MYCF' MappingYMode no
12379
+ 'ORDP' OrientationDataPresent no
12353
12380
  'OREN' AutoRotation no
12354
12381
  'ORIN' InputOrientation no
12355
12382
  'ORIO' OutputOrientation no
12356
12383
  'PHDR' HDRSetting no
12384
+ 'PIMD' ProtuneISOMode no
12357
12385
  'PIMN' AutoISOMin no
12358
12386
  'PIMX' AutoISOMax no
12387
+ 'POLY' PolynomialCoefficients no
12359
12388
  'PRES' PhotoResolution no
12360
- 'PRTN' ProTune no
12389
+ 'PRJT' LensProjection no
12390
+ 'PRTN' Protune no
12361
12391
  'PTCL' ColorMode no
12362
12392
  'PTEV' ExposureCompensation no
12363
12393
  'PTSH' Sharpness no
12364
12394
  'PTWB' WhiteBalance no
12395
+ 'PWPR' PowerProfile no
12396
+ 'PYCF' PolynomialPower no
12397
+ 'RAMP' SpeedRampSetting no
12365
12398
  'RATE' Rate no
12366
12399
  'RMRK' Comments no
12367
12400
  'SCAL' ScaleFactor? no
12401
+ 'SCAP' ScheduleCapture no
12368
12402
  'SCEN' SceneClassification no
12369
12403
  'SCPR' ScaledPressure no
12404
+ 'SCTM' ScheduleCaptureTime no
12370
12405
  'SHUT' ExposureTimes no
12371
12406
  'SIMU' ScaledIMU no
12372
12407
  'SIUN' SIUnits? no
12408
+ 'SMTR' SpotMeter no
12373
12409
  'SROT' SensorReadoutTime no
12374
12410
  'STMP' TimeStamp no
12375
12411
  'STNM' StreamName? no
@@ -12390,6 +12426,8 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
12390
12426
  'WNDM' WindProcessing no
12391
12427
  'WRGB' WhiteBalanceRGB no
12392
12428
  'YAVG' LumaAverage no
12429
+ 'ZFOV' DiagonalFieldOfView no
12430
+ 'ZMPL' ZoomScaleNormalization no
12393
12431
 
12394
12432
  =head3 GoPro GLPI Tags
12395
12433
 
@@ -16858,12 +16896,14 @@ These tags are written by Nikon DSLR's which have the live view feature.
16858
16896
  26 AFAreaHeight int16u
16859
16897
  28 ContrastDetectAFInFocus int8u
16860
16898
  AFPointsSelected undef[20]
16899
+ AFPointsSelected int16u
16861
16900
  42 AFImageWidth int16u
16862
16901
  44 AFImageHeight int16u
16863
16902
  46 AFAreaXPosition int16u
16864
16903
  47 FocusPositionHorizontal int8u~
16865
16904
  48 AFAreaYPosition int16u
16866
16905
  AFPointsInFocus undef[20]
16906
+ AFPointsInFocus undef[7]
16867
16907
  49 FocusPositionVertical int8u~
16868
16908
  50 AFAreaWidth int16u
16869
16909
  52 AFAreaHeight int16u
@@ -31192,7 +31232,7 @@ MP4 sample table box.
31192
31232
  'stps' PartialSyncSamples no
31193
31233
  'stsc' SampleToChunk? no
31194
31234
  'stsd' AudioSampleDesc QuickTime AudioSampleDesc
31195
- VideoSampleDesc QuickTime ImageDesc
31235
+ VisualSampleDesc QuickTime VisualSampleDesc
31196
31236
  HintSampleDesc QuickTime HintSampleDesc
31197
31237
  MetaSampleDesc QuickTime MetaSampleDesc
31198
31238
  OtherSampleDesc QuickTime OtherSampleDesc
@@ -31338,7 +31378,7 @@ Child atoms found in "sinf" and/or "pinf" atoms.
31338
31378
  'enda' Endianness no
31339
31379
  'frma' PurchaseFileFormat no
31340
31380
 
31341
- =head3 QuickTime ImageDesc Tags
31381
+ =head3 QuickTime VisualSampleDesc Tags
31342
31382
 
31343
31383
  ID/Index Tag Name Writable
31344
31384
  -------- -------- --------
@@ -31533,6 +31573,7 @@ the config file.
31533
31573
  'Lvlm' LevelMeter? rational64s
31534
31574
  'MMA0' MinoltaMMA0 Minolta MMA
31535
31575
  'MMA1' MinoltaMMA1 Minolta MMA
31576
+ 'MUID' MediaUID no
31536
31577
  'MVTG' FujiFilmMVTG EXIF
31537
31578
  'NCDT' NikonNCDT Nikon NCDT
31538
31579
  'PANA' PanasonicPANA Panasonic PANA
@@ -32021,7 +32062,7 @@ Tags used in QTIF QuickTime Image Files.
32021
32062
  Tag ID Tag Name Writable
32022
32063
  ------ -------- --------
32023
32064
  'idat' ImageData no
32024
- 'idsc' ImageDescription QuickTime ImageDesc
32065
+ 'idsc' ImageDescription QuickTime VisualSampleDesc
32025
32066
  'iicc' ICC_Profile ICC_Profile
32026
32067
 
32027
32068
  =head2 RIFF Tags
@@ -214,7 +214,7 @@ sub ProcessGoogle($$)
214
214
 
215
215
  delete $$et{ProcessGoogleTrailer}; # reset flag to process the Google trailer
216
216
 
217
- return -1 if $$dirInfo{OutFile};
217
+ return -1 if $$dirInfo{OutFile}; # let caller handle the writing
218
218
 
219
219
  # sometimes DirectoryItemLength is missing the Primary entry
220
220
  $len = [ $len ] unless ref $len eq 'ARRAY';
@@ -566,7 +566,7 @@ sub WriteCRW($$)
566
566
  my $trailPt;
567
567
  while ($success) {
568
568
  # check to see if trailer(s) exist(s)
569
- my $trailInfo = Image::ExifTool::IdentifyTrailer($raf) or last;
569
+ my $trailInfo = $et->IdentifyTrailer($raf) or last;
570
570
  # rewrite the trailer(s)
571
571
  $buff = '';
572
572
  $$trailInfo{OutFile} = \$buff;
@@ -1225,6 +1225,7 @@ sub WriteQuickTime($$$)
1225
1225
  OutFile => $outfile,
1226
1226
  NoRefTest=> 1, # don't check directory references
1227
1227
  WriteGroup => $$tagInfo{WriteGroup},
1228
+ Permanent => $$tagInfo{Permanent},
1228
1229
  # initialize array to hold details about chunk offset table
1229
1230
  # (each entry has 3-5 items: 0=atom type, 1=table offset, 2=table size,
1230
1231
  # 3=optional base offset, 4=optional item ID)
@@ -1564,7 +1565,9 @@ sub WriteQuickTime($$$)
1564
1565
  }
1565
1566
  if ($msg) {
1566
1567
  # (allow empty sample description for non-audio/video handler types, eg. 'url ', 'meta')
1567
- if ($$et{MediaType}) {
1568
+ # (also, incorrectly written 'mett' SampleEntry by Google phones,
1569
+ # see https://exiftool.org/forum/index.php?msg=91158)
1570
+ if ($avType{$$et{MediaType}}) {
1568
1571
  my $grp = $$et{CUR_WRITE_GROUP} || $parent;
1569
1572
  $et->Error("$msg for $grp");
1570
1573
  return $rtnErr;
@@ -4262,9 +4262,11 @@ sub WriteDirectory($$$;$)
4262
4262
  if ($permanentDir{$grp0} and not ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{Deletable})) {
4263
4263
  undef $delFlag;
4264
4264
  }
4265
- # (never delete an entire QuickTime group)
4266
4265
  if ($delFlag) {
4267
- if (($grp0 =~ /^(MakerNotes)$/ or $grp1 =~ /^(IFD0|ExifIFD|MakerNotes)$/) and
4266
+ if ($$dirInfo{Permanent}) {
4267
+ $self->Warn("Not deleting permanent $dirName directory");
4268
+ undef $grp1;
4269
+ } elsif (($grp0 =~ /^(MakerNotes)$/ or $grp1 =~ /^(IFD0|ExifIFD|MakerNotes)$/) and
4268
4270
  $self->IsRawType() and
4269
4271
  # allow non-permanent MakerNote directories to be deleted (ie. NikonCapture)
4270
4272
  (not $$dirInfo{TagInfo} or not defined $$dirInfo{TagInfo}{Permanent} or
@@ -6027,7 +6029,7 @@ sub WriteJPEG($$)
6027
6029
  Write($outfile, $hdr, $s, $segData) or $err = 1;
6028
6030
  my ($buff, $endPos, $trailInfo);
6029
6031
  my $delPreview = $$self{DEL_PREVIEW};
6030
- $trailInfo = IdentifyTrailer($raf) unless $$delGroup{Trailer};
6032
+ $trailInfo = $self->IdentifyTrailer($raf) unless $$delGroup{Trailer};
6031
6033
  my $nvTrail = $self->GetNewValueHash($Image::ExifTool::Extra{Trailer});
6032
6034
  unless ($oldOutfile or $delPreview or $trailInfo or $$delGroup{Trailer} or $nvTrail or
6033
6035
  $$self{HiddenData})
@@ -402,6 +402,7 @@ my %sLocationDetails = (
402
402
  STRUCT_NAME => 'LocationDetails',
403
403
  NAMESPACE => 'Iptc4xmpExt',
404
404
  GROUPS => { 2 => 'Location' },
405
+ NOTES => 'Note that the GPS elements of this structure are in the "exif" namespace.',
405
406
  Identifier => { List => 'Bag', Namespace => 'xmp' },
406
407
  City => { },
407
408
  CountryCode => { },
@@ -420,6 +421,7 @@ my %sLocationDetails = (
420
421
  PrintConvInv => '$val=~s/\s*m$//;$val',
421
422
  },
422
423
  GPSAltitudeRef => {
424
+ Namespace => 'exif',
423
425
  Writable => 'integer',
424
426
  PrintConv => {
425
427
  OTHER => sub {
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf);
31
31
 
32
- $VERSION = '13.17';
32
+ $VERSION = '13.18';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -6868,10 +6868,10 @@ sub HDump($$$$;$$$)
6868
6868
  # Returns: Trailer info hash (with RAF and DirName set),
6869
6869
  # or undef if no recognized trailer was found
6870
6870
  # Notes: leaves file position unchanged
6871
- sub IdentifyTrailer($;$)
6871
+ sub IdentifyTrailer($$;$)
6872
6872
  {
6873
- my $raf = shift;
6874
- my $offset = shift || 0;
6873
+ my ($self, $raf, $offset) = @_;
6874
+ $offset or $offset = 0;
6875
6875
  my $pos = $raf->Tell();
6876
6876
  my ($buff, $type, $len);
6877
6877
  while ($raf->Seek(-$offset, 2) and ($len = $raf->Tell()) > 0) {
@@ -6900,6 +6900,9 @@ sub IdentifyTrailer($;$)
6900
6900
  $type = 'Vivo';
6901
6901
  } elsif ($buff =~ /jxrs...\0$/s) {
6902
6902
  $type = 'OnePlus';
6903
+ } elsif ($$self{ProcessGoogleTrailer}) {
6904
+ # check for Google trailer information if specific XMP tags exist
6905
+ $type = 'Google';
6903
6906
  }
6904
6907
  last;
6905
6908
  }
@@ -7052,7 +7055,7 @@ sub ProcessTrailers($$)
7052
7055
  $offset += $dirLen;
7053
7056
  last if $dataPos and $$self{TrailerStart} and $dataPos <= $$self{TrailerStart};
7054
7057
  # look for next trailer
7055
- my $nextTrail = IdentifyTrailer($raf, $offset);
7058
+ my $nextTrail = $self->IdentifyTrailer($raf, $offset);
7056
7059
  # process Google trailer after all others if necessary and not done already
7057
7060
  unless ($nextTrail) {
7058
7061
  last unless $$self{ProcessGoogleTrailer};
@@ -7504,11 +7507,7 @@ sub ProcessJPEG($$;$)
7504
7507
  }
7505
7508
  }
7506
7509
  unless ($fast) {
7507
- $trailInfo = IdentifyTrailer($raf);
7508
- # check for Google trailer information if specific XMP tags exist
7509
- if (not $trailInfo and $$self{ProcessGoogleTrailer}) {
7510
- $trailInfo = { DirName => 'Google', RAF => $raf };
7511
- }
7510
+ $trailInfo = $self->IdentifyTrailer($raf);
7512
7511
  # process trailer now unless we are doing verbose dump
7513
7512
  if ($trailInfo and $verbose < 3 and not $htmlDump) {
7514
7513
  # process trailers (keep trailInfo to finish processing later
@@ -8619,7 +8618,7 @@ sub DoProcessTIFF($$;$)
8619
8618
  }
8620
8619
  # process information in recognized trailers
8621
8620
  if ($raf) {
8622
- my $trailInfo = IdentifyTrailer($raf);
8621
+ my $trailInfo = $self->IdentifyTrailer($raf);
8623
8622
  if ($trailInfo) {
8624
8623
  # scan to find AFCP if necessary (Note: we are scanning
8625
8624
  # from a random file position in the TIFF)
@@ -8724,7 +8723,7 @@ sub DoProcessTIFF($$;$)
8724
8723
  for (;;) {
8725
8724
  last unless $extra > 12;
8726
8725
  $raf->Seek($tiffEnd); # seek back to end of image
8727
- $trailInfo = IdentifyTrailer($raf);
8726
+ $trailInfo = $self->IdentifyTrailer($raf);
8728
8727
  last unless $trailInfo;
8729
8728
  my $tbuf = '';
8730
8729
  $$trailInfo{OutFile} = \$tbuf; # rewrite trailer(s)
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.17
3
+ Version: 13.18
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('13.17.0')
4
+ VERSION = Gem::Version.new('13.18.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.17.0
4
+ version: 13.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-01-29 00:00:00.000000000 Z
12
+ date: 2025-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool