Friday, June 17, 2011

Yet another quirk

Working on a new feature of M9Tether, I noticed yet another quirk of the M9 (they're really stacking up).

I'm trying to overwrite the makernote field of the photos produced by the M9, specifically a field called 'approximateFNumber'.

The name is an invention of ExifTool, since I don't think Leica published this information.

Lightroom however reports on this field, showing what the f/stop more or less was when the photo was taken, but it's usually off. And that's because the field is a guessed value (hence the 'approximate'), based on light reading of the sensor and of an extra thingie on the M9, near the red dot. There's no electronic connection between lens and body, so the M9 never knows for sure what the aperture of the lens was.

A user suggested an option in M9Tether to overwrite this 'guessed' field with the actual value, which I thought was a great idea. You set the aperture in M9Tether, and it's written into the field automatically on the transferred photos.

After some research I managed to decypher the makernote field.

The value is not an f/stop at all, but a number, representing the f/stop.

Then it took me a while to figure out how to get from the number to the f/stop. That involved some math (at first I thought it was a simple table representing the whole and half f/stops, but not so...)

Then, with the new feature finished - quite cool, I tell M9Tether 'fill in f/5.6' and Lightroom reports a nice f/5.6, even when the M9 thought it was f/16 - I noticed that the M9 doesn't update the approximateFNumber field internally when shooting tethered through the 'Shoot' button.

Manually everything works ok, but if you change the aperture of the lens and take a shot through the button, the approximateFNumber isn't updated, no matter how big the aperture change: it just stays the same.

Until you take another photo, then it's updated.

For some mysterious reason it's lagging one photo behind.

And for a geek like me that's infuriating, since I also want to present the original 'guessed' value, which now turns into a super-guessed-totally-wrong value on some photos.

I've tried everything. Resetting, clearing the cache, releasing certain objects in between... to no avail. And it's not just the transferred photos. Also the photo on the SD card. Exactly the same problem. So it's not a matter of the transfer starting too early or going wonky with old data.

The annoying part is that the makernote field for guessed f/stop isn't written directly, but calculated from the earlier mentioned other values, obtained by measuring light. And those values dó change, also when using the 'Shoot' button. These values are also stored in the makernote, so they're quite easy to trace.

This makes me believe it's not something I can fix directly.

If the base values dó change, the approximateFNumber should also change, but it doesn't. It's like the camera skips over the calculation or takes the values from the previous measurement, in hindsight.

So now I'm investigating formulas to get to the aperture indirectly through the measured light values, since those are adapted immediately. But the documentation I could find on this (for the M8) doesn't make sense. The formulas work sometimes, but not all the time, so I'm slightly stuck...

Now, you'd think this isn't a huge problem, because for the overwrite feature MTether overwrites the field anyway, who cares what it was originally?

Well, not totally true.

I'd like to present the guessed value next to the proposed value, so the user can decide last minute. And worse, at least the first photo taken with M9Tether through the 'Shoot' button after an aperture change, will have a wrong 'guessed' value.

I'm not sure at the moment how to deal with this one...

The M9, you've gotta love it, but I think the PTP implementation deserves more attention from someone at Leica.

I'd be happy to do some consulting for them, cause by now I can dream PTP...

[Edit: then finally, after some more experimenting, I realised it: the 'Shoot' button doesn't engage the metering system like the shutter button... it's like 'soft' release, and most likely that's why the values come too late to be written into the photo... I know this still sounds a bit off, but it must be something along those lines, because I was wrong with the light reading values: they also stay the same... the PTP release simply skips over some stuff necessary for this to go right, because it can't lock exposure... it probably fills the right registers when the photo is already being taken as opposed to regular release through the shutter button, where the metering is done on the second stop when pressing down... A little experiment confirmed this: shooting two photos through the Shoot button and changing the aperture in between, but engaging the meter between the two shots by pressing the shutter button half way and releasing it (without taking a photo)... Then the second photo reports the right value... Seems there's no way around this one until Leica releases a two stage trigger through PTP (if ever) in stead of this instant shoot, which apparently relies on the previous shot for the makernote values...]

No comments:

Post a Comment