我有這些神祕的android問題之一(至少從我的角度來看)。我的應用程序通過camera2 api庫管理設備的相機。在我的情況下,我有兩個曲面,其中一個來自圖像讀取器對象。接下來我定義我的捕捉會話並將這些曲面設置爲目標。正如你可以在下面的代碼中看到的,我下面典型的工作流程在這種情況下:基於camera2的APP基於圖像讀取器表面的某些設備中的API崩潰
// Create ImageReader Surface
int max = 2;
mReader = ImageReader.newInstance(mWidth, mHeight, ImageFormat.YV12, max);
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader mReader) {
Image image = null;
image = mReader.acquireLatestImage();
if (image == null) {
return;
}
byte[] bytes = convertYUV420ToNV21(image);
nativeVideoFrame(bytes);
image.close();
}
};
if (OPENGL_SOURCE==2){
nativeVideoInit(mWidth, mHeight, 0, false);
}
mReader.setOnImageAvailableListener(readerListener, mBackgroundHandler);
// Create Texture Surface
texture = createTexture();
mSurfaceTexture = new SurfaceTexture(texture);
mSurfaceTexture.setOnFrameAvailableListener(this);
mSurfaceTexture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());
mSurface = new Surface(mSurfaceTexture);
//Attach surfaces to CaptureRequest
List<Surface> outputSurfaces = new ArrayList<Surface>(2);
outputSurfaces.add(mReader.getSurface());
outputSurfaces.add(mSurface);
captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(mSurface);
captureRequestBuilder.addTarget(mReader.getSurface());
//Define the capture request
cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback(){
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
//The camera is already closed
if (null == cameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(MainActivity.this, "Configuration change", Toast.LENGTH_SHORT).show();
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
的事情是,我沒有跑在我的平板電腦三星TAB A.此代碼然而任何問題,當試圖在我的Nexus 5X或我的朋友的三星S6,該應用程序崩潰顯着拋出此錯誤:
08-23 11:28:51.772:E/AndroidRuntime(20315):致命例外:主 08-23 11:28: 51.772:E/AndroidRuntime(20315):進程:com.example.opengltest,PID:20315 08-23 11:28:51.772:E/AndroidRuntime(20315):java.lang.IllegalArgumentException:傳遞給攝像機服務的參數錯誤 08-23 11:28:51.772:E/AndroidRuntime(20315):在android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:114)
做一些測試,我發現問題來自圖像閱讀器表面。如果我從捕獲會話的設置中擺脫出來,代碼將無縫運行。
爲什麼這隻發生在我的Nexus 5x或三星S6上,而不是在我的平板電腦上?我該如何解決它?
感謝,
JM
這正是你所說的。這些設備不支持YV12格式 – user3417052