Я работаю над простым приложением, которое получает кадры с камеры моего смартфона.Когда у моего телефона более старые API (24 и ниже), я всегда получал 30 кадров в секунду, поскольку обработка изображений не выполнялась.К моему удивлению, когда я пытался использовать это приложение на одном телефоне с Android Oreo 8.0 (API 26), я мог получить только 7,5 кадров в секунду, даже если я изменил разрешение камеры на минимальное (320x240).Я пытался добавить android: largeHeap = "true" в манифест приложения, но это не сработало.Что могло случиться?Как я могу это исправить?
Телефон: Motorola Z-Play - 3 ГБ Ram
OpenCV: 3.1.0
Операционная система телефона: 8.0 (API 26)
Основная деятельность
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{
private static String TAG = "MainActivity";
JavaCameraView javaCameraView;
Mat mRgba;
BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status){
case BaseLoaderCallback.SUCCESS:
javaCameraView.enableView();
javaCameraView.setCameraIndex(1);
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
javaCameraView = (JavaCameraView)findViewById(R.id.java_camera_view);
javaCameraView.setVisibility(View.VISIBLE);
javaCameraView.setCvCameraViewListener(this);
javaCameraView.setMaxFrameSize(320,240);
javaCameraView.enableFpsMeter();
}
@Override
protected void onPause(){
super.onPause();
if(javaCameraView != null)
javaCameraView.disableView();
}
protected void onDestroy(){
super.onDestroy();
if(javaCameraView != null)
javaCameraView.disableView();
}
protected void onResume(){
super.onResume();
if(OpenCVLoader.initDebug()){
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
else {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallback);
}
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat (height, width, CvType.CV_8UC4);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
mRgba = inputFrame.rgba();
return mRgba;
}
}