问题标签 [android-camera2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android camera2 闪光灯在自动闪光模式下的弱光条件下未触发
我使用camera2拍摄照片,并将闪光灯模式设置为自动。我将请求参数设置如下。
在上面的代码中,闪光灯应该在弱光条件下触发。但它没有按预期工作。闪光灯在光线不足的情况下没有闪光。
如何将camera2设置为自动闪光模式?
android - Android 上的零拷贝相机处理和渲染管道
我需要对实时相机数据(仅来自 Y 平面)进行 CPU 端只读处理,然后在 GPU 上进行渲染。在处理完成之前不应渲染帧(因此我并不总是想渲染来自相机的最新帧,只是 CPU 端已完成处理的最新帧)。渲染与相机处理分离,目标是 60 FPS,即使相机帧到达的速率低于此。
有一个相关但更高级别的问题:Android 上的最低开销摄像头到 CPU 到 GPU 方法
更详细地描述当前的设置:我们有一个用于相机数据的应用程序端缓冲池,其中缓冲区是“空闲”、“显示中”或“待显示”。当来自相机的新帧到达时,我们获取一个空闲缓冲区,将帧(或者如果实际数据在某个系统提供的缓冲池中,则为它的引用)存储在那里,进行处理并将结果存储在缓冲区中,然后设置缓冲区“待显示”。在渲染器线程中,如果在渲染循环开始时有任何缓冲区“待显示”,我们将其锁定为“显示中”的缓冲区,渲染相机,并使用从相同计算的处理信息渲染其他内容相机框架。
感谢@fadden 对上面链接的问题的回复,我现在了解了 android camera2 API 的“并行输出”功能在各种输出队列之间共享缓冲区,因此至少在现代 android 上不应该涉及数据的任何副本。
在评论中,有人建议我可以同时锁定 SurfaceTexture 和 ImageReader 输出,然后“坐在缓冲区上”直到处理完成。不幸的是,我认为这不适用于我的情况,因为我们仍然希望以 60 FPS 的速度驱动解耦渲染,并且在处理新帧时仍然需要访问前一帧以确保事情不会得到不同步。
想到的一种解决方案是拥有多个 SurfaceTexture - 我们的每个应用程序端缓冲区中都有一个(我们目前使用 3 个)。使用该方案,当我们获得一个新的相机帧时,我们将从我们的应用端池中获得一个空闲缓冲区。然后我们会调用acquireLatestImage()
ImageReader 来获取数据进行处理,并调用updateTexImage()
空闲缓冲区中的 SurfaceTexture。在渲染时,我们只需要确保“显示中”缓冲区中的 SufaceTexture 是绑定到 GL 的那个,并且大部分时间一切都应该同步(正如@fadden 评论的那样,调用updateTexImage()
and之间存在竞争,acquireLatestImage()
但是时间窗口应该足够小以使其很少见,并且无论如何使用缓冲区中的时间戳可能是可检测和可修复的)。
我在文档中注意到updateTexImage()
只能在 SurfaceTexture 绑定到 GL 上下文时调用,这表明我在相机处理线程中也需要一个 GL 上下文,以便相机线程可以updateTexImage()
在“空闲”缓冲区中的 SurfaceTexture 上执行而渲染线程仍然能够从“显示中”缓冲区的 SurfaceTexture 进行渲染。
所以,对于问题:
- 这看起来是一种明智的做法吗?
- SurfaceTextures 基本上是共享缓冲池周围的轻包装,还是它们消耗一些有限的硬件资源并且应该谨慎使用?
- SurfaceTexture 调用是否足够便宜,以至于使用多个调用仍然比仅复制数据更胜一筹?
- 计划让两个线程具有不同的 GL 上下文并在每个线程中绑定不同的 SurfaceTexture 可能会起作用,还是我要求一个充满痛苦和错误驱动程序的世界?
听起来很有希望,我会试一试;但认为值得在这里问一下,以防有人(基本上是@fadden!)知道我忽略的任何内部细节,这会使这是一个坏主意。
android - Android Camera2 API JPEG_QUALITY 不可用
我正在尝试使用 android 在我的 Nexus 5x 上工作,Camera2 APIs
我正在使用googlesamples android-Camera2Basic
我的问题是 JPEG 图像的质量太低,而且它们的尺寸比我用手机相机应用程序拍摄的常规图像要小得多。
根据谷歌文档,JPEG_QUALITY
在 CaptureRequest 和 CaptureResult 中都应该有一个键:
JPEG_QUALITY
在 API 级别 21 中添加
密钥 JPEG_QUALITY
最终 JPEG 图像的压缩质量。
85-95 是典型的使用范围。
有效值范围:
1-100; 越大质量越高
此密钥适用于所有设备。
但是,当我询问可用密钥时,JPEG_QUALITY
密钥不可用,所以我不知道我当前JPEG
使用的压缩质量是什么以及如何更改它。
我在里面做的代码:
requestKeys & resultKeys 有很多键,包括JPEG_ORIENTATION
但不包括JPEG_QUALITY
键。
知道我在做什么错吗?为什么我找不到如何更改JPEG
压缩质量?
谢了,兄弟们
android - 如何将快门效果应用于 TextureView Camera2 预览
我已经使用 TextureView 在 android 应用程序中预览图像捕获。这可以正常工作,但我正在尝试向用户提供已捕获图像的反馈。我想暂时隐藏图像预览,然后恢复正常预览以提供反馈。
我尝试将空白图像推送到 TextureView 失败,并且我也未能使用 setVisibility() 属性(INVISIBLE 和 GONE)暂时隐藏 TextureView 本身 - 此属性没有可见效果。我还能如何实施此反馈?
android - 三星相机 SDK 是否用于扩展 Camera2 API?
我是否应该使用 Camera2 API 来完成相机的基本功能(拍照、视频),并使用 SCamera SDK 来补充这些功能(HDR、弱光等)?
我正在为 Galaxy S6 和 S5 开发。
android - 以横向模式返回 (android.hardware.Camera)
我正在构建一个应用程序,其中包含来自具有表面视图的自定义相机的视频捕获。它在纵向模式下工作正常,但是当我更改为横向模式时,相机预览会进入空白屏幕。
这是我正在使用的代码:
在ConfigurationChanged
函数中我没有得到camera1
对象。
我该如何解决这个问题?
video - 在 Android 上没有预览的 Camera2 视频录制:mp4 输出文件无法完全播放
我正在尝试在我的三星 Galaxy S6(支持 1920x1080 约 30 fps)上录制来自后置摄像头(面向脸部的摄像头)的视频。如果我不需要,我不想使用任何表面进行预览,因为这只是在后台发生。
我似乎可以正常工作,但是输出文件无法以实际上正确的方式播放。在我的 Windows 10 PC 上,Windows Media Player 将显示第一帧然后播放音频,VLC 不会显示任何帧。在我的手机上,录制的文件可以播放,但不能完全播放。它将保持第一帧 5-8 秒,然后在最后,剩余时间变为 0,显示的总时间发生变化,然后开始播放实际的视频帧。在我的 Mac (10.9.5) 上,Quicktime 不会显示视频(虽然没有错误),但 Google Picasa 可以完美播放。我想在我的 PC 上试用 Picasa,看看它是否在那里工作,但我无法再下载 Google Picasa,因为它已经日落了。
我尝试为我找到的 Windows 安装编解码器包,但这并没有解决任何问题。MediaInfo v0.7.85 报告此文件:
我用来创建它的代码是:
我遵循了 Android 源代码(测试和应用程序)代码,以及我在 github 上找到的几个示例,以便弄清楚这一点,因为 camera2 API 的文档还不是很好。
有什么明显的我做错了吗?或者,我只是在 Mac 上缺少编解码器以供 Quicktime 使用,而在我的 PC 上缺少编解码器以供 Windows Media Player 和 VLC 使用?我还没有尝试在 Linux 上播放这些文件,所以我还不知道那里会发生什么。哦,如果我将 mp4 文件上传到 photos.google.com,它们也可以在那里完全正确地播放。
谢谢!标记
android - Camera 2 Api 预览被拉伸
我使用 GlSurfaceView 使用旧相机 api 和相机 2 api。当我在旧 api 中获得必要的纵横比时,我使用 Camera.Parameters
如果它不会被调用,则预览会被拉伸
问:如何在camera 2 api中获得这样的效果?
android - 相机不会打开/关闭相机 2 的闪光灯
我需要有关打开/关闭 camera2 闪光灯的帮助。代码不起作用,拍照时不会打开闪光灯。我尝试了很多不同的方法,但都失败了。这是我的代码。请帮忙!
MainActivity.java
android - 使用 Camera2(Android 版本 21)API 录制 60fps 视频
我正在尝试在 Camera2(android.hardware.camera2) API 上以 60(或更高)fps 的速率录制视频。
最后,我使用CameraConstrainedHighSpeedCaptureSession以 120fps 的速度成功录制。但它只针对 >=120fps 的用例而不是 60fps。
即使我尝试使用普通捕获会话(CameraCaptureSession)以 60fps 的速度录制,它也只支持 <=30fps。我可以通过下面的代码弄清楚。
我不知道如何使用 Camera2 API 以 60fps 的速度录制。
任何想法都会受到欢迎。
谢谢。