SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS是什么意思?

我正在尝试使用onPreviewFrame()callback来显示已过滤的相机预览。

问题是,当我删除这一行:mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

隐藏预览,应用程序崩溃。 日志读取:08-19 15:57:51.042:错误/ CameraService(59):注册缓冲区失败,状态-38

这是什么意思? 这是logging在任何地方?

我使用SDK APIDemos中的CameraPreview: http : //developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

Solutions Collecting From Web of "SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS是什么意思?"

SURFACE_TYPE_PUSH_BUFFERS为SurfaceView生成多个缓冲区。 组件正在locking(填充数据)并将这些缓冲区按压(显示数据)深入OS代码。 特别是OpenMax(相机硬件设备接口)使用“graphics缓冲区”=“推动缓冲区”来填充数据和显示数据。 具体而言,相机硬件可以直接填充推动缓冲区,而graphics硬件可以直接显示推动缓冲区(它们共享这些缓冲区)。 结论:操作系统迫使你创build一个带缓冲区的SurfaceView。 然后它可以使用相机设备的缓冲区。

在Google的相机指南中,您可以简单地看到这一点。 根据指南SURFACE_TYPE_PUSH_BUFFERS是3.0版以前的设备所必需的弃用设置。

查看“创build预览类”一节中的代码示例,在构造函数的底部显示:

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

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

这是什么意思?

这意味着你没有通过SurfaceHolder正确configurationSurfaceView

这是logging在任何地方?

这是什么”? 这里是SurfaceViewSurfaceHolderSURFACE_TYPE_PUSH_BUFFERSCamera的文档。

如果你真正的问题是“它在哪里logging, Camera需要SURFACE_TYPE_PUSH_BUFFERS ”,我怀疑这是没有logging。 您可以使用SURFACE_TYPE_PUSH_BUFFERS进行相机预览和video回放,也可能使用其他情况。