2010-07-21 7 views
1

Je suis en train d'écrire un programme pour étudier les fonctions de l'appareil photo Android. Maintenant, j'ai quelques problèmes à propos de l'opération d'aperçu de la caméra:Android Camera Aperçu question

Mon programme va créer un objet surface de vue dans la fonction onCreate() de l'activité principale (ActivityMain), puis le définir sur le contenu.

super.onCreate(savedInstanceState); 

    m_surface = new MyCameraSurface(this);   
    // remove title bar 
    requestWindowFeature(Window.FEATURE_NO_TITLE);   
    setContentView(m_surface); 

Ensuite startPreview() sera appelé lorsque surfaceChanged() est en cours d'exécution.

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    Log.d(TAG, "*** surfaceChanged >>>>> ***"); 
    Log.d(TAG, "format=" + format + ", width=" + width + ", height=" + height); 

    if(m_control.IsCameraClosed() == false) { 
     if(m_control.IsPreviewRun() == false) {    
      m_control.startPreview(); 
     } 
    } 

    Log.d(TAG, "*** surfaceChanged <<<<< ***"); 
} 

Mon problème est: au début de mon programme reçoit toujours "GetNextPreviewFrame Erreur/1 image: 0x0, tampon: 0x0" Erreur:

07-22 06:47:46.727: DEBUG/MyCameraSurface(2313): *** surfaceChanged <<<<< *** 
07-22 06:47:46.735: DEBUG/SurfaceFlinger(1276): commiting overlay changes 
07-22 06:47:46.735: INFO/TIOverlay(1276): Nothing to do! 
07-22 06:47:46.735: INFO/ActivityManager(1276): Displayed activity com.hykwok.CameraEffect/.ActivityMain: 7866 ms (total 7866 ms) 
07-22 06:47:47.792: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0 
07-22 06:47:48.477: DEBUG/dalvikvm(1276): GC freed 2299 objects/119216 bytes in 143ms 
07-22 06:47:48.793: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0 
07-22 06:47:49.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0 
07-22 06:47:50.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0 

Cependant, quand je passe à une autre activité (ActivityCameraSetting) puis revenir à l'activité principale, la sortie devient normale.

Quelqu'un pourrait-il me suggérer de le réparer? Je suis en train d'utiliser Motorola Milestone. La version du micrologiciel est 2.1-update1 et le numéro de version est SHOLS_U2.02.36.0.

Je ne suis pas sûr que d'autres téléphones Android ont ce problème ou non.

Une autre question est: Est-il possible d'obtenir des données de trame de prévisualisation par la fonction de rappel de prévisualisation sans définir le support de surface de vue?

Nous vous remercions de votre aide.

Les codes sources peuvent être téléchargés à partir d'ici:

Source codes link

+0

J'ai rencontré des problèmes similaires avec les appareils Motorola. De plus, il est parfois facile de faire planter leur téléphone (je veux dire, ne pas provoquer d'exception en Java, mais réinitialiser l'appareil aussi). J'ai abandonné et fait quelques solutions de contournement rusées. Selon ma compréhension, il est définitivement BUG dans Motorola Camera HAL. Cependant, je suis en mesure d'observer que le problème n'est toujours pas résolu sur droid X. Je vous suggère d'essayer un autre appareil (HTC ou Samsung) - Je suis sur le point d'être sûr que votre code fonctionnera très bien. – sandrstar

Répondre

0

Difficile de dire exactement ce que la question est sans plus des journaux, je suppose que sur la base du bit de 0x0 que soit votre surface n'est pas entièrement créé ou la taille de l'aperçu de la caméra n'est pas correctement définie. Une suggestion que je voudrais est d'ajouter:

m_holder.setFormat(PixelFormat.OPAQUE); 

à votre constructeur MyCameraSurface. Je recevais des erreurs aussi ambiguës re: CameraHal et qui semblait résoudre la majeure partie d'entre eux. Pouvez-vous poster un peu plus de vos logs?