【问题标题】:What is the alternative to use createInputSurface() on API 17 and below在 API 17 及更低版本上使用 createInputSurface() 的替代方法是什么
【发布时间】:2015-02-26 01:35:16
【问题描述】:

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

这是我的一段代码:

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

感谢您的帮助。

【问题讨论】:

    标签: android android-camera android-mediacodec


    【解决方案1】:

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

    您可以获得的最接近的是一个名为 SurfaceMediaSource (source in JB-MR1) 的私有原生类,它在内部用于相同目的。如果您在 Google 周围搜索,您可以找到一些直接使用 libstagefright 的示例(例如 this),但不建议使用内部类,因为您的代码可能无法在不同的设备或早期/后期版本上运行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2015-09-11
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多