2016-10-16 4 views
2

nous utilisons canon eos sdk 2.14 pour faire du streaming en direct et tirer. appareil photo est canon 1200DL'appareil photo Canon est coincé après un certain temps - 1200D EOS sdk java

ci-dessous sont le réglage de la caméra:

mode streaming en direct: activé

Mode AF: Flexi

ci-dessous est le 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(); 
     } 
} 

Dans le code ci-dessus j'ai deux méthodes

  1. startCameraLive()
  2. onFaceCapture()

première im à partir de la vue en direct et d'afficher l'image téléchargée en continu et lorsque l'utilisateur clique sur la capture bouton la seconde méthode sera exécutée. Les deux méthodes sont invoquées comme ci-dessous

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

deuxième méthode comme celui-ci

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

maintenant le problème ::::

après 5 ou 6 itérations la caméra se coince et rien est fonctionnel. tout gèle et après la fermeture de l'application et le redémarrage de l'application, il ne fonctionne pas. nous devons débrancher l'appareil photo ou appuyer manuellement sur le bouton de capture de l'appareil photo pour recommencer à travailler.

Le mode de diffusion en direct qui est activé au début devient automatiquement désactivé. nous devons le redéfinir.

dans startCameraLive(), nous fixons :::

camera.setFocusMode (Mode.AUTO);

camera.setLiveViewMode (true); Cependant, lorsque l'appareil photo est bloqué, le mode d'affichage en direct est désactivé. Comment pouvons-nous nous débarrasser de ce coincé et nous aimerions savoir quelle est la cause première de ce problème. il ne fait pas exception à tous :(

S'il vous plaît aider ...

Répondre

1

Avez-vous essayé de voir si la méthode Swingworkers fonctionne avec:

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

Ou peut-être ajouter à votre classe « étend SwingWorker »?