我正在尝试使用onPreviewFrame()回调显示已过滤的相机预览。
问题在于,当我删除此行时: mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
隐藏预览,应用程序崩溃。日志显示: 08-19 15:57:51.042:ERROR / CameraService(59):registerBuffers失败,状态为-38
这是什么意思?这是在任何地方记录的吗?
我正在使用SDK APIDemos中的CameraPreview:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
答案 0 :(得分:9)
SURFACE_TYPE_PUSH_BUFFERS为SurfaceView生成多个缓冲区。组件锁定(填充数据)并在OS代码深处推送(显示数据)这些缓冲区。特别是OpenMax(相机硬件设备接口)使用“图形缓冲区”=“推送缓冲区”来填充数据和显示数据。具体而言,相机硬件可以直接填充推送缓冲区,模具图形硬件可以直接显示推送缓冲区(它们共享这些缓冲区)。结论:操作系统强制您使用推送缓冲区创建SurfaceView。然后它可以使用相机设备的缓冲区。
答案 1 :(得分:8)
在Google's Camera guide中,您可以找到一个简短的提及。根据指南SURFACE_TYPE_PUSH_BUFFERS
是3.0之前的设备所必需的弃用设置。
查看构造函数底部的“创建预览类”部分中的代码示例:
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
如果你没有这么做的话,最好仔细阅读the camera guide,它包含一些重要的东西,这些东西不在Camera类的API文档中。
答案 2 :(得分:5)
这是什么意思?
这表示您未通过SurfaceView
正确配置SurfaceHolder
。
这是否记录在任何地方?
什么是“这个”?以下是SurfaceView
,SurfaceHolder
,SURFACE_TYPE_PUSH_BUFFERS
和Camera
的文档。
如果您真正的问题是“Camera
需要SURFACE_TYPE_PUSH_BUFFERS
”的文件记录在哪里,我怀疑这是无证件的。您可以使用SURFACE_TYPE_PUSH_BUFFERS
进行相机预览和视频播放,也可以使用其他情况。