41 votes

Idées de source de QualcommCameraHardware native_get_picture : MSM_CAM_IOCTL_GET_PICTURE Erreur de connexion interrompue ?

Je travaille sur une bibliothèque pour rendre le Camera plus facile à utiliser pour les développeurs.

Le Droid Incredible 2, en mode portrait, en utilisant l'appareil photo arrière, ne parvient pas à prendre une photo. Plus précisément, j'obtiens 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 apparaissent environ 5 secondes après que j'ai appelé takePicture() sur le Camera ce qui correspond à un vieux code source que je vois pour QualcommCameraHardware qui met en place un délai d'attente de 5000ms sur le ioctl() appeler pour parler au matériel de la caméra.

Le résultat net est que onPictureTaken() On lui passe un 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.

Quelqu'un connaît-il un élément spécifique qui pourrait causer cette défaillance particulière ?

UPDATE

Je ne peux plus reproduire l'erreur. Je supprimerais bien la question, mais ce n'est apparemment pas possible dès lors qu'il y a des réponses.

1voto

eidelen Points 121

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

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

J'ai téléchargé la source du noyau pour votre appareil depuis HTCdev et j'ai trouvé la fonction définie dans

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

Pourriez-vous vérifier quels sont les messages du noyau lorsque vous prenez une photo ?

adb shell su -c "dmesg"

0voto

ling.s Points 5232

Très probablement le cameraService qui fait partie du processus média s'est écrasé en arrière-plan. Si vous essayez d'exécuter l'application appareil photo par défaut dans Android et qu'elle ne s'affiche pas, redémarrez simplement l'appareil pour éliminer cette erreur.

Je pense que vous réutilisez le callback de l'image pour les callbacks raw et jpeg. Donc, s'il était appelé comme callback brut, les données pourraient être nulles. Parce que le document dit,

Déclenche une capture d'image asynchrone. Le service de caméra lancera une série de rappels à l'application au fur et à mesure de la progression de la capture d'image. Le rappel de l'obturateur se produit après la capture de l'image. Elle peut être utilisée pour déclencher un son afin de faire savoir à l'utilisateur que l'image a été capturée. Le rappel brut se produit lorsque les données de l'image brute 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 post-vision se produit lorsqu'une image post-vision entièrement traitée et mise à l'échelle est disponible (REMARQUE : tous les matériels ne le supportent pas). Le rappel jpeg se produit lorsque l'image compressée est disponible. Si l'application n'a pas besoin d'un rappel particulier, un null peut être transmis à la place d'une méthode de rappel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X