A picture's XMP answers four properties, where upstream asks it first for all of them #222
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A picture's XMP block is consulted for four properties only: title, comment, rating and keywords. Upstream reads the others through the same combined tag.
Both sides
upstream/Emby.Photos/PhotoProvider.csreads everything off TagLib'sCombinedImageTag, which asks each of the file's tag blocks in turn with XMP first. That covers make, model, software, date taken, orientation, exposure, ISO and focal length as well as the four text fields.Ours (
crates/ephyra-images/src/exif.rs) lets XMP answer first for title, comment, rating and keywords. It reads the camera, date and exposure fields from the EXIF/TIFF block only.What a client sees
Take a PNG or WebP exported with an XMP packet and no
eXIfchunk, which several editors write. Upstream files its camera, date taken and exposure. We file none of them.Before fixing
TagLib's source is not on disk, so the order it uses for each property is inferred rather than read. Start by giving the library-kinds fixture a picture whose XMP carries the camera and date fields and whose EXIF carries different values or none. Regenerate with
cargo xtask reference gen-library-kindsand let thereadblock show which one upstream takes. The comparison test inxtask/src/reference/kinds.rsthen holds it.Found reviewing #209.
Fixed, and landed on
mainat76f368b8.Measured, not inferred. A new built asset,
/kinds/homevideos/Holiday/Contested.jpg, carries an XMP packet and an Exif block that disagree about every property both can hold. The regenerated answer key records what upstream filed:crates/ephyra-images/src/exif.rsnow matches that:read_xmpanswers for make, model, orientation, exposure time, focal length and ISO as well, and the block's rating tag is read by nothing.every_picture_reads_as_upstream_read_itholds it.Left unmeasured and now said so in the module's own documentation: the packet carries no GPS, so which block answers for latitude, longitude and altitude is still read from TagLib's shape rather than from upstream. Filed as #233.