Android Asynctask для обработки живых видеокадров
Я использую OpenCV, чтобы попытаться сделать некоторую обработку видео в реальном времени. Так как обработка довольно тяжелая, она значительно задерживает выходные кадры, что делает живой поток нестабильным.
Я хотел бы переложить часть обработки в AsyncTask. Я попробовал это, и это на самом деле делает видео намного плавнее. Тем не менее, он заканчивает тем, что запускает большое количество задач одновременно, и затем они постепенно начнут возвращаться с некоторыми результатами.
Есть ли способ замедлить это и дождаться результата, используя операторы Synchronize или другой метод?
На каждом кадре камеры я запускаю одну из этих задач. DoImgProcessing выполняет длительную обработку и возвращает строковый результат.
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;
}