Android Asynctask zur Verarbeitung von Live-Videoframes

Ich verwende OpenCV, um zu versuchen, Live-Videoverarbeitung durchzuführen. Da die Verarbeitung ziemlich umfangreich ist, werden die Ausgabefelder erheblich verzögert, wodurch der Live-Stream abgehackt wirkt.

Ich möchte einen Teil der Verarbeitung in eine AsyncTask auslagern. Ich habe es ausprobiert und es macht das Video tatsächlich viel flüssiger. Es wird jedoch eine große Anzahl von Aufgaben gleichzeitig gestartet, und dann kehren sie langsam mit einigen Ergebnissen zurück.

Gibt es eine Möglichkeit, dies zu verlangsamen und auf ein Ergebnis zu warten, entweder mithilfe von Synchronize-Anweisungen oder einer anderen Methode?

Auf jedem Kamerarahmen starte ich eine dieser Aufgaben. DoImgProcessing führt die lange Verarbeitung durch und gibt ein Zeichenfolgenergebnis zurück.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage