Discovering Nikon D610 FlashInfo0106/ShotInfo0232

Started by TorC, January 02, 2016, 09:15:51 PM

Previous topic - Next topic

TorC

I have the D610, an external third-party speedlite (Flashpoint zoom Li-on), and am interested in helping to decode these segments.  Are there any tips on what information is needed and how to best gather it?  From the reading I have done, I take it the first thing to do is gather metadata diffs of images with nearly identical settings with records.  Any more specific tips?

Edit to add:  I also have a D70 if comparisons between metadata are useful anywhere.

TorC

Well, I took a first try and gathered a set of images adjusting the main and flash exposure compensation with the on-board flash.

Here is what I got from diffs of the flash force on at flash EC of 0,+1,-3 (for Flash Info V0106):

exiftool -U -a '-*flash*' $file


Flash Exposure Compensation     : 0=0,   +1=+1,   -3=-3
Nikon Flash Info Unknown 0x001d : 0=0,   +1=250,  -3=18
Nikon Flash Info Unknown 0x0027 : 0=0,   +1=250,  -3=18
Nikon Flash Info Unknown 0x002b : 0=46,  +1=58,   -3=10


Am I on the right track with this, and are there other tools to speed data collection I should be using?  Am I right to use basic small jpgs to minimize space required for most testing?

Thank you,

Tor

Phil Harvey

Hi Tor,

Thanks for the offer.  There is a lot of flash information in the Nikon custom settings that takes some work to decode.  Take a look at the Nikon Tags documentation to see what has been decoded for other models.  You are on the right track with what you are doing.  A simple diff of the -U output is what you want.  There will be a lot of noise (bytes that change randomly), but if you know where to look you should be able to figure out where the settings are stored.  It would be great if you could also go through the full set of custom settings.  If you want, I can help with decoding... shooting small JPEG's is the thing to do. Be sure to change each setting back to the default before moving on to the next one.

- 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 ($).

Hayo Baan

Phil already confirmed you are on the right track :)

Using small jpgs is a smart choice as it will contain all metadata, while still staying small. To minimise file size even more, consider taking images with the lens cap (as long as that doesn't interfere with your flash tests, of course).
Hayo Baan – Photography
Web: www.hayobaan.nl

TorC

Thanks for the confirmation.  I'll start work as I have time available.  Can "default" setting mean "my preferred setting", or is there a reason it needs to be "factory default"?

Phil Harvey

Your preferred setting is fine.  The point is to have only one different setting change for each image.  Then you can compare any two images and you should see only the two settings that changed.

- 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 ($).

TorC

Hmmm... tried one from a test set of three.  I'm not entirely sure how to start reading it - or perhaps I just don't have enough data.  I've attached the exiftool -U output from them.  Setting is custom setting A1, AF-C priority selection - release, and A2, AF-S priority selection - release.  Base is focus priority on both.

Looking at this, I'm going to also set a fixed WB (I see some unknown colour balance that I suspect is the Auto-WB) and turn VR off in addition to manual fixed shutter/aperture/focus.  Any other settings you can name that I can fix in the base settings to make most of the diffs easier to parse?

It'll probably be a few days before I can attack this in earnest, but I can use the time to get my workflow planned out to make the parsing as easy as possible.

P.S.  I've attached the 'exiftool -U' output to be sure we're looking at the same thing.  Turns out it 3x the size of the original (dark) jpgs.

Phil Harvey

With such a small set it is very difficult to find the location of the settings.  Try changing a setting back and forth a number of times and mail me the JPEG images (philharvey66 at gmail.com).  Use a pseudo-random pattern when changing the setting, something like this:  off-on-on-off-off-off-on

Once we determine the location for one setting, the others will all be nearby.

- 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 ($).

TorC

#8
Sent you the files.  I spent too much time on it this morning, and think Custom setting A1, AF-C priority selection, is in:

-   Nikon Shot Info 0x07cf          : 3
+   Nikon Shot Info 0x07cf          : 131

Found this by doing 'diff -U1000 | grep -v [+-]' to get what stayed the same between same setting files and then a diff -u of the result.  This is the only one with a neat change with setting change.

Edit to note: this is the only change that showed up without other changes within 3 lines.  The final diff was still rather longer than I expected.

Phil Harvey

Excellent!  Good work!!  It looks like you got it.  So the A1 AF-CPrioritySelection setting is offset 0x07cf bitmask 0x80.

Nice.  All of the other settings should be nearby 0x07cf.  And you may find that the structure of the settings block is similar to other cameras.

Let me know and I'll add anything you find.  It would be easiest for me if you present your findings like this:

0x07cf mask 0x80 - A1: AF-CPrioritySelection, 0x00 = Release, 0x80 = Focus

- 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 ($).

TorC

I think I mostly understand.  I've sent you a set of JPGs from the next setting to confirm I'm translating this correctly.  If I'm right, then:

0x07cf mask 0x20 - A2: AF-SPrioritySelection, 0x00 = Release, 0x20 = Focus

I'm still not sure where the +3 comes from - or is the assumption for now that a different setting is also on 0x07cf and causing that?

TorC

Thinking a bit more about trying to automate the process.  Can I safely assume a colon is only a field separator in exiftool output?

I'm thinking something like the following.  basefile is the condensed exiftool ouput from a set of files in base configuration with changing lines stripped out.  testfile is the exiftool output for a setting to check.


cat testfile|while read setting
do
  if [[ grep $setting_field1 $basefile ]]
  then
    setting >>$settingsfile
  fi
done

diff -u $basefile $settings


Undoubtedly not working code, and surely "should" be optimized, but it should give the idea.  Probably will miss some shot info that changes, but I think it will be reasonably robust for the custom settings, at least.

Phil Harvey

Great, thanks.  Yes, this is exactly correct for AF-SPrioritySelection.  Excellent!!

The remaining unknown value of 3 will be due to some other custom setting that you'll discover later.  So far, the decoding is similar to the D810, so I predict that the 3 may be FocusTrackingLockOn (if the D610 has this feature).

I find my attached script very useful.  Here is a sample usage:

> exiftool ~/Desktop/D610\ AF-S/ -a -U -G1 -w tmp/%f.txt
    1 directories scanned
    9 image files read
    9 output files created
> showtest -h -s "Nikon Shot Info" tmp
Looking for 'Nikon Shot Info 0x0000'
Enter Tag ID (RTN=0x0000, p=previous, q=quit): 0x7c8
Enter Tag ID (RTN=0x07c9, p=previous, q=quit):
Enter Tag ID (RTN=0x07ca, p=previous, q=quit):
Enter Tag ID (RTN=0x07cb, p=previous, q=quit):
Enter Tag ID (RTN=0x07cc, p=previous, q=quit):
Enter Tag ID (RTN=0x07cd, p=previous, q=quit):
Enter Tag ID (RTN=0x07ce, p=previous, q=quit):
Enter Tag ID (RTN=0x07cf, p=previous, q=quit):
tmp/DSC_5232.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0x83
tmp/DSC_5233.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0xa3
tmp/DSC_5234.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0xa3
tmp/DSC_5235.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0x83
tmp/DSC_5236.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0xa3
tmp/DSC_5237.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0xa3
tmp/DSC_5238.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0x83
tmp/DSC_5239.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0x83
tmp/DSC_5240.txt:[Nikon]         Nikon Shot Info 0x07cf          : 0x23
Enter Tag ID (RTN=0x07d0, p=previous, q=quit): q


I've just added the showtest -h option to make decoding these bitmasks easier.  I'm glad you're a programmer and already understand hexadecimal. :)

- 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 ($).

TorC

On checking the custom settings page, I would agree that is likely, and I believe the timing is about right for them to be similar.  I can't verify, but the D600 is likely to be very close to the D610 - perhaps identical +/- $tagoffset.  Any chance of a table of contents for the custom settings page to make it easier to compare and see which cameras have known info?

I'll look at the script later.

Quote from: PhilI'm glad you're a programmer and already understand hexadecimal. :)

At least I know enough Bash and Python to get some useful work done with effort and know the principles of hex.  Whether that qualifies me as a programmer may still be an open question.

Phil Harvey

Quote from: TorC on January 06, 2016, 01:33:04 PM
I can't verify, but the D600 is likely to be very close to the D610 - perhaps identical +/- $tagoffset.

Yes.  Too bad the D600 settings haven't been decoded yet.

QuoteAny chance of a table of contents for the custom settings page to make it easier to compare and see which cameras have known info?

Not likely I'm afraid.

- 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 ($).