Bazı canlı video işlemlerini yapmayı denemek için OpenCV kullanıyorum. İşleme oldukça ağır olduğundan, çıkış karelerini önemli ölçüde geciktirerek canlı akışı dalgalı gösteriyor.Android Canlı video karelerini işlemek için asynctask
Bazı işlemlerin bir AsyncTask'e boşaltılmasını istiyorum. Denedim ve aslında videoyu çok daha pürüzsüz hale getiriyor. Bununla birlikte, bir seferde büyük miktarda Görev başlatacak ve daha sonra yavaş yavaş bazı sonuçlarla dönmeye başlayacak.
Bunu yavaşlatmanın bir yolu var mıdır, bir sonucu da Senkronize ifadelerini veya başka bir yöntemi kullanarak mı bekleyebilirsiniz?
Her kamera çerçevesinde, bunlardan birini başlatırım. DoImgProcessing uzun işlem yapar ve bir dize sonucu döndürür.
private class LongOperation extends AsyncTask<Mat, Void, String> {
@Override
protected String doInBackground(Mat... params) {
Mat inputFrame = params[0];
cropToCenter(inputFrame);
return doImgProcessing(inputFrame);
}
@Override
protected void onPostExecute(String result) {
Log.d(TAG, "on post execute: "+result);
}
@Override
protected void onPreExecute() {
Log.d(TAG, "on pre execute");
}
}
public Mat onCameraFrame(Mat inputFrame) {
inputFrame.copyTo(mRgba);//this will be used for the live stream
LongOperation op = new LongOperation();
op.execute(inputFrame);
return mRgba;
}
Çerçeveleri içine yerleştirmek için bir blockingqueue ile tek bir iş parçacığı kullanırdım. – njzk2
Bunlardan hiç birini yazmamıştım, aldığınız örnek kodu – Jameo