After some testing, it appears I can see all of the JPEG data using jpeg_chunks->address; apparently the data all seems to fit in a single chunk every time. Now I need to try modifying some of it.
Addressing the concerns above, I've been messing around with modifying the LSBs to encode the data and it is very easy to mess the JPEG up such that it becomes a corrupted image. It's definitely possible to change a few bytes and have the image be perfectly valid though, at least from my testing on standalone JPEG images that I've loaded and changed. I've yet to try modifying the data seen in the filewrite_main_hook, but it looks to be the same as the data I've already been messing with (starts with FFD8, ends with FFD9 as JPEGs should).
I'm just trying to encode date/time information into the image at the moment (if I said watermarking this is what I meant). This is doable by converting the information to a binary representation and then changing the LSB of a byte in the image to the value of a single bit in the message. This means I need to change 1 byte in the image for every bit in my message.
-----
On a different note, I'm noticing that occasionally during my testing the camera just turns off after taking a picture. I'm doing some long-running tasks for testing (converting the binary data to hex and printing it to a file), is this causing the camera to think it failed to take a picture and shut off? The LiveView shows the image and then proceeds back to live tracking, but the camera just shuts off after a few seconds of processing. Preventable by only printing a few thousand hex bytes rather than the whole image, so I'm assuming this is the case.