edsdkcanon-sdk

Canon EDSDK: Taking photo in LiveView breaks up the LV forever


I have my application controlling the camera using C# and fairly lightweight EDSDKWraper (which I have modified a bit). I can already control basically everything, like LiveView, focusing (auto + manual), setting and reading various properties and shooting pictures, optionally with automated Focus bracketting/stacking.

However, there is a problem: When i start the LiveView and then take a photo using the standard way

SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Completely_NonAF);
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF);

it works, I can download the pictures or cancel the download using Download + DownloadComplete or DownloadCancel functions. Unfortunately, after that it not possible to get the LiveView image anymore, the DownloadEvfImage returns OBJECT_NOT_READY and keeps it returning forever.

The only way out is to stop and start the LiveView again OR start the LiveView autofocus using the DoEvfAF command. But I would like to avoid that.

This happens on both Canon 5D Mark IV and 5D Mark III and the same issue also happens on a completely different C# Framework with an different example that I just downloaded from the web. The EOS Utility seems to work fine though, so it seems there is some way.

Does the "LiveView + taking photo + LiveView again" even work in your app, whether C# or C++? Is there some trick I need to perform?

I have already spent a lot of time trying to fing a bug, such as not released data, and searching for answers on web, but no luck so far.


Solution

  • Finally found what is happening! So to let others know, the catch was that the camera was displaying the picture after the shot was taken on its LCD (i.e. ordinary review). During this display the LiveView doesn't work! The EOS utility didn't save the images on the camera's card, so there was nothing to review and the LV continued uninterrupted.

    Anyway, the solution/workaround is to get rid of the reviewed image on the LCD. So far, I have found two ways that will again get the LV working seamslessly, without the need to turn it off and on and slapping the mirror:

    Simulate the HALF-press of the shutter button

    I.e. this simple code returns the LV to normal working mode:

    SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Halfway_NonAF);
    SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF);
    

    Play with the kEdsPropID_Evf_OutputDevice flags

    You can change the LV output to the Camera instead of the PC, turning the PC output off, and then turning the PC ourput on again. The mirror won't move. This means first set kEdsPropID_Evf_OutputDevice to KEdsEvfOutputDevice_TFT and then immediately set it agan, but this time to KEdsEvfOutputDevice_PC (or KEdsEvfOutputDevice_TFT | KEdsEvfOutputDevice_PC if you want to keep the Camera output).