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;
}

questionAnswers(2)

yourAnswerToTheQuestion