akhil tccsa
akhil tccsa

Reputation: 69

Canon camera gets stuck after sometime - 1200D EOS sdk java

we are using canon eos sdk 2.14 to do live streaming and shoot. camera is canon 1200D

below are the camera setting :

live streaming mode : enabled

AF mode : Flexi

below is the code

import java.awt.image.BufferedImage;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.SwingWorker;

import edsdk.api.CanonCamera;
import edsdk.api.commands.FocusModeCommand.Mode;

public class CameraWorker {
    static CanonCamera camera = null;
    public SwingWorker<Void, Void> liveViewWorker = null, shootWorker = null;

    public void startCameraLive() {
        try {
            camera = new CanonCamera();
            if (camera != null && camera.openSession()) {
                if (camera.beginLiveView()) {
                    camera.setFocusMode(Mode.AUTO);
                    camera.setLiveViewMode(true);
                    liveViewWorker = new SwingWorker<Void, Void>() {
                        @Override
                        protected Void doInBackground() throws Exception {
                            try {
                                while (continueLoop) {
                                    try {
                                        Thread.sleep(100);
                                        camera.setLiveViewMode(true);
                                        final BufferedImage image = camera.downloadLiveView();

                                        if (image != null) {
                                                    ///set image to live view
                                        }else{
                                        System.out.println("NO LIVE VIEW>>>>>>>>>>>>>>>>>>>>>>");
                                        }
                                    } catch (Exception e) {
                                        System.out.println("Exception Occured while getting Live View....");
                                        e.printStackTrace();
                                    }
                                }
                            } catch (Exception e2) {
                                e2.printStackTrace();
                            }
                            return null;
                        }

                        protected void done() {
                            try {
                                camera.endLiveView();
                                camera.closeSession();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    liveViewWorker.execute();
                }else{
                System.out.println("Live View not started.....");
                }
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }

      public void onFaceCapture() {
          shootWorker = new SwingWorker<Void, Void>() {
                BufferedImage croppedFaceImage;
                @Override
                protected Void doInBackground() throws Exception {
                    File[] camPictures = camera.shoot();

                    if (camPictures != null && camPictures.length > 0) {
                        for (File curFile : camPictures){
                            try {
                                byte[] imageBuffer = FileNDirUtils.getFileBytes(curFile.getAbsolutePath());

                            }catch(Exception e1){
                                System.out.println("ERRORR:::::::::>>>>>>>>"+e1.getMessage());
                            }
                        }
                    }else{
                        System.out.println("camPictures Null");
                    }
                    return null;
                }
                protected void done() {
                    try {

                    ////////set final image to display


                    } catch(Exception e1){
                        System.out.println("ERRORR:::::::::>>>>>>>>"+e1.getMessage() +" reason ::: "+e1.getCause());
                        e1.printStackTrace();
                    }
                    finally {
                        System.out.println("Done in finally........1");
                    }
                }
            };
            shootWorker.execute();
        }
}

In the above code i have two methods

  1. startCameraLive()
  2. onFaceCapture()

first im starting the live view and displaying the downloaded image continuously and when the user clicks the capture button the second method will be executed. both the methods are invoked as below

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        loop = true;
        cameraWorker = new CameraWorker();
        cameraWorker.startCameraLive();
    }
});

second method like this

SwingUtilities.invokeLater(new Runnable() {
         @Override
         public void run() {
             timerDisplay.setVisible(false);
             face_position_msg.setVisible(false);
             cameraWorker = new CameraWorker();
             cameraWorker.onFaceCapture();
         }
   });

now the problem ::::

after 5 or 6 iterations the camera gets stuck and nothing is functional. everything freezes and after closing the app and restarting the app it doesn't work. we need to unplug the camera or press the capture button on the camera manually to start working again.

the live streaming mode which is set to enable at the beginning becomes disable automatically. we need to set it again.

in startCameraLive() we are setting :::

camera.setFocusMode(Mode.AUTO);

camera.setLiveViewMode(true);

but still when the camera is stuck the live view mode becomes disabled.

how can we get rid of this stuck and we would like to know whats the root cause of this issue. there is no exception at all :(

Please help...

Upvotes: 2

Views: 421

Answers (1)

loadP
loadP

Reputation: 404

Did you try to see if Swingworkers method works with:

System.out.println(javax.swing.SwingUtilities.isEventDispatchThread());

Or maybe adding to your class "extends SwingWorker" ?

Upvotes: 1

Related Questions