Android Asynctask do przetwarzania ramek wideo na żywo

Używam OpenCV do próbowania przetwarzania wideo na żywo. Ponieważ przetwarzanie jest dość ciężkie, znacznie opóźnia ramki wyjściowe, dzięki czemu strumień na żywo wygląda niepokojąco.

Chciałbym odciążyć część przetwarzania do AsyncTask. Wypróbowałem to i sprawia, że ​​wideo jest znacznie płynniejsze. Jednak kończy się dużą ilością zadań jednocześnie, a następnie powoli zaczną powracać z pewnymi wynikami.

Czy jest jakiś sposób, aby to spowolnić i poczekać na wynik, używając instrukcji Synchronizuj lub innej metody?

Na każdej ramce kamery rozpoczynam jedno z tych zadań. DoImgProcessing wykonuje długie przetwarzanie i zwraca wynik ciągu.

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