SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS的含义是什么?

时间:2010-08-19 19:05:39

标签: android camera

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

3 个答案:

答案 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

  

这是否记录在任何地方?

什么是“这个”?以下是SurfaceViewSurfaceHolderSURFACE_TYPE_PUSH_BUFFERSCamera的文档。

如果您真正的问题是“Camera需要SURFACE_TYPE_PUSH_BUFFERS”的文件记录在哪里,我怀疑这是无证件的。您可以使用SURFACE_TYPE_PUSH_BUFFERS进行相机预览和视频播放,也可以使用其他情况。