ISO speed readout & low-light cameras

Added by Spex Duplex over 6 years ago

Are there plans to enhance the ISO readout according to Annex G of the EXIF 2.3 spec? I'm faced with that ISO 65535 value often enough to slowly get annoyed by it, and seemingly the EXIF 2.3 spec is aware of that issue and proposes a slightly different way to obtain the ISO value of the recorded image.

If something like this is implemented, should it enhance the existing isoSpeed() function or, due possible compatibility conflicts, should a new function be used for that?

Replies (4)

RE: ISO speed readout & low-light cameras - Added by Robin Mills over 6 years ago

We have no plan to work on that at the moment as we are currently preparing to release v0.25. I've opened a Feature Request #1060

You'll see that I have set the target for this as v0.26 - however that is a target and not a commitment. Exiv2 is an open source project. If your heart is set on having this feature, I encourage you to join the team and work with us to implement, test and document the necessary code.

RE: ISO speed readout & low-light cameras - Added by Spex Duplex over 6 years ago

Ok, thanks Robin.

I have a technical question (which also relies a bit on the actual spec): The best bet is probably to enhance the isoSpeed() function. Should the existing code be run first, and only if the result is existing and == 65535, the additional Exif.Photo.SensivityType based code run, or the other way around?

To my knowledge there are only a few cameras (so far) capable of pulling off ISOs beyond that boundary: Nikon D3s, D4, D4s, Sony A7s, Canon 5D3, 6D, 1Dx, and probably more incoming in the future. The ones I tried seem to handle things via the Exif.Photo.SensivityType (using the REI field in the end), so having that handled properly should yield proper ISO values beyond the current 64k limit (no idea if propietary fields allow for more already). A quick hack in that regard seems to work and shows proper values in Darktable, for example.

Also, the spec defines multiple fields having the same value for various values of Exif.Photo.SensivityType (if I understood that correctly). Should that be validated in the code or just the first / random field being taken instead?

As for the testing I suppose the best bet is to manipulate the EXIF of an image to contain >64k ISO data, some of that in a correct and some of that in an incorrect way so the well-behavedness of the code can be checked.

RE: ISO speed readout & low-light cameras - Added by Robin Mills over 6 years ago


I'll confess. I don't know what you're talking about. I looked at the 2.3 Spec earlier and didn't know what it was talking about either! I'm neither a Metadata Engineer, nor a Photographer. I'm a Software/Build/Test Engineer.

If you really need help with this, I'll add Phil (of ExifTool fame) to the watchers for this issue and Phil will probably illuminate us all on the subject.

The testing is rather easy. We add one or more test files. We run any commands we want on your file and compare the output to last time. If it's producing the reference result, we say it's passed. Typically, you'd want to do something like: $ exiv2 -pa -g Sensitivity spexsfile.jpg. For example, I added code yesterday to test my fixes for #1058 r3713

    printf "$num " >&3
    echo '------>' Bug $num '<-------' >&2
    copyTestFile exiv2-empty.jpg $filename
    # Add titles in 2 languages and one default
    runTest exiv2 -M'set Xmp.dc.title lang="de-DE" GERMAN'  $filename
    runTest exiv2 -M'set Xmp.dc.title lang="en-GB" BRITISH' $filename
    runTest exiv2 -M'set Xmp.dc.title Everybody else'       $filename
    runTest exiv2 -px                                       $filename
    # Remove languages, test case for the language
    runTest exiv2 -M'set Xmp.dc.title lang="DE-de" german'  $filename
    runTest exiv2 -M'set Xmp.dc.title lang="EN-gb"'         $filename
    runTest exiv2 -M'set Xmp.dc.title'                      $filename
    runTest exiv2 -px                                       $filename
I refer to this kind of test as a 'regression detector' because the test suite will report an exception if exiv2 suddenly reverts to its old (and incorrect) behaviour. It will of course also report if the output changes in any way. One other point to consider is that we want to keep our test images small. So if you have a good test image, use samples/metacopy to copy the metadata into an image "container" that has no image. The metadata's good and that's all we want to test. If you send me a big fat image, I'll use metacopy to put it on a diet before I submit to our repository.

RE: ISO speed readout & low-light cameras - Added by Spex Duplex over 6 years ago

Ok, thanks for all the references/tips. I added some patches/files to the issue tracker (#1060), including tests checking for possible corner cases (probably missed a good few of them, though).