【问题标题】:How to scale the byte[] data on android Camera's onPreviewFrame to a lower resolution如何将 android Camera 的 onPreviewFrame 上的 byte[] 数据缩放到较低的分辨率
【发布时间】:2013-11-17 02:07:27
【问题描述】:

Android 相机有一个 onPreviewFrame 回调,它会返回一个帧作为 byte[] 数据。

我已将相机设置为以 1280 x 720 返回数据(NV21 格式)byte[] 数据。

我想做的事:

我想将一些帧保持在 1280 x 720 分辨率(转 jpeg)。

并以较低的分辨率(例如 720 x 480)生成 mp4 基本流。

问题

如果 MediaFormat.Key_Width 和 MediaFormat.Key_Height 不等于 onPreviewFrame 的宽度和高度,MediaCodec 会出错。

我想知道是否可以将我的 byte[] 数据(NV21)从 1280 x 720 缩放到更低的分辨率,例如 720 x 480 分辨率,然后将其提供给编码器?

如果可能,将 NV21 的 1280 x 720 分辨率的 byte[] 数据转换为较低分辨率的步骤是什么。

感谢您的阅读,如果有任何建议或帮助,我们将不胜感激。

【问题讨论】:

  • 如果您使用 Surface 预览输出,您可以以您想要的任何分辨率进行渲染——GPU 会完成所有工作。您无法在此模式下直接获取像素,因此要保存帧,您需要将其第二次渲染到全尺寸 pbuffer 并从中读取。有关示例,请参见 bigflake.com/mediacodec/#CameraToMpegTest
  • ...和bigflake.com/mediacodec/#ExtractMpegFramesTest 以任意分辨率将帧保存为 PNG 的示例。
  • ...和 ​​github.com/google/grafika,这是一款 Android 应用程序,其中包含一个在屏幕上显示相机预览并同时进行录制的示例。

标签: android android-camera android-mediacodec


【解决方案1】:

是的,这是可能的。看看图书馆https://code.google.com/p/libyuv/。它可以缩放 yuv 图像,在不同颜色格式之间进行转换,还具有 SIMD 优化(非常快)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2019-04-22
    相关资源
    最近更新 更多