我正在尝试为我的相机应用程序添加一个回调缓冲区,但我现在真的很挣扎。我做的是,一旦表面纹理可用,我首先为我的相机添加了预览回调。所以在onSurfaceTextureAvailable()
我做了这个:
mCamera.setPreviewCallbackWithBuffer(null);
mCamera.setPreviewCallbackWithBuffer(getPreviewCallback());
// After allocating the preview callback I start the preview
mCamera.startPreview();
getPreviewCallback()
看起来像这样:
private PreviewCallback getPreviewCallback() {
if (mPreviewCallback == null) {
mPreviewCallback = new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// Here I would like to do something later on
}
};
}
return mPreviewCallback;
}
现在,我的相机“死”的地方是我添加回调缓冲区的时候。我按下按钮即可完成此操作。因此,当我点击我的按钮时,会调用它:
mCamera.addCallbackBuffer(new byte[FRAME_BYTE_SIZE]);
其他地方计算FRAME_BYTE_SIZE
(在我的nexus 4上是384000)
来自logcat的消息是这样的:
04-08 13:46:41.049: W/CameraBase(7884): Camera service died!
04-08 13:46:41.049: W/CameraBase(7884): mediaserver's remote binder Camera object died
04-08 13:46:41.049: E/Camera(7884): Error 100
为什么会这样?有什么想法吗?