Here's a first, rudimentary implementation of "full resolution silent pictures" aka frsp.
It probably works on all supported models, but the necessary functions/addresses/constants are only identified on pre-D6 cameras for now.
What it can do:
With the camera in rec mode (sensor has to be active), the new (and probably not final) frsp_shoot() Lua function can be used to take a silent picture and save it on card as raw or dng.
On CMOS cameras, the resulting image has no interlacing issues, but there is significant rolling shutter.
On CCD cameras, the resulting image is only usable if
- camera is steady
- subject is stationary
- lighting does not flicker
Also on CCD cams, if the sensor saturates (due to strong light or reflection), the well-known vertical smear will appear on the picture. Another CCD issue is that each field of the sensor is separately exposed (fields are interlaced).
Issues with current implementation:
- Exposure can't be controlled, it's roughly what live view uses at time of exposure. On cams without manual modes, that means high ISO when in dark.
- Exposure related DNG metadata is likely incorrect (may depend on cam generation, etc).
- CCD cameras need a strong positive exposure compensation because the live view exposure time does not work well for frsp.
- A hardcoded memory buffer is used - it might interfere with normal camera operation (but I have not yet seen any issues on cams I tried this).
- On old, low memory cams the hardcoded buffer overlaps the camera's viewport buffer(s) which can surprise the user at first, but seems to do no harm.
- The scripting interface and the raw processing parts probably need a greater rework.
- It's not currently possible to remote shoot with this method.
- The files are named based on the current date/time, and are saved under A/RAW. I'm not sure how we could maintain an image counter that is reliable. The camera's own picture numbering is obviously unusable for this purpose.
Usage example in a script:
sleep(2000)
press("shoot_half")
sleep(2000)
frsp_shoot()
release("shoot_half")
Credits go to Ant for finding this feature and doing most of the original research.