Writing GPSPosition, then reading GPSPosition returns old GPSPosition

Started by tipa, Today at 02:45:22 AM

Previous topic - Next topic

tipa

I am using ExifTool in one of my apps to read & edit location information / geotags of photos & videos. One of the app's users approached me and reported a case where this was not possible. I was able to reproduce the problem and it looks like a bug in the ExifTool to me.

Information to reproduce problem:
- System type & version: macOS 13.5.1
- ExifTool version: 12.65


Steps to reproduce:
exiftool -GPSPosition='11.1, 11.1' -v video.mov

Rewriting video.mov...
  FileType = MOV
  FileTypeExtension = MOV
  MIMEType = video/quicktime
  Editing tags in: Composite GPS MIE-GPS MOV Movie UserData XMP
  Rewriting Movie
  Rewriting MovieHeader
  Rewriting Track
  Rewriting TrackHeader
  Rewriting Media
  Rewriting MediaHeader
  Rewriting MediaInfo
  Rewriting DataInfo
  Rewriting DataRef
  Rewriting SampleTable
  Rewriting Track
  Rewriting TrackHeader
  Rewriting Media
  Rewriting MediaHeader
  Rewriting MediaInfo
  Rewriting DataInfo
  Rewriting DataRef
  Rewriting SampleTable
  Rewriting Meta
  Rewriting Keys
  Rewriting ItemList
  Rewriting UserData
  Rewriting XMP
    1 image files updated

exiftool -GPSLatitude -GPSLongitude -GPSPosition ./video.mov -n -v

  ExifToolVersion = 12.65
  FileName = video.mov
  Directory = .
  FileSize = 4273035
  FileModifyDate = 1692426934
  FileAccessDate = 1692426934
  FileInodeChangeDate = 1692426934
  FilePermissions = 33216
  FileType = MOV
  FileTypeExtension = MOV
  MIMEType = video/quicktime
  FileType (SubDirectory) -->
  + [BinaryData directory, 12 bytes]
  | MajorBrand = qt 
  | MinorVersion =
  | CompatibleBrands = qt 
  Movie (SubDirectory) -->
  + [Movie directory]
  | MovieHeader (SubDirectory) -->
  | + [BinaryData directory, 100 bytes]
  | | MovieHeaderVersion = 0
  | | CreateDate = 3773973166
  | | ModifyDate = 3773973166
  | | TimeScale = 600
  | | Duration = 1381
  | | PreferredRate = 65536
  | | PreferredVolume = 256
  | | MatrixStructure = 1 0 0 0 1 0 0 0 16384
  | | PreviewTime = 0
  | | PreviewDuration = 0
  | | PosterTime = 0
  | | SelectionTime = 0
  | | SelectionDuration = 0
  | | CurrentTime = 0
  | | NextTrackID = 3
  | Track (SubDirectory) -->
  | + [Track directory]
  | | TrackHeader (SubDirectory) -->
  | | + [BinaryData directory, 84 bytes]
  | | | TrackHeaderVersion = 0
  | | | TrackCreateDate = 3773973166
  | | | TrackModifyDate = 3773973166
  | | | TrackID = 1
  | | | TrackDuration = 1381
  | | | TrackLayer = 0
  | | | TrackVolume = 0
  | | | MatrixStructure = 1 0 0 0 1 0 0 0 16384
  | | | ImageWidth = 125829120
  | | | ImageHeight = 94371840
  | | TrackAperture (SubDirectory) -->
  | | + [TrackAperture directory]
  | | | CleanApertureDimensions = 0 1440 1080
  | | | ProductionApertureDimensions = 0 1440 1080
  | | | EncodedPixelsDimensions = 0 1440 1080
  | | Unknown_edts = .elst..e.
  | | Media (SubDirectory) -->
  | | + [Media directory]
  | | | MediaHeader (SubDirectory) -->
  | | | + [BinaryData directory, 24 bytes]
  | | | | MediaHeaderVersion = 0
  | | | | MediaCreateDate = 3773973166
  | | | | MediaModifyDate = 3773973166
  | | | | MediaTimeScale = 90000
  | | | | MediaDuration = 207207
  | | | | MediaLanguageCode = 21956
  | | | Handler (SubDirectory) -->
  | | | + [BinaryData directory, 41 bytes]
  | | | | HandlerClass = mhlr
  | | | | HandlerType = vide
  | | | | HandlerVendorID = appl
  | | | | HandlerDescription = .Core Media Video
  | | | MediaInfo (SubDirectory) -->
  | | | + [MediaInfo directory]
  | | | | VideoHeader (SubDirectory) -->
  | | | | + [BinaryData directory, 12 bytes]
  | | | | | GraphicsMode = 64
  | | | | | OpColor = 32768 32768 32768
  | | | | Handler (SubDirectory) -->
  | | | | + [BinaryData directory, 48 bytes]
  | | | | | HandlerClass = dhlr
  | | | | | HandlerType = alis
  | | | | | HandlerVendorID = appl
  | | | | | HandlerDescription = .Core Media Data Handler
  | | | | DataInfo (SubDirectory) -->
  | | | | + [DataInfo directory]
  | | | | | DataRef (SubDirectory) -->
  | | | | | + [DataRef directory]
  | | | | | | Unknown_alis = .
  | | | | SampleTable (SubDirectory) -->
  | | | | + [SampleTable directory]
  | | | | | VideoSampleDesc (SubDirectory) -->
  | | | | | + [BinaryData directory, 216 bytes]
  | | | | | | CompressorID = avc1
  | | | | | | VendorID =
  | | | | | | SourceImageWidth = 1440
  | | | | | | SourceImageHeight = 1080
  | | | | | | XResolution = 72
  | | | | | | YResolution = 72
  | | | | | | CompressorName = .H.264
  | | | | | | BitDepth = 24
  | | | | | VideoFrameRate = .E..
  | | | | | CompositionTimeToSample = C........E.......E.......E.......E.......E.......[snip]
  | | | | | CompositionToDecodeTimelineMapping = .....E...)g
  | | | | | SyncSampleTable = ...=
  | | | | | IdependentAndDisposableSamples =  ............................. ...........[snip]
  | | | | | SampleToChunk = ................
  | | | | | SampleSizes = E..;..7.!..F.....cp.8.g1...5g.@5...I..pHb..J...B..~M...O...qN[snip]
  | | | | | ChunkOffset = ........s)..9..
  | Track (SubDirectory) -->
  | + [Track directory]
  | | TrackHeader (SubDirectory) -->
  | | + [BinaryData directory, 84 bytes]
  | | | TrackHeaderVersion = 0
  | | | TrackCreateDate = 3773973166
  | | | TrackModifyDate = 3773973166
  | | | TrackID = 2
  | | | TrackDuration = 1381
  | | | TrackLayer = 0
  | | | TrackVolume = 0
  | | | MatrixStructure = 1 0 0 0 1 0 0 0 16384
  | | | ImageWidth = 0
  | | | ImageHeight = 0
  | | Unknown_edts = .elst..e.
  | | Media (SubDirectory) -->
  | | + [Media directory]
  | | | MediaHeader (SubDirectory) -->
  | | | + [BinaryData directory, 24 bytes]
  | | | | MediaHeaderVersion = 0
  | | | | MediaCreateDate = 3773973166
  | | | | MediaModifyDate = 3773973166
  | | | | MediaTimeScale = 90000
  | | | | MediaDuration = 207207
  | | | | MediaLanguageCode = 21956
  | | | Handler (SubDirectory) -->
  | | | + [BinaryData directory, 45 bytes]
  | | | | HandlerClass = mhlr
  | | | | HandlerType = tmcd
  | | | | HandlerVendorID = appl
  | | | | HandlerDescription = .Core Media Time Code
  | | | MediaInfo (SubDirectory) -->
  | | | + [MediaInfo directory]
  | | | | GenMediaHeader (SubDirectory) -->
  | | | | + [GenMediaHeader directory]
  | | | | | GenMediaInfo (SubDirectory) -->
  | | | | | + [BinaryData directory, 16 bytes]
  | | | | | | GenMediaVersion = 0
  | | | | | | GenFlags = 0 0 0
  | | | | | | GenGraphicsMode = 64
  | | | | | | GenOpColor = 32768 32768 32768
  | | | | | | GenBalance = 0
  | | | | | TimeCode (SubDirectory) -->
  | | | | | + [TimeCode directory]
  | | | | | | TCMediaInfo (SubDirectory) -->
  | | | | | | + [BinaryData directory, 32 bytes]
  | | | | | | | TextFont = 22
  | | | | | | | TextFace = 0
  | | | | | | | TextSize = 12
  | | | | | | | TextColor = 0 0 0
  | | | | | | | BackgroundColor = 65535 65535 65535
  | | | | | | | FontName = Courier
  | | | | Handler (SubDirectory) -->
  | | | | + [BinaryData directory, 48 bytes]
  | | | | | HandlerClass = dhlr
  | | | | | HandlerType = alis
  | | | | | HandlerVendorID = appl
  | | | | | HandlerDescription = .Core Media Data Handler
  | | | | DataInfo (SubDirectory) -->
  | | | | + [DataInfo directory]
  | | | | | DataRef (SubDirectory) -->
  | | | | | + [DataRef directory]
  | | | | | | Unknown_alis = .
  | | | | SampleTable (SubDirectory) -->
  | | | | + [SampleTable directory]
  | | | | | OtherSampleDesc (SubDirectory) -->
  | | | | | + [BinaryData directory, 34 bytes]
  | | | | | | OtherFormat = tmcd
  | | | | | | PlaybackFrameRate = 29.97002997
  | | | | | TimeToSampleTable = ...)g
  | | | | | SampleToChunk = ....
  | | | | | SampleSizes = ..
  | | | | | ChunkOffset = ...o
  | Meta (SubDirectory) -->
  | + [Meta directory]
  | | Handler (SubDirectory) -->
  | | + [BinaryData directory, 26 bytes]
  | | | HandlerClass =
  | | | HandlerType = mdta
  | | | HandlerVendorID =
  | | | HandlerDescription =
  | | Keys (SubDirectory) -->
  | | + [Keys directory]
  | | | Added ItemList Tag 1.1 = (mdta) location.ISO6709
  | | | Added ItemList Tag 1.2 = (mdta) creationdate
  | | ItemList (SubDirectory) -->
  | | + [ItemList directory]
  | | | GPSCoordinates = +29.0695-082.4271/
  | | | CreationDate = 2023-07-19T12:17:37-04:00
  | UserData (SubDirectory) -->
  | + [UserData directory]
  | | XMP (SubDirectory) -->
  | | + [XMP directory, 2850 bytes]
  | | | XMPToolkit = Image::ExifTool 12.65
  | | | GPSLatitude = 11,6.0N
  | | | GPSLongitude = 11,6.0E
  MediaDataSize = 4267447
  MediaDataOffset = 5588
  MediaData = .......0]!Kq.q,....)....%.@....5.....\|.N..)..!N*F.."..3..m.r...+/....Q..[snip]
GPS Latitude                    : 29.0695
GPS Longitude                  : -82.4271
GPS Position                    : 29.0695 -82.4271

As can be seen in the output, the new geotag seems to be written into the XMP subdirectory, but not into the "ItemList" subdirectory, where it is read from. Example file: https://1drv.ms/v/s!Ao11bhuirfKfzuhU-6wB2zV823rutw?e=EoS7mj