Aller au contenu

Problème utilisation API appareil photo.


john7002

Recommended Posts

Bonjour je teste actuellement l'utilisation d'un appareil photo, voici mon code :

public class Test_cam extends Activity implements PictureCallback,ShutterCallback,OnClickListener{
 private static final String TAG = "CameraDemo";
  Test_cam_preview preview; //  This object will create the Camera object and return it to the CameraDemo activity. 
  Button buttonClick; 
  public boolean onProgress = false;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);

    preview = new Test_cam_preview(this); 
    ((FrameLayout) findViewById(R.id.preview)).addView(preview); 

    buttonClick = (Button) findViewById(R.id.buttonClick);
    buttonClick.setOnClickListener(this);      
    Log.d(TAG, "onCreate'd");
  }

  public void launch_scanpic(){
	  Intent intent = new Intent(Test_cam.this,Test_cam_scanpic.class);
	  startActivity(intent);
  }



  	@Override
	public void onClick(View v) { 
  		 if(!onProgress)
  		 {
  			onProgress = true;
	        preview.camera.takePicture(Test_cam.this, null, Test_cam.this); //bien mettre null car raw callback renvoit tjrs null!
	        //on lance scanclothe activity
  		 }
 }


  @Override
     public void onShutter() {
             Log.d(getClass().getSimpleName(), "get pic...");               
     }



  @Override
     public void onPictureTaken(byte[] data, Camera camera) {

      FileOutputStream outStream = null;
      try {
        if (data==null)
        {
        	Log.e(TAG,"data is null !!!!!!!");
        }
        else
        {
        	// Write to SD Card
	        outStream = new FileOutputStream("/sdcard/test.jpg"); 
        	outStream.write(data);
        	Log.e(TAG, "onPictureTaken - wrote bytes: " + data.length);
        	 outStream.close();
        }



      } catch (FileNotFoundException e) { 
    	  Log.e(getClass().getSimpleName(), "Fichier nom Trouvé a l'écriture de L'image",e);
        e.printStackTrace();
      } catch (IOException e) {
    	  Log.e(getClass().getSimpleName(), "Erreur à L'enregistrement de l'image",e);
        e.printStackTrace();
      } 

      Log.e(TAG, "onPictureTaken - jpeg");
      SystemClock.sleep(2000);
      onProgress=false;
      launch_scanpic();
  }

}

launch_scanpic() lance un nouvel intent qui affiche la photo qui vient d'être prise.

J'ai bien la preview video obtenu via la caméra. J'ai une instance de boutton qui déclenche la prise de vue et l'enregistre sur la sd. Ca fonctionne de temps en temps et parfois ça plante (freeze de l'overview et ensuite popup signifiant que le programme ne répond plus). Dans le logcat je n'ai aucune info d'erreur.

Lorsque tout se passe bienvoici les logs:

05-03 18:22:31.053: INFO/SecCamera(76): int android::SecCamera::endSnapshot() :
05-03 18:22:31.053: INFO/SecCamera(76): munmap():virt. addr 0x41ddb000 size = 4261248
05-03 18:22:31.061: DEBUG/dalvikvm(700): GC_FOR_MALLOC freed 506K, 57% free 2779K/6407K, external 1625K/2137K, paused 15ms
05-03 18:22:31.061: INFO/dalvikvm-heap(700): Grow heap (frag case) to 7.734MB for 1114262-byte allocation
05-03 18:22:31.088: DEBUG/dalvikvm(700): GC_FOR_MALLOC freed 0K, 49% free 3867K/7559K, external 1625K/2137K, paused 13ms
05-03 18:22:31.127: DEBUG/dalvikvm(700): GC_CONCURRENT freed <1K, 49% free 3867K/7559K, external 1625K/2137K, paused 2ms+2ms
05-03 18:22:32.022: ERROR/CameraDemo(700): onPictureTaken - wrote bytes: 1114246
05-03 18:22:32.022: ERROR/CameraDemo(700): onPictureTaken - jpeg

J'ai essayé de blinder le code via un timer ou des variables booléenes mais j'ai toujours l'erreur. Quelqu'un aurait une idée? Je n'ai rien trouvé pour m'aider via google.

Pour info je teste sur un Google Nexus S.

Merci

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...