Prévisualisation de la caméra traitement de données d'image avec Android L et la caméra 2 API

Je travaille sur une application android qui est le traitement de l'image d'entrée à partir de l'appareil photo et l'affiche à l'utilisateur. C'est assez simple, j'ai enregistrer un PreviewCallback sur l'appareil photo de l'objet avec le setPreviewCallbackWithBuffer.
C'est facile et fonctionne parfaitement avec le vieil appareil photo de l'API

public void onPreviewFrame(byte[] data, Camera cam) {
    //custom image data processing
}

J'essaie de port mon application pour prendre avantage de la nouvelle Caméra 2 de l'API et je ne suis pas sûr exactement comment doit-je faire. J'ai suivi le Camera2Video dans L Aperçu des échantillons qui permet d'enregistrer une vidéo. Cependant, il n'y a pas d'image directe de transfert de données dans l'échantillon, donc je ne comprends pas exactement où je vais le chercher, le pixel de l'image des données et comment le traiter.

Quelqu'un pourrait-il m'aider ou de suggérer la manière dont on peut obtenir la fonctionnalité de PreviewCallback dans android L, ou comment il est possible de traiter les données de l'aperçu de la caméra avant de l'afficher à l'écran? (il n'y a pas d'aperçu de rappel sur l'appareil photo de l'objet)

Merci!

  • ont u triées ce problème.
  • Oui, je l'ai fait. Vérifier VP de la réponse et aussi Camera2Basic et Camera2Video à partir d'android échantillons. Vous devez créer un ImageReader et l'utilisation setOnImageAvailableListener pour obtenir une nouvelle image lorsqu'ils sont capturés. Afin de dessiner une image que j'ai créé OpenGL surface, ce qui rend la texture et un shader qui convertit YUV_420_888 à RGB.
  • Merci, j'ai vérifié à la fois repos et vice-président de la réponse. Lorsque j'ai mis addTarget(mImageReader.getSurface()); Il donne seulement trois cadres onImageAvailable après qu'il se fige à l'aperçu.
  • Cette (ou quelque chose de similaire) peut se produire lorsque vous n'avez pas lu/fermer l'image de la ImageReader. Assurez-vous que l'auditeur onImageAvailable(...) vous faire lire et de fermer l'image. L'Auditeur ne peut pas être vide, même si vous n'utilisez pas l'image, vous devez la lire (par exemple avec reader.acquireNextImage()).
  • Merci @bubo. Il m'a fallu un certain temps à comprendre ce comportement, car il n'était pas mentionné dans la documentation.
InformationsquelleAutor bubo | 2014-08-23