OpenCV / Android BufferQueue Erreur: La Texture De La Surface A Été Abandonné

Nouvelle pour Android et OpenCV. Essayé d'implémenter du code du nouveau livre, Mastering OpenCV avec la Pratique de la Vision par Ordinateur des Projets. L'application fondamentalement rend cartoonified images de prévisualisation de la caméra à l'aide d'OpenCV. Vous pouvez toucher l'écran pour enregistrer le cartoonified image.

Code Source à partir d'auteurs est situé ici.

J'ai fait une petite modification (voir ci-dessous) pour CartoonifierApp.java fichier afin que je puisse charge statique la cartoonifier de la bibliothèque avec la OpenCV Manager application (le code d'origine jeta un UnsatisfiedLinkError).

Le problème que je me pose, c'est que lorsque je charge l'application sur mon Galaxy Nexus (Android 4.1.1), je reçois un vide noir de l'écran. Mon LogCat dit:

E/BufferQueue(4744): [sans nom-4744-0] setBufferCount: SurfaceTexture
a été abandonné! E/Cartoonifier::SurfaceView(4744):
startPreview() a échoué

Je pense que c'est un problème de mémoire. Je sais que le rpc code fonctionne, car il fonctionne très bien par lui-même sur mon ordinateur, bien que le rendu est lent sur un relativement nouveau pc portable (Asus U46E).

Je n'ai aucune idée de comment résoudre ce problème. Le seul conseil utile que j'ai trouvé était ici. Si je remplace mon setPreview méthode CatoonifierVewBase.java

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
     mCamera.setPreviewTexture( new SurfaceTexture(10) );
 else
     mCamera.setPreviewDisplay(null);

avec

 mCamera.setPreviewDisplay(mHolder);

puis ce qui se passe est la caméra fonctionne comme d'habitude et je peux enregistrer cartoonified images en touchant l'écran. Notez que ce n'est pas exactement le résultat souhaité que je veux continuellement cartoonify image de prévisualisation de la caméra. L'appareil photo ne fonctionne que parce que je n'écris pas à la surface d'affichage (du moins c'est ma compréhension). La réponse dans le mentionné précédemment site a certains solution de contournement, mais je n'ai aucune idée de quoi il parle.

BTW j'ai essayé tous les échantillons de OpenCV4Android apps et ils fonctionnent très bien. Aussi, je suis en utilisant OpenCV version 2.4.3. API niveau de la cible est de 15.

Plein Logcat:

12-22 15:33:07.966: I/CartoonifierApp(5999): Instancié nouvelle classe
com.Cartoonifier.CartoonifierApp 12-22 15:33:07.966:
J'/CartoonifierApp(5999): appelé onCreate 12-22 15:33:07.966:
J'/CartoonifierApp(5999): tentative de chargement de la bibliothèque OpenCV 12-22
15:33:07.982: I/Cartoonifier::SurfaceView(5999): Instancié nouveau
classe com.Cartoonifier.CartoonifierView 12-22 15:33:07.990:
J'/CartoonifierApp(5999): onResume 12-22 15:33:07.990:
J'/Cartoonifier::SurfaceView(5999): openCamera 12-22 15:33:07.990:
J'/Cartoonifier::SurfaceView(5999): releaseCamera 12-22 15:33:08.099:
D/OpenCVManager/Helper(5999): Service de connexion créé 12-22
15:33:08.099: D/OpenCVManager/Helper(5999): Essayer d'obtenir le chemin de bibliothèque
12-22 15:33:08.138: D/OpenCVManager/Helper(5999): Essayer d'obtenir
liste des bibliothèques 12-22 15:33:08.169: D/OpenCVManager/Helper(5999): Bibliothèque
liste: "" 12-22 15:33:08.169: D/OpenCVManager/Helper(5999): Première
essayez de charger des libs 12-22 15:33:08.169: D/OpenCVManager/Helper(5999):
En essayant d'init OpenCV libs 12-22 15:33:08.169:
D/OpenCVManager/Helper(5999): tentative de chargement de la bibliothèque
/data/data/org.opencv.moteur/lib/libopencv_java.donc, 12-22 15:33:08.169:

D/dalvikvm(5999): Essayer de charger lib
/data/data/org.opencv.moteur/lib/libopencv_java.donc 0x41936a40 12-22

15:33:08.193: D/dalvikvm(5999): Ajout d'partagé lib
/data/data/org.opencv.moteur/lib/libopencv_java.donc 0x41936a40 12-22

15:33:08.193: D/OpenCVManager/Helper(5999): OpenCV libs init était ok!

12-22 15:33:08.193: D/OpenCVManager/Helper(5999): Première tentative de
charge libs est OK 12-22 15:33:08.193: D/OpenCVManager/Helper(5999): Init
fini avec le statut de 0 12-22 15:33:08.193:
D/OpenCVManager/Helper(5999): supprimer la liaison de service 12-22 15:33:08.200:
D/OpenCVManager/Helper(5999): l'Appel à l'aide de rappel 12-22
15:33:08.200: I/CartoonifierApp(5999): OpenCV chargé avec succès

12-22 15:33:08.200: D/dalvikvm(5999): Essayer de charger lib
/data/data/com.Cartoonifier/lib/libcartoonifier.donc 0x41936a40 12-22

15:33:08.200: D/dalvikvm(5999): Ajout d'partagé lib
/data/data/com.Cartoonifier/lib/libcartoonifier.donc 0x41936a40 12-22

15:33:08.200: D/dalvikvm(5999): Pas de JNI_OnLoad trouvé dans
/data/data/com.Cartoonifier/lib/libcartoonifier.donc 0x41936a40,
ignorant l'initialisation 12-22 15:33:08.200: D/OpenCVManager/Helper(5999):
Service de connexion créé 12-22 15:33:08.200:
D/OpenCVManager/Helper(5999): Essayer d'obtenir le chemin de bibliothèque 12-22

15:33:08.232: D/OpenCVManager/Helper(5999): Essayer d'obtenir la liste de la bibliothèque
12-22 15:33:08.271: D/OpenCVManager/Helper(5999): liste des bibliothèques: ""

12-22 15:33:08.271: D/OpenCVManager/Helper(5999): Première tentative de
charge libs 12-22 15:33:08.271: D/OpenCVManager/Helper(5999): tentative de

init OpenCV libs 12-22 15:33:08.271: D/OpenCVManager/Helper(5999):
Essayer de charger la bibliothèque de
/data/data/org.opencv.moteur/lib/libopencv_java.donc, 12-22 15:33:08.271:
D/dalvikvm(5999): Essayer de charger lib
/data/data/org.opencv.moteur/lib/libopencv_java.donc 0x41936a40 12-22

15:33:08.271: D/dalvikvm(5999): Partagé lib
'/data/data/org.opencv.moteur/lib/libopencv_java.si " déjà chargé dans
même CL 0x41936a40 12-22 15:33:08.271: D/OpenCVManager/Helper(5999):
OpenCV libs init était ok! 12-22 15:33:08.271:
D/OpenCVManager/Helper(5999): Première tentative de chargement d'libs est OK

12-22 15:33:08.271: D/OpenCVManager/Helper(5999): Init terminé avec le statut de 0
12-22 15:33:08.271: D/OpenCVManager/Helper(5999): supprimer la liaison de service
12-22 15:33:08.271: D/OpenCVManager/Helper(5999): l'Appel à l'aide de rappel
12-22 15:33:08.271: I/CartoonifierApp(5999): OpenCV chargé avec succès
12-22 15:33:08.279: D/dalvikvm(5999): Essayer de charger lib /data/data/com.Cartoonifier/lib/libcartoonifier.donc 0x41936a40
12-22 15:33:08.279: D/dalvikvm(5999): Partagé lib '/data/data/com.Cartoonifier/lib/libcartoonifier.si " déjà chargé dans les mêmes CL 0x41936a40
12-22 15:33:08.302: I/Cartoonifier::SurfaceView(5999): surfaceCreated
12-22 15:33:08.302: I/Cartoonifier::SurfaceView(5999): surfaceChanged(). La taille de la fenêtre: 1196x670
12-22 15:33:08.302: I/Cartoonifier::SurfaceView(5999): setupCamera(1196x670)
12-22 15:33:08.302: I/Cartoonifier::SurfaceView(5999): à Partir thread de traitement
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé Appareil photo de Résolution de 1920 x 1080
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé Appareil photo de Résolution de 1280x720
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 960x720
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé Caméra Résolution de 800x480
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 720x576
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé Appareil photo de Résolution de 720x480
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 768x576
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 640 x 480
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé Appareil photo de Résolution de 320x240
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 352x288
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 240x160
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 176x144
12-22 15:33:08.310: I/Cartoonifier::SurfaceView(5999): Trouvé la Résolution de la Caméra 128x96
12-22 15:33:08.318: I/Cartoonifier::SurfaceView(5999): Choisi Aperçu de l'Appareil photo Taille: 1280 x 720
12-22 15:33:08.333: D/dalvikvm(5999): GC_FOR_ALLOC libéré 131K, 2% gratuit 10807K/11011K, pause 13ms, total 13ms

12-22 15:33:08.333: I/dalvikvm-tas(5999): la croissance des tas (frag) de la 11.902 MO pour 1382416-allocation d'octets

12-22 15:33:08.357: D/dalvikvm(5999): GC_CONCURRENT libéré 1K, 3% gratuit 12156K/12423K, pause 12 ms+1 ms, le total des 24ms

12-22 15:33:08.357: D/dalvikvm(5999): WAIT_FOR_CONCURRENT_GC bloqué 11 ms

12-22 15:33:08.365: D/dalvikvm(5999): GC_FOR_ALLOC libéré 0K, 3% gratuit 12156K/12423K, pause 9ms, total 9ms

12-22 15:33:08.372: I/dalvikvm-tas(5999): la croissance des tas (frag) de la 13.219 MO pour 1382416-allocation d'octets

12-22 15:33:08.388: D/dalvikvm(5999): GC_CONCURRENT libéré 0K, 3% gratuit 13506K/13831K, pause 11 ms+1 ms, le total des 21ms

12-22 15:33:08.388: D/dalvikvm(5999): WAIT_FOR_CONCURRENT_GC bloqué 7ms

12-22 15:33:08.404: D/dalvikvm(5999): GC_FOR_ALLOC libérés <1K, 3% gratuit 13506K/13831K, pause 9ms, total de 10 ms

12-22 15:33:08.411: I/dalvikvm-tas(5999): la croissance des tas (frag) de la 16.735 MO pour 3686416-allocation d'octets

12-22 15:33:08.427: D/dalvikvm(5999): GC_CONCURRENT libérés <1K, 3% gratuit 17106K/17479K, pause 12 ms+1 ms, le total des 22ms

12-22 15:33:08.427: D/dalvikvm(5999): WAIT_FOR_CONCURRENT_GC bloqué 10ms

12-22 15:33:08.443: D/dalvikvm(5999): GC_FOR_ALLOC libérés <1K, 3% gratuit 17106K/17479K, pause de 10 ms, le total des 10ms

12-22 15:33:08.450: I/dalvikvm-tas(5999): la croissance des tas (frag) de 20.250 MO pour 3686416-allocation d'octets

12-22 15:33:08.466: D/dalvikvm(5999): GC_CONCURRENT libéré 0K, 2% gratuit 20706K/21127K, pause 12 ms+2ms, total 22ms

12-22 15:33:08.466: D/dalvikvm(5999): WAIT_FOR_CONCURRENT_GC bloqué 5ms

12-22 15:33:08.466: I/Cartoonifier::SurfaceView(5999): début aperçu

12-22 15:33:08.497: E/BufferQueue(5999): [sans nom-5999-0] setBufferCount: SurfaceTexture a été abandonné!

12-22 15:33:08.505: E/Cartoonifier::SurfaceView(5999): mCamera.startPreview() a échoué

Extrait de CartoonifierApp.java montrer ma modification

private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
//Load native library after(!) OpenCV initialization
System.loadLibrary("cartoonifier");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
Log.i(TAG, "Trying to load OpenCV library");
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback))
{
Log.e(TAG, "Cannot connect to OpenCV Manager");
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
mView = new CartoonifierView(this);
setContentView(mView);
//Call our "onTouch()" callback function whenever the user touches the screen.
mView.setOnTouchListener(this);
}
@Override
protected void onPause() {
Log.i(TAG, "onPause");
super.onPause();
mView.releaseCamera();
}
@Override
public void onResume()
{
super.onResume();
Log.i(TAG, "onResume");
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback))
{
Log.e(TAG, "Cannot connect to OpenCV Manager");
}   
if( !mView.openCamera() ) {
AlertDialog ad = new AlertDialog.Builder(this).create();  
ad.setCancelable(false); //This blocks the 'BACK' button  
ad.setMessage("Fatal error: can't open camera!");  
/*ad.setButton("OK", new DialogInterface.OnClickListener() {  
public void onClick(DialogInterface dialog, int which) {  
dialog.dismiss();                      
finish();
}  
});  */
ad.show();
}
}
InformationsquelleAutor ksindi | 2012-12-22