iOS7 iPhone 5 MakerNotes

Started by bratwoscht, September 11, 2013, 11:14:22 AM

Previous topic - Next topic

bratwoscht

ExifTool (9.36 Windows version) reports

Error: [minor] MakerNotes offsets may be incorrect (fix or ignore?)

on all images using iPhone 5 and iOS7 beta. It can be ignored using the -m option, but I think it would be better to fix this, if possible.

I uploaded an example image: http://wirauch.de/images/IMG_1235.JPG

Best regards
Christoph


Phil Harvey

Hi Christoph,

Thanks for the sample, I'll see what I can do.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

ExifTool 9.37 will handle these makernotes properly.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

bratwoscht

Great! Many thanks.

I already changed the timestamps in a lot of images using the -m option to ignore this error. Will there be any disadvantages or was it ok to do so?

Phil Harvey

There is one unknown field in the maker notes that will be corrupted if these images are edited with version 9.36 or earlier.

Looking more closely at this unknown field, it is PLIST-format, and contains the following information:

Timescale                       : 1000000000
Epoch                           : 0
Value                           : 392368459447083
Flags                           : 1


I don't know what any of these tags mean.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

bratwoscht

Thank you.

Apple is using a special datetime type called "epoch". Maybe it could have something to do with that (see http://www.epochconverter.com/epoch/mac-timestamp.php). But the value seems to be too big for a real timestamp.

I uploaded some more pictures just in case you like to compare them: http://wirauch.de/forexiftool/

Phil Harvey

#6
Thanks for the samples.  Here are the values from these:

> exiftool ../testpics/Apple/iOS7/ -T -filename -datetimeoriginal -value
IMG_1235.JPG 2013:09:03 06:20:11 392368459447083
IMG_1251.JPG 2013:09:03 09:44:22 399081122065875
IMG_1450.JPG 2013:09:04 09:05:38 417739069527500
IMG_1858.JPG 2013:09:06 06:47:55 452906569605333
IMG_2319.JPG 2013:09:07 20:17:27 29656470330750
IMG_2751.JPG 2013:09:08 16:50:43 51536195061583
IMG_2842.JPG 2013:09:09 08:10:29 62485213304958


All of the other tags (timescale, epoch, flags) are the same for all images.

This timestamp value is similar to the XMP-apple_fi:TimeStamp, which I haven't managed to figure out either.  If you have any ideas, please let me know.

- Phil

Edit: Added the value from the first image to the list
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

bratwoscht

Hi Phil,

after doing some research, I found the following:


CMTime structs are non-opaque mutable structs representing times (either timestamps or durations).

A CMTime is represented as a rational number, with a numerator (int64_t value), and a denominator (int32_t timescale).
A flags field allows various non-numeric values to be stored (+infinity, -infinity, indefinite, invalid).  There is also
a flag to mark whether or not the time is completely precise, or had to be rounded at some point in its past.

CMTimes contain an epoch number, which is usually set to 0, but can be used to distinguish unrelated
timelines: for example, it could be incremented each time through a presentation loop,
to differentiate between time N in loop 0 from time N in loop 1.


from: CMTime.h (see e.g. here: http://webcache.googleusercontent.com/search?q=cache:RZBvtvUJq54J:developer.limneos.net/%3Fframework%3DCoreMedia.framework%26header%3DCMTime.h+&cd=5&hl=de&ct=clnk&gl=de)

Phil Harvey

Good find.

This seems to correspond with the fields we see here (with"Value" being the numerator and "Timescale" being the denominator).  But then this still doesn't make sense because the times for the first 2 files would then be 110.8 hours and 116.0 hours, but the DateTimeOriginal values are about 3 hours and 22 minutes apart.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

#9
This reference is also useful:

https://developer.apple.com/library/ios/documentation/CoreMedia/Reference/CMTime/Reference/reference.html

which also states:

CMTimeGetSeconds:
If the CMTime is numeric, epoch is ignored, and time.value / time.timescale is returned.


But the numbers in your samples just don't make sense.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

bratwoscht

I also tried to convert the numbers or interpret them as doubles without success. Perhaps it is just an issue in iOS7 beta. I keep an eye on it after offical iOS7 release.

I tried

> exiftool . -T -filename -datetimeoriginal -value


but got no values. The value will only be printed with exiftool >=9.37 which you did not released yet?

Phil Harvey

Nice try with the doubles.  I looked at the hex values and they didn't have any structure I could recognize either.

Quote from: bratwoscht on September 13, 2013, 03:23:19 PM
The value will only be printed with exiftool >=9.37 which you did not released yet?

Yes.  Well, actually I think I will name it CMTimeValue, based on your reference, at least until we can figure out what it is for.

I hope to release 9.37 tomorrow.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

There are other tags you can help with though, using ExifTool 9.36:

exiftool -u -makernotes:all FILE

shows other unkown tags.  Here are my notes from what I have been able to observe about these unknown tags from the samples you sent:

    # 0x0001 - int32s: seen 0, 1
    # 0x0003 - CMTime structure in PLIST format
    # 0x0004 - int32s: seen 1
    # 0x0005 - int32s: seen values 147-247 (AFPointXPosition perhaps?)
    # 0x0006 - int32s: seen values 186-241 (AFPointYPosition perhaps?)
    # 0x0007 - int32s: seen 1
    # 0x000a - int32s: seen 3 (only in some images -- pictures taken into sun, related to HDR?)


Let me know if you can figure out the meanings of any of these.  I'll include your discoveries in 9.37 if you post back before tomorrow morning.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

bratwoscht

Dear Phil,

I made some experiments.

If I turn the HDR option on and take a picture, the iPhone stores two files: The normal picture and the rendered HDR picture.
If the HDR option is on, the tag 0x000a appears and always has the value 4 for the normal picture and value 3 for the HDR picture.
The tag 0x0004 is always 1 and seems to be 0 in low light situations. See here for more information: http://www.slashgear.com/your-8mp-iphone-5-may-only-give-you-4mp-photos-but-its-not-broken-21248848/
But I never got any 4 MP pictures, my pictures always have 8 MP even in dark or low light situations. Perhaps apple changed this in newer firmwares and extrapolates pictures.
The dark pictures (I hold something directly in front of the camera) have low values in tags 0x0005 and 0x0006, probably the object could not be focused correctly.


>exiftool -u -makernotes:all .
======== ./IMG_3141.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 205
Unknown 0x0006                  : 187
Unknown 0x0007                  : 1
Unknown 0x000a                  : 4
======== ./IMG_3142.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 205
Unknown 0x0006                  : 186
Unknown 0x0007                  : 1
Unknown 0x000a                  : 3
======== ./IMG_3143.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 0
Unknown 0x0005                  : 100
Unknown 0x0006                  : 20
Unknown 0x0007                  : 1
Unknown 0x000a                  : 4
======== ./IMG_3144.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 0
Unknown 0x0005                  : 100
Unknown 0x0006                  : 20
Unknown 0x0007                  : 1
Unknown 0x000a                  : 3
======== ./IMG_3145.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 282
Unknown 0x0006                  : 284
Unknown 0x0007                  : 1
Unknown 0x000a                  : 4
======== ./IMG_3146.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 282
Unknown 0x0006                  : 281
Unknown 0x0007                  : 1
Unknown 0x000a                  : 3
======== ./IMG_3147.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 215
Unknown 0x0006                  : 213
Unknown 0x0007                  : 1
Unknown 0x000a                  : 4
======== ./IMG_3148.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 215
Unknown 0x0006                  : 197
Unknown 0x0007                  : 1
Unknown 0x000a                  : 3
======== ./IMG_3149.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 0
Unknown 0x0005                  : 100
Unknown 0x0006                  : 20
Unknown 0x0007                  : 1
======== ./IMG_3150.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 209
Unknown 0x0006                  : 206
Unknown 0x0007                  : 1
======== ./IMG_3151.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 256
Unknown 0x0006                  : 246
Unknown 0x0007                  : 1
======== ./IMG_3152.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 252
Unknown 0x0006                  : 268
Unknown 0x0007                  : 1
======== ./IMG_3153.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 251
Unknown 0x0006                  : 250
Unknown 0x0007                  : 1
======== ./IMG_3154.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 248
Unknown 0x0006                  : 249
Unknown 0x0007                  : 1
======== ./IMG_3155.JPG
Unknown 0x0001                  : 0
Unknown 0x0003                  : bplist00È........YtimescaleUepochUvalueUflags.
;Ü╩..[...]
Unknown 0x0004                  : 1
Unknown 0x0005                  : 252
Unknown 0x0006                  : 244
Unknown 0x0007                  : 1
    1 directories scanned
   15 image files read


bratwoscht

Panoramas taken with the apple camera app have no makernotes at all.