Android 相机预览帧时间戳

Posted

技术标签:

【中文标题】Android 相机预览帧时间戳【英文标题】:Android Camera Preview Frame Timestamp 【发布时间】:2012-02-20 19:40:37 【问题描述】:

有没有办法获取捕获 android 相机预览帧的时间戳

    没有相机方法返回时间戳 您无法从本机代码访问相机 缓冲区大小不是静态的(取决于从相机获取的最小预览大小 - 方法何时以及是否有效),如果队列中有更多帧,则有预览缓冲区,它们将被丢弃 设置的帧速率(同样,如果/当方法工作时)只是对系统的提示,相机可以忽略该值。相机返回的帧速率也是如此。

我正在实时进行一些繁重的图像处理,加在一起时的小错误是一个真正的问题。

【问题讨论】:

你指的是 onPreviewFrame 回调,对吧?在被传递的 byte[] 中应该有 EXIF 数据,假设它至少是 JPEG。 据我所知,数据中没有 exif,只有原始图像 由于缺少 EXIF:不确定这是否可行,但您是否尝试过将预览格式显式设置为 ImageFormat.jpeg? NV21 格式(默认)可能没有任何地方可以存储 EXIF 数据。 我可以这样做,只是在性能方面没有意义。 NV21 格式更容易处理(至少在我们的例子中)并且处理算法会变慢,因为我们需要从图像中解析额外的数据。 【参考方案1】:

我知道这样做的唯一方法是使用 SurfaceTexture 而不是预览回调。

SurfaceTexture 有一个 getTimestamp() 方法,它返回自某个未指定(但恒定)时间以来的纳秒。

不幸的是,SurfaceTexture 是一个 OpenGL 外部纹理,因此使用预览回调并不容易。

另一方面,它的 CPU 效率要高得多:预览回调在软件中进行颜色转换和图像整形,而可以使用 OpenGL ES2 功能在 GPU 上进行大量图像处理。

【讨论】:

会很棒,但有一个问题......当您尝试支持旧平台时,您会不太高兴看到“Since: API Level 11”:) 唉,我不知道在 API 级别 11 之前它是可能的。:(

以上是关于Android 相机预览帧时间戳的主要内容,如果未能解决你的问题,请参考以下文章

Android:访问硬件相机预览帧数据而不绘制它们

Android:编码的相机预览帧总是横向的。如何旋转?

如何确定相机预览帧的默认方向?

如何在一帧后面显示预览相机并拍照包括帧

如何在视频中保存相机预览帧?

使用Android NDK Camera2获取预览帧的正确方法是啥