LeoHsiao1 / pyexiv2

Read and write image metadata, including EXIF, IPTC, XMP, ICC Profile.
GNU General Public License v3.0
202 stars 39 forks source link

Enable BMFF support in underlying library #105

Closed Entropy512 closed 1 year ago

Entropy512 commented 1 year ago

Since it appears that pyexiv2 uses self-built versions of the underlying library, instead of the system library version, this winds up relevant even if the system library (Ubuntu 22.04 in my case - you can see that https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/exiv2/0.27.5-4/exiv2_0.27.5-4.debian.tar.xz enables BMFF support)

BMFF support defaults to disabled in 0.27.5, but will default to enabled going forward - see https://github.com/Exiv2/exiv2/wiki/BMFF-Legals

In general, there were concerns that a patent may apply to the base BMFF container, but no one who raised these concerns could point to an actual applicable patent that was relevant to the base container format (as opposed to codecs such as H.264 and H.265 that are also part of the MPEG specification release). Gentoo and Ubuntu at the least have defaulted to enabling this feature. Even Debian upstream has enabled BMFF support: https://metadata.ftp-master.debian.org/changelogs//main/e/exiv2/exiv2_0.27.5-4_changelog

Please re-release with -DEXIV2_ENABLE_BMFF=On

LeoHsiao1 commented 1 year ago

Hi Previously, the windows build package of exiv2 0.27.4 did not include BMFF at compile time, so I compiled the windows package myself for pyexiv2. https://github.com/LeoHsiao1/pyexiv2/blob/ef15366cb124f84353da0716372337042f10ac65/.github/workflows/build.yml#L190-L191

Currently, pyexiv2 v2.8.1 is based on exiv2 v0.27.5 . Download the distribution of exiv2 at build time. https://github.com/LeoHsiao1/pyexiv2/blob/c5f18c6ee432b8d5d7f009737378bfb6905e14e0/.github/workflows/build.yml#L187-L189

Therefore, pyexiv2 v2.8.1 has the same default value for BMFF as exiv2 v0.27.5 .

Entropy512 commented 1 year ago

Aha - it seems like the solution here would be to build exiv2 from source with ENABLE_BMFF on for Linux too - I'll take a crack at attempting to do this/enable it later this week.

LeoHsiao1 commented 1 year ago

You don't have to compile it yourself. The current exiv2 release is compiled with EXIV2_ENABLE_BMFF=ON https://github.com/Exiv2/exiv2/blob/eae83b44507d2a08636532142e611a642139f494/.github/workflows/release.yml#L44

So you only need to call pyexiv2.enableBMFF() once in Python code.

Entropy512 commented 1 year ago

BTw, I confirmed that it is indeed working by calling enableBMFF. BMFF is a huge mess, but that's upstream's issue not yours.