在API 17及更低版本上使用createInputSurface()的替代方法是什么

时间:2015-02-25 13:19:28

标签: android android-camera mediacodec

对于我的一个将相机预览保存到缓冲区的应用程序,我使用的是Mediacodec.createInputSurface()函数,一切正常,因为我使用的是API 19及更高版本。 现在我希望相同的代码适用于api 17及以下以及其他一些不存在此api的设备。 有人可以通过告诉我可以使用哪种替代方案帮助我吗?

这是我的一段代码:

private Surface mInputSurface;
private MediaCodec mEncoder;
mInputSurface = mEncoder.createInputSurface();

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

API中没有其他选择。直到API 18(JB-MR2)才引入该功能。

最接近的是一个名为SurfaceMediaSource(source in JB-MR1)的私有本地类,它在内部用于同一目的。如果您在谷歌周围找到一些直接使用libstagefright的人的例子(例如this),但不推荐使用内部类,因为您的代码可能无法在不同设备或早期/更晚版本上运行。

Pre-API 18您可以通过软件缓冲区移动数据。这需要color format conversion,因为相机和MediaCodec没有任何共同的颜色格式。您还必须应对API 16/17中的错误或破坏的MediaCodec实现。