Bug #1254

Cannot recognize Canon 16-35 f/4 IS L

Added by Niccolò Belli 11 months ago. Updated 11 months ago.

Status:ClosedStart date:14 Nov 2016
Priority:NormalDue date:
Assignee:Robin Mills% Done:


Category:lensEstimated time:2.00 hours
Target version:0.26


Darktable developers suggested the bug was upstream: https://redmine.darktable.org/issues/11315
I attached the raw file.

$ pacaur -Ss exiv2 | grep install
extra/exiv2 0.25-3 [installato]
extra/libkexiv2 16.08.3-1 [installato]
extra/libkexiv2_4 15.08.3-2 [installato]

OS is Archlinux.

IMG_0589.CR2 (12.2 MB) Niccolò Belli, 14 Nov 2016 14:34


#1 Updated by Robin Mills 11 months ago

  • Category set to lens
  • Status changed from New to Closed
  • Assignee set to Robin Mills
  • Target version set to 0.26
  • % Done changed from 0 to 100
  • Estimated time set to 1.00

This is not a bug! Please see #1252 for a discussion.

There's a new feature in Exiv2 v0.26 to add the definition of a lens to the file ~/.exiv2

$ exiv2 -pa --grep lens/i ~/Downloads/IMG_0589.CR2 
Exif.CanonCs.LensType                        Short       1  (0)
Exif.CanonCs.Lens                            Short       3  16.0 - 35.0 mm
Exif.CanonCf.LensAFStopButton                Short       1  2049
Exif.Canon.LensModel                         Ascii      64  

$ exiv2 -pv --grep lens/i ~/Downloads/IMG_0589.CR2 
0x0016 CanonCs      LensType                    Short       1  0   <---- This is your lensID
0x0017 CanonCs      Lens                        Short       3  35 16 1
0x0009 CanonCf      LensAFStopButton            Short       1  2049
0x0095 Canon        LensModel                   Ascii      64  
$ cat ~/.exiv2 
# 247=Samyang 14mm f/2.8 AE ED AS IF UMC
# 65535=The lens in issue 1251
0=Canon 16-35 f/4 IS L  <--- ADD Your lens definition here

# 146=Robin's Sigma Lens

# 3 255 0 0=another pentax lens

# 255=a sony lens

# 123=something

$ exiv2 -pa --grep lens/i ~/Downloads/IMG_0589.CR2 
Exif.CanonCs.LensType                        Short       1  Canon 16-35 f/4 IS L  <--- Good, eh?
Exif.CanonCs.Lens                            Short       3  16.0 - 35.0 mm
Exif.CanonCf.LensAFStopButton                Short       1  2049
Exif.Canon.LensModel                         Ascii      64  
Exiv2 v0.26 status is currently Release Candidate and I hope it will ship in 2016. Darktable will include Exiv2 v0.26 sometime in 2017.

#2 Updated by Roman Lebedev 11 months ago

Robin Mills wrote:

Darktable will include Exiv2 v0.26 sometime in 2017.

Hm? We do not include exiv2. We do not bundle it. We use whatever version is present in the system.

#3 Updated by Robin Mills 11 months ago

You are correct. Darktable uses the system supplied version of Exiv2. That will be updated to v0.26 during 2017.

#4 Updated by Niccolò Belli 11 months ago

You suggested to manually add my lens to the database, does it mean that v0.26 will ship without Canon 16-35 f/4 IS L support out of the box?

#6 Updated by Robin Mills 11 months ago

  • Estimated time changed from 1.00 to 2.00

Lens recognition is a problem because most manufacturers do no store metadata to define the lens in the image.

In your test file, the LensModel stored by the camera is 64 null bytes. Exiv2 has code to guess which lens is being used. Not only is this unreliable, it results in many issue reports and work for Team Exiv2. Additionally, when we add new lens recognition code, it takes time for the update to our code to reach our users.

To avoid frustration for everybody, I have added the ~/.exiv2 feature. This enables users to add their lens to the system without a bug report to us and to add it instantly on their computer without a software update.

#7 Updated by Niccolò Belli 11 months ago

This is a TERRIBLE news, didn't know the manufacters were so stupid.
Just a few questions:
1) How does softwares like Lightroom handle such collision issues?
2) How does software like Darktable will handle the situation once v0.26 and future versions get released? Will they drop features like automatic lens correction which rely on exiv decoding?

#8 Updated by Robin Mills 11 months ago

I think this is WONDERFUL news. I've given darktable and other applications a mechanism for the users to register their lenses without waiting for exiv2 to go through a release cycle.

I wish manufacturers would correctly and uniquely record the lens in the metadata. I don't know why they don't improve this feature of their cameras. It may be that most cameras ship in advance of new lenses. So the camera cannot recognise a new lens that is released after the camera.

I worked for Adobe for many years in Silicon Valley. I never worked on anything relating to metadata or LightRoom.

At the moment, I frequently update Exiv2 with new lenses. So Exiv2 v0.26 does ship with an up-to-date database of lenses. We might continue to update the lens recognition code in v0.27 and beyond - however it depends on the response of darktable and other applications to having the ~/.exiv2 feature.

We have an issue on the agenda for v0.27 to use all 7000 images in Phil's test suite. This matter isn't dead with v0.26. It is intended to give it more attention and to improve our RAW support and test. So, we're not walking away. The ~/.exiv2 feature is an investment to help everybody. More work will follow.

I try very hard to give our users the best tools and features. If there is a strong demand to continuously add new "built in" lenses, I will try to support that. However if ~/.exiv2 is a success, demand for us to guess the lens may disappear. And perhaps darktable will manage the ~/.exiv2 file on behalf of the user. If an unrecognised lens is used, darktable could alert the user, and update ~/.exiv2 in a very painless manner.

So --- cheer up --- everything will work out fine!

#9 Updated by Niccolò Belli 11 months ago

Hopefully you will keep updating the built in lenses database, which combined to the new approach would probably be the best solution. Thanks for your detailed answer.

Also available in: Atom PDF

Redmine Appliance - Powered by TurnKey Linux