我正在使用OpenCV尝试进行实时视频处理。由于处理相当繁重,它会严重延迟输出帧,使得直播流看起来很卡顿。
我想将一些处理工作转移到AsyncTask中。我已经尝试过,并且它确实使视频更加流畅。但是,它最终会同时启动大量任务,然后它们将慢慢开始返回一些结果。
有没有办法减缓这种情况,等待结果,可以使用Synchronize语句或其他方法?
在每个摄像头帧上,我启动其中一个任务。 DoImgProcessing执行长时间的处理并返回字符串结果。
我想将一些处理工作转移到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;
}