Asynctask de Android para procesar cuadros de video en vivo

Estoy usando OpenCV para intentar hacer un procesamiento de video en vivo. Dado que el procesamiento es bastante pesado, retrasa significativamente los cuadros de salida, haciendo que la transmisión en vivo se vea entrecortada.

Me gustaría descargar parte del procesamiento en una AsyncTask. Lo he intentado y en realidad hace que el video sea mucho más suave. Sin embargo, termina iniciando una gran cantidad de tareas a la vez, y luego comenzarán a regresar lentamente con algunos resultados.

¿Hay alguna forma de ralentizar esto y esperar un resultado, ya sea mediante el uso de instrucciones Sincronización o algún otro método?

En cada marco de cámara, comienzo una de estas tareas. DoImgProcessing realiza el procesamiento largo y devuelve un resultado de cadena.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta