More about the BUSY screen:
* Tried applying the SRM_ClearBusy hack and manually block the full shutter event. Result: the camera ignores the event and stays in LiveView for about 2 seconds, then the MPU throws ERR80.
* Tried decoding the BUSY message (the one from UILOCK_SHUTTER) - it's complicated, they are different in each video mode. After getting it somewhat working, I've noticed it also blocks autofocus. Go figure...
* In the end, I've noticed that freeing one SRM buffer (and keeping the others allocated) appears to be a good compromise (even though it's still a hackish solution):
- no BUSY screen
- with N-1 buffers allocated from SRM, and nothing from Shoot memory, Canon firmware:
- will still record H.264 (it will use the last buffer in this case)
- will take a picture, then ERR70 (because it expects the SRM buffers to be freed in the same order as allocated)
- will go outside LiveView and back, but will show BUSY on the screen
- therefore, in this case, using the last SRM buffer is NOT safe
- with the entire Shoot memory is allocated, and then N-1 buffers from SRM, Canon firmware is very unlikely to use the last buffer:
- will not start recording H.264 (if the allocation was done in standby) -> ERR70 (timeout allocating memory).
- will not stop recording H.264 (if the allocation was done while recording) -> lockup, ERR70 after 10-20 seconds (similar)
- will not finish taking a picture (BUSY screen after capturing the exposure; will overwrite the additional SRM buffer)
- will not enter H.264 playback mode from LiveView (black screen, Cannot playback movie after 10-20 seconds)
- will enter CR2 playback mode from LiveView
- will exit LiveView (to regular photo mode)
- will enter Canon menu
- all the failed actions from above will succeed as soon as we will deallocate our Shoot and SRM memory buffers (if done before the timeout)
- with the exception of still photo capture, none of the above actions resulted in overwriting the additional SRM buffer
- therefore, in this case, I believe using the last SRM buffer during LiveView is *probably* safe.
In any case, this method should be a lot safer than using the entire SRM memory after free (as in previous builds without the BUSY screen).
I also believe mlv_rec (in its current state) should now be usable on the current codebase (except maybe for full-res LiveView), as the memory management trickery has been moved into the memory backend.
BTW - if any of you has any clue on how to reproduce
this bug, it will be very appreciated.
Forgot to mention - 700D and EOS M will need an extra constant (easy to find).
New build posted.