私はOpenCVを使用して、ライブビデオ処理を試みています。処理がかなり重いため、出力フレームが大幅に遅延し、ライブストリームが途切れ途切れに見えます。
処理の一部をAsyncTaskにオフロードしたいと思います。私はそれを試しました、そしてそれは実際にビデオをはるかに滑らかにします。ただし、一度に大量のタスクを開始することになり、その後、ゆっくりと戻ってきて、いくつかの結果が得られます。
Synchronizeステートメントまたは他の方法を使用して、これを遅くし、結果を待つ方法はありますか?
各カメラフレームで、これらのタスクの1つを開始します。DoImgProcessingは長い処理を実行し、文字列の結果を返します。
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;
}