我正在使用 OpenCV 尝试进行一些实时视频处理。由于处理相当繁重,它会显着延迟输出帧,使实时流看起来不连贯。
我想将一些处理卸载到 AsyncTask 中。我已经尝试过了,它实际上使视频更加流畅。但是,它最终会一次启动大量任务,然后它们会慢慢开始返回一些结果。
有什么方法可以减慢速度并等待结果,无论是使用 Synchronize 语句还是其他方法?
在每个相机帧上,我都会开始其中一项任务。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;
}