Android Asynctask para processar quadros de vídeo ao vivo
Eu estou usando o OpenCV para tentar fazer algum processamento de vídeo ao vivo. Como o processamento é bastante pesado, ele atrasa significativamente os quadros de saída, fazendo com que a transmissão ao vivo pareça instável.
Eu gostaria de descarregar parte do processamento em um AsyncTask. Eu tentei e isso realmente torna o vídeo muito mais suave. No entanto, ele acaba iniciando uma grande quantidade de tarefas de uma só vez e, em seguida, elas começam a retornar lentamente com alguns resultados.
Existe alguma maneira de diminuir isso e esperar por um resultado, usando instruções Synchronize ou algum outro método?
Em cada quadro de câmera, inicio uma dessas tarefas. DoImgProcessing faz o processamento longo e retorna um resultado de string.
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;
}