Idées de source de QualcommCameraHardware native_get_picture: MSM_CAM_IOCTL_GET_PICTURE Connection expiré erreur?

Je travaille sur une bibliothèque pour que l’API Camera plus facile à utiliser pour les développeurs.

Le Droid Incredible 2, en mode portrait, utilisant la caméra orientée vers l’arrière, ne prend pas de photo. Plus précisément, je reçois cette séquence dans LogCat:

 08-18 09:25:52.094: E/QualcommCameraHardware(1368): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 25 error Connection timed out 08-18 09:25:52.094: E/QualcommCameraHardware(1368): getPicture failed! 08-18 09:25:52.094: E/QualcommCameraHardware(1368): get picture failed, giving jpeg callback with NULL data 

Ces messages se produisent environ 5 secondes après que j’appelle takePicture() sur la Camera , ce qui correspond à un ancien code source que je vois pour QualcommCameraHardware et définit un délai d’attente de 5000 ms sur l’ ioctl() pour parler au matériel de la caméra.

Le résultat net est que onPictureTaken() reçoit un byte[] null byte[] de données JPEG, ce qui signifie que nous n’avons pas de photo.

L’appareil fonctionne avec mon code dans toutes les autres configurations testées, y compris en mode portrait avec la caméra frontale.

Est-ce que quelqu’un sait quelque chose de spécifique qui pourrait causer cet échec particulier?

METTRE À JOUR

Je ne peux plus reproduire l’erreur. Je supprimerais la question, mais cela n’est apparemment pas possible une fois qu’il y a des réponses.

MSM_CAM_IOCTL_GET_PICTURE est un appel du kernel qui exécute la fonction

 static int msm_get_pic(struct msm_sync *sync, void __user *arg) 

J’ai téléchargé les sources du kernel pour votre appareil depuis le HTCdev et trouvé la fonction définie dans

 drivers/media/video/msm/msm_camera-7x30.c 

Pourrait vérifier quels sont les messages du kernel lorsque vous prenez une photo?

 adb shell su -c "dmesg" 

Très probablement, le service cameraService qui fait partie du processus multimédia est tombé en arrière-plan. Si vous essayez juste d’exécuter l’application de caméra par défaut sur Android et qu’elle ne s’affiche pas, redémarrez simplement l’appareil pour désactiver cette erreur.

Je pense que vous réutilisez le rappel d’image pour les rappels bruts et JPEG. Donc, s’il était appelé comme rappel brut, les données pourraient être nulles. Parce que le document dit,

Déclenche une capture d’image asynchrone. Le service de caméra lance une série de rappels sur l’application à mesure que la capture d’image progresse. Le rappel de l’obturateur se produit après la capture de l’image. Cela peut être utilisé pour déclencher un son pour informer l’utilisateur que cette image a été capturée. Le rappel brut se produit lorsque les données d’image brutes sont disponibles (REMARQUE: les données seront nulles si aucun tampon de rappel d’image brute n’est disponible ou si le tampon de rappel d’image brute n’est pas assez grand pour contenir l’image brute). Le rappel postview se produit lorsqu’une image de postview entièrement mise à l’échelle est disponible (REMARQUE: tous les matériels ne le prennent pas en charge). Le rappel jpeg se produit lorsque l’image compressée est disponible. Si l’application n’a pas besoin d’un rappel particulier, une valeur null peut être transmise au lieu d’une méthode de rappel.