Exif brightness values changed in iOS9

I read video data from the camera and take the brightness value from exif. Values for iOS7/8 were calibrated using a light meter.

After upgrading to iOS9 phone readings changed significantly

ios8 0.330837

ios9 8.837657

—————————————————

diff 8.50682

Depending of room brightness average difference is ≈8.455


I expected exif values to be relatively close across different devices.

I cannot find what could cause the scale difference.

What could affect the exif brightness?

Should I just decrease value by 8.455 in case of iOS9?

Hi alina --


Can you provide more details about the device you're using when you get these results? Can you reproduce them using the AVCamManual sample code?


Thanks!

Are you using Apple's Camera app or your own? Are you certain that still image stabilization is ON or OFF in both images? What device and format are we talking about here?

Hello,


I am facing the exact same issue as Alina.


I am working on an application which use AVFoundation API to display a live video preview and take photos, and I extract camera parameters both from exif, and AVCaptureDevice. I am using these datas (Aperture, ISO, exposure duration, Brightness Value, Exposure Value ...) to compute an estimation of the luminance of the scene.


My App worked great under iOS 8, giving results close to light meters. But after the iOS 9 update, the Brightness Value extracted from exif is now completely different and erratic.


I use two different iPhone 6 as developement device.

This issue is present only on the iPhone 6 I upgraded to iOS 9, regardless of camera settings.

The other iPhone 6 is still under iOS 8.4, and the Brightness Value is correct in any camera configuration.



Thanks !

The same here BrightnessValues differs with iOS 9 and iPhone 6

in comparison to iPhone 6 with iOS 8


It's frustrating.

I have same problem, too.


I calculate the equation: Av + Tv = Bv + Sv with the APEX system.


The Bv from the EXIF cannot fit into the equation.


The EXIF is from any picture taken with iPhone, (by me an iPhone 5, iOS 9.1 ).


Bv is the Brightness,

Tv = - log(Exposure time) / log(2.0)

Av = 2 * log(F-Number) / log(2.0)

Sv = log(ISO speed ratings / 3.125) / log(2.0)


But Bv is not equal Av + Tv - Sv


Does anyone know why?

The problem appears to only occur with 64-bit devices (at the very least, iPhone 6 and 6 Plus and iPad Air); 32-bit devices I've tested (iPhone 4S, iPhone 5, iPad 3, and iPod touch 5G) continue to report BrightnessValue correctly.


The change is not a simple offset in BrightnessValue, nor is it a "gain change", as the change in BrightnessValue now differs for a 1-stop brightness change in low light vs bright light.


I filed bug report #22870495 on 26 September, which said in part:


The one-step-per-stop variation occurs as expected [on tested 32-bit] devices. However, on other devices [iPhone 6Plus, iPad Air] the variation is about one step per stop at low light levels (subdued indoor lighting) but only about 0.3 step per stop for sunny outdoor light levels. The reported BrightnessValues in general are much higher on affected devices than on those that are unaffected. Thus the reported values are not only different in magnitude and in gain, but the gain varies with light level: it is no longer "linear with respect to stops" (or logarithmic with respect to absolute light level). This inconsistency means that BrightnessValue can no longer be trusted for light-level readings on affected devices.


Users of my app (in which I re-enabled the hasty workaround created to fix BrightnessValue bug #18437647) report that other 64-bit devices are affected, too, while those testing 32-bit devices say that BrightnessValue still works.

Anaxyrus Americanus,It is not only 64-bit devices. It is actually iOS issue.

My app (Luxi) shows values for the camera settings (aperture, iso, and exposure time) based on camera brightness value.

With iOS8 and earlier calculations were calibrated using light meter device and considered correct.

I had iPhone5 and iPhone5S at my table. Before update to iOS9 values were identical.

I updated iPhone5S to iOS9 and it started to return different values.

Now I have iPhone5/iOS8 and iPhone5S/iOS9 side by side tor testing.

I found that the dependency is not linear.

As a temporary solution for iOS9 I did some measurements and do interpolation between values in total darkness and under the bright lamp.

if (ver >= 9.0) {

// correct value (ios7/8) = ios9_value - offset_value

float a1 = 6.418990; // ios9 value reported by camera in dark room

float a2 = 11.153520; // ios9 value reported by camera under the direct light

float b1 = 8.455; // offset value in dark room (= ios9_value - ios8_value), yes, ios8_value is negative

float b2 = 8.73; // offset value under the direct light ( = ios9_value - ios8_value)


// ios9v - reported brightness value,

// offfset - correction coefficient

// (ios9v - a1)/(a2-a1) = (offset - b1)/(b2-b1)

// (offset - b1) = (ios9v - a1)/(a2-a1) * (b2-b1)

// offset = (ios9v - a1)/(a2-a1) * (b2-b1) + b1


float offsetBrightnessValue = (iOS9BrightnessValue - a1) / (a2 - a1) * (b2 - b1) + b1;

correctBrightness = iOS9BrightnessValue - offsetBrightnessValue;

}

With this workaround my aperture, iso, and exposure time appear to be precise to hundredths

Hi Alina! Thanks for your measurements and corrections; I'll try 'em out. Right now I'm falling back on using camera exposure settings and a correction based on average picture level and an experimentally derived lookup table to compensate for ISO-based biases and spot/matrix mode differences, but that typically only gets me to within 1/3–1/2 stop (my apps are Cine Meter and Cine Meter II).


But I still believe that it's only 64-bit devices on iOS 9 that show the problem (the iPhone 5S is 64 bits, the iPhone 5 is 32 bits). All my devices were consistent and accurate under iOS 8 and earlier, and the brightness value readings I get on my 32-bit devices remain accurate with iOS9. The 64-bit devices alone show the issue.


When I run Luxi 1.2.3 on an iPod touch 5G / iOS 7.1.2, iPod touch 5G / iOS 8.4, iPhone 5 / iOS 9.1, and iPhone 6 Plus / iOS 9.1, the iPods and the 6 Plus agree fairly closely with each other and with a separate meter, and track well from a dark room to daylit exteriors, but the 32-bit iPhone 5 running iOS 9 gives very little variation in brightness, and the displayed EV values are much lower than on the other devices. When I ran Luxi previously under iOS 8 on the iPhone 5, it was quite accurate.


I think that adding your iOS 9 correction on 32-bit devices is causing problems; please test on a 32-bit device running iOS 9 to see if you get the same results.


We light-metering people need to stick together! :-)


[Edit: I'm not sure about the iOS 9 correction accuracy; Luxi on my iPhone 6 Plus / iOS 9.1 matches my pre-iOS9 devices very closely around EV100: 4, but when I point 'em at the overcast sky, (I'm using 'em in "no Luxi" mode), I see nearly a 6-stop difference: EV100: 12.6 on the iPods, EV100: 7.0 on the iPhone 6 Plus. For example, at ISO 200, f/2.8, the pre-iOS9 devices give me about 1/1600 sec shutter; my camera says 1/2000. The iOS 9.1 iPhone 6 Plus (64 bits) says 1/30 sec (which is still better than the iOS 9.1 iPhone 5: it says 1 second!).]

Anaxyrus Americanus,

You have a good collection of the test devices 🙂.

Sad that once you updated, you cannot roll back to the previous version of the OS.

Thank you very much for your answer. I'll do more testing on that.

Thanks to all the contributors, I'm starting to see the light :-) on this bug.


Sadly I have very few devices for testing, and in particular I don't have iOS 8 devices anymore to check out the measurements.

Could somebody please confirm if the bug is only for iOS 9 64-bit, all 64-bit or even some iOS 8 ?


Thanks a lot

Yes, it is only on 64 bit devices and iOS 9.0 - 9.1

They fixed it in iOS 9.2

Hoorray!!!

Fixed in iOS 9.2

Exif brightness values changed in iOS9
 
 
Q