Autore Topic: switching della camera provoca congelamento della preview  (Letto 400 volte)

Offline sams4

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 8
switching della camera provoca congelamento della preview
« il: 12 Luglio 2013, 16:38:48 CEST »
0
Buonasera a tutti.
Sto programmando in Android, utilizzando IntelliJ, e sfruttando anche le librerie opencv in versione 2.4.5.
Sto usando come base per la mia applicazione uno dei progetti tutorial contenuti nel package OpenCV4Android, di cui potete vedere un esempio seguendo questo link: https://github.com/Itseez/opencv/tree/master/samples/android/tutorial-3-cameracontrol.
Ho modificato il codice facendo in modo che nel metodo onCameraFrame io riceva (da un AsyncTask che gira in background) una matrice elaborata con alcune tecniche di image-processing. Non appena viene ricevuta, tale matrice viene copiata su mRgba (sovrascrivendo con il metodo copyTo) e successivamente avviene la return, che dovrebbe causare la chiamata alla deliverAndDrawFrame. Nello specifico, quello che faccio nel metodo onCameraFrame è:

Codice (Java): [Seleziona]
mRgba = inputFrame.mRgba();
if(pointsArrived==true){
   myobjectMain.getMatOfFeatures().copyTo(mRgba);
}
return mRgba;

Ho anche implementato in metodo per lo switching della fotocamera, chiamato quando viene premuto un button. Il metodo fa semplicemente questo:

Codice (Java): [Seleziona]
mOpenCvCameraView.disableView();
mOpenCvCameraView.set_mCameraIndex_front();
openedcam=CameraInfo.CAMERA_FACING_FRONT;
mOpenCvCameraView.enableView();

Ora, l'applicazione gira perfettamente se non effettuo mai lo switching della fotocamera. Se viceversa premo il bottone per cambiare fotocamera (dopo avere controllato che il dispositivo ne possieda più di una), talvolta capita che la preview appaia congelata. L'applicazione in questo caso continua a svolgere le sue operazioni (l'ho verificato dal logcat), ma quello che io vedo è la preview del tutto bloccata sull'ultimo frame mostrato prima di effettuare lo switching. Ho constatato che questo problema va via se rimuovo l'istruzione di copyTo dal metodo onCameraFrame, ma per me quest'istruzione è essenziale.

Sono già parecchi giorni che perdo la testa con questo problema. Dovrei (penso) trovare un modo per effettuare lo switching solo quando l'operazione di copy è terminata, perchè la mia paura è che questo problema si verifichi perchè talvolta viene richiesto il cambiamento di fotocamera proprio mentre la onCameraFrame sta sovrascrivendo mRgba, che è una struttura fondamentale per la gestione della cattura di frame da parte della classe org.opencv.android.JavaCameraView.

Come si potrebbe gestire una cosa del genere?
Vi ringrazio in anticipo, e mi scuso se ho sbagliato la sezione nella quale aprire questo topic.