Con*_*giu 14 android android-camera android-5.0-lollipop
我试图让相机框架处于预览模式.我从github运行示例项目https://github.com/googlesamples/android-Camera2Basic
我遇到的问题是在预览模式下获取帧.
这是代码:
private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
switch (mState) {
case STATE_PREVIEW: {
//HERE, HOW CAN I RETRIEVE THE CURRENT FRAME?
break;
}
case STATE_WAITING_LOCK: {
...
break;
}
case STATE_WAITING_PRECAPTURE: {
...
break;
}
case STATE_WAITING_NON_PRECAPTURE: {
...
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试获取框架的另一件事是设置mImageReader.setOnImageAvailableListener.我期望能够获得框架onImageAvailable回调,但是永远不会调用onImageAvailable.onPreviewFrame是我自己的方法,我需要将它传递给当前帧.
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/2);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler);
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
mTextureView.onPreviewFrame(reader.acquireNextImage().getPlanes([0].getBuffer().array());
}
};
Run Code Online (Sandbox Code Playgroud)
我做错了什么?谢谢.
rcs*_*ner 14
该OnImageAvailableListener.onImageAvailable回调永远不会被调用时的预览框可用,因为CaptureRequest它被送到了CameraCaptureSession.setRepeatingRequest()方法并没有列出ImageReader的Surface为输出目标.
您可以确定Surface在将请求发送到摄像机时,您希望每次捕获的数据输出的输出(原始字节缓冲区).因此,要获取"预览帧"以触发onImageAvailable()回调,然后将其发送到您的onPreviewFrame()方法,只需添加以下行:
mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
这条线可以走了,例如,这增加了其他类似的行之后SurfaceTexture的Surface以相同的请求建设者.
请注意,这会将每个预览帧发送到您的功能,以及捕获按钮的"输出帧".您可能希望onImageAvailable()回调中的某些代码可以区分.
| 归档时间: |
|
| 查看次数: |
10290 次 |
| 最近记录: |