SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS的含义是什么?

fae*_*anj 9 camera android

我正在尝试使用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

小智 9

SURFACE_TYPE_PUSH_BUFFERS为SurfaceView生成多个缓冲区.组件锁定(填充数据)并在OS代码深处推送(显示数据)这些缓冲区.特别是OpenMax(相机硬件设备接口)使用"图形缓冲区"="推送缓冲区"来填充数据和显示数据.具体而言,相机硬件可以直接填充推送缓冲区,而图形硬件可以直接显示推送缓冲区(它们共享这些缓冲区).结论:操作系统强制您使用推送缓冲区创建SurfaceView.然后它可以使用相机设备的缓冲区.


use*_*876 8

Google的"相机指南"中,您可以找到对此的简要提及.根据该指南SURFACE_TYPE_PUSH_BUFFERS,3.0之前的设备所需的弃用设置.

查看构造函数底部的"创建预览类"部分中的代码示例,它说:

// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Run Code Online (Sandbox Code Playgroud)

如果您还没有这样做,请仔细阅读相机指南,这是一个好主意,它包含一些重要的内容,这些内容不在Camera类的API文档中.


Com*_*are 5

这是什么意思?

这意味着你没有正确配置SurfaceView通过SurfaceHolder.

这记录在哪里?

这是什么"?下面是文档SurfaceView,SurfaceHolder,SURFACE_TYPE_PUSH_BUFFERS,和Camera.

如果你真正的问题是"它Camera需要记录在哪里SURFACE_TYPE_PUSH_BUFFERS",我怀疑这是没有证件的.您可以SURFACE_TYPE_PUSH_BUFFERS用于相机预览和视频播放,也可能用于其他情况.