android - 如何将相机的原始数据直接提供给android NDK中的编码器
问题描述
我正在开发本机应用程序(没有 Java API 调用),我需要在该应用程序上编码相机的实时提要并转储它。并避免对编码器的输入缓冲区进行任何 memcpy。以前我可以使用 AImage 读取器从相机捕获 yuv 数据并保存它,也可以通过将保存的 yuv 传递到编码器的输入缓冲区来对其进行编码,但现在想避免保存然后将其传递给编码器。有什么方法可以仅使用 android ndk 中可用的 AMediacodec API 来实现这一点。
解决方案
无法保证内置编码器会接受您从相机接收到的其中一种图像格式,但如果可以,则无需“保存”帧。棘手的部分是相机和编码器都是异步工作的,因此您从 AImageReader 接收到的帧必须排队等待 AMediaCodec 使用。如果您不想将这些线程 memcpy 到队列中,当没有空闲缓冲区时,您的相机可能会绊倒,
但是通过AMediaCodec_createInputSurface()将编码器连接到表面可能更容易和更有效,而不是依赖缓冲区。
推荐阅读
- javascript - 延迟 css 动画样式组件
- prometheus - 在 alertmanager 中添加自定义 webhook 配置
- triggers - 避免在 Salesforce 中插入记录的解决方案
- javascript - 如何解决 svg 元素未呈现为图像的问题 (dom2img)
- c# - WPF - 如何获取 DataGrid 中每一行的高度?
- html - 块问题内垂直对齐的 inline-flex
- typescript - 为什么 TypeScript 的“声明全局”会导致 ESLint 错误?
- c# - OrderBy 可以为一个元素多次评估委托吗?
- php - 如何使用 post 方法删除数组的第 0 个索引
- reactjs - 按类型=范围输入的默认值