问题标签 [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 中以编程方式拍照时,三星 Grand Quatro Duos 中的应用程序崩溃
我尝试使用来自github 上的源代码的前置摄像头在 Android 中以编程方式实现拍照的代码。
源代码在 Micromax、Lenovo 等其他设备上运行良好,但是当我尝试在三星 Galaxy Grand Quatro Duos 上进行测试时,应用程序崩溃了,说:
takePicture 在 android.hardware.Camera.takePicture(Camera.java:1194) 的 android.hardware.Camera.native_takePicture(Native Method) 失败
谁能帮我解决这个问题?此外,相机类在 Api 21 Lollipop 上已被弃用,我必须使用 Camera2 API 实现相同的代码;如果有人知道如何使用 Camera2 API 实现相同的功能,请发布代码或参考链接。
android - 使用 Android Studio 操作相机颜色并显示它
我目前正在 android studios 中开发一个应用程序,该应用程序与来自手机摄像头的实时摄像头馈送的颜色相混淆。例如,我可能想过滤掉所有的红色,或者我想使显示的相机图像变成黑白的。
但是,我还没有真正找到如何做到这一点。我找到了关于使用已弃用的 Camera 类和 android.hardware.camera2 类的教程。我首选的示例代码是camera2,直接在这里找到(直接带你到Java类文件,而不是整个项目)。
那么有人知道如何使用camera2来做我想做的事吗?我是否需要改用已弃用的相机类?我的想法是我需要有一个主要工作是显示图像的活动,并且在幕后手机摄像头正在运行,发送图像(以任何格式,位图)以使颜色混乱(通过我的一些代码will make),然后发送要在主活动中显示的图像。
所以这是三个主要部分:(1)Camera to Bitmap,获取手机Camera当前看到的内容并将其存储在代码中;(2) 弄乱位图的颜色,以我想要的方式扭曲当前视图;(3) 然后是一种获取产生的扭曲视图并将其显示在屏幕上的方法。当然,如前所述,我真正需要帮助的是刚刚提到的三个中的第一个和最后一个。
请让我知道还有哪些其他细节将有助于了解。
android - 三星上的 Camera2 纵横比
我在 S5 上使用 Camera2 API,以 720x480 显示基于 TextureView 的预览。使用 Camera1,预览看起来不错,但使用 Camera2 时,它会失真:
我打电话SurfaceTexture.setDefaultBufferSize
正常,等等。这似乎在非三星手机上工作正常。
奇怪的是,如果我修改Camera2Basic以使用前置摄像头和 720x480,它具有相同的失真:
知道这个问题背后可能是什么吗?这似乎让人想起我见过的另一个三星纵横比问题,但我不确定如何将该解决方法转换为 Camera2。
android - 使用 Android Camera2 API 快速捕捉闪光/非闪光图像
我正在编写一个 android 应用程序以在用户按下捕获按钮时快速捕获 flash/no-flash 图像对。为了编写我的应用程序,我在这里提到了 Camera2Basic 应用程序。
从 Android 文档中,我发现要触发闪存,预览请求构建器应该将AE_MODE设置为AE_MODE_ON_ALWAYS_FLASH。
我正在使用三个请求构建器:preview、noflash和flash 三个之间的区别是:
预览:AE_MODE 设置为 AE_MODE_ON_ALWAYS_FLASH 和 AF_MODE 设置为 CONTROL_AF_MODE_CONTINUOUS_PICTURE
noflash : AE_MODE 设置为 AE_MODE_ON
flash : AE_MODE 设置为 AE_MODE_ONALWAYS_FLASH
我正在使用Nexus 5设备,我发现要捕获 Flash 图像,必须具有上述预览构建器和 Flash 构建器,并使用上述Flash构建器提交静态捕获请求。使用这个序列,我总能在 Nexus 5 中获得正确的 flash 图像。预闪总是自动处理。
来到原始问题,捕获一对闪光/非闪光图像,我的步骤顺序如下:
在拍照时,我使用预览构建器开始自动对焦触发。
自动对焦完成后,我使用noflash和flash构建器(首先是 noflash,然后是 flash)背靠背提交两个仍然捕获的请求
但是,我得到的第一张图像是flash 图像,第二张是无 flash 图像。我不明白这种输出反转。
- JPEG 案例: 第一个图像始终是正确的 flash 图像,第二个图像始终是正确的非 flash 图像,如下所示:
对应于使用noflash builder
提交的请求的 Flash 图像:
对应于使用flash builder
提交的请求的无 flash 图像:
- YUV_420_888 案例:与 JPEG 相同,但是,noflash 图像永远不会正确。可以注意到右侧有一条白色条带以及不正确的颜色,而且非常嘈杂!
对应于使用noflash builder
提交的请求的 Flash 图像:
对应于使用flash builder
提交的请求的不正确的无 flash图像:
偏离路线,因为在 YUV_420_888 格式中,两个图像是背靠背捕获的,所以我在两者之间添加了一个预览请求以防止溢出。
我的问题是:
为什么输出图像的顺序颠倒了?
为什么 YUV_420_888 格式的无闪存图像不正确?
请帮忙。
android - 条形码阅读器示例中的 CameraSource 重复。为什么?
条形码阅读器示例带有 CameraSource 类。但是,com.google.android.gms.vision
包也包含 CameraSource 的类似实现。示例类有其他方法(例如 setFocusMode()、setFlashMode())。如果不使用这些方法,那么似乎可以将示例自定义类替换为com.google.android.gms.vision.CameraSource
. 我试过了,样本工作正常。
有谁知道为什么该示例提供了自己的 CameraSource 实现?
android - Android Camera2画面黑屏,录像仅1秒
我在您可以在此处找到的两个示例的帮助下使用 Camera2 API:
我使用与上述链接相同的源代码,因此我不会在此处复制我的源代码(除非您需要某些部分,否则我将编辑我的问题并发布它)。
编辑:
进行了一些测试。当我尝试通过手机播放视频时,它只显示第一帧,我可以听到录音中实际存在的音频(声音)。一旦视频播放到结束,视频会以某种方式自动重新启动并按应有的方式显示视频。
但是,当我尝试在我的 PC 上播放视频(将其从手机复制到桌面)时,我只会在最后一帧之前出现黑屏。显示最后一帧,但视频根本不播放。我可以听到音频(声音)。
我在想一些视频编码/解码可能有问题?
问题:
在我的情况下,视频录制将不起作用。我可以在他们应该在我的手机上的目录中看到这两个文件,但是当我播放视频(5 秒视频)时,前 4 秒是黑色的,然后最后一秒就像我录制的一帧,仅此而已,但文件大小似乎很大(160MB)。
屏幕:
- 上传后会发布视频
我不知道出了什么问题,有人可以帮忙吗?
android - Android Camera2捕获图像倾斜
更新:这看起来与此有关:来自 Android camera2 API 的图像数据在 Galaxy S5 上翻转和压扁- 我认为这是一个错误,因为 Nexus 5/6 工作正常,需要获得完整的传感器尺寸然后手动裁剪以达到所需的纵横比,最好不要使用“支持”的输出尺寸!
问题:
- 使用 Camera2 API 获取相机的特征,并提取适合 MediaCodec.class 的输出大小
- 使用合适的相机输出尺寸之一创建 MediaCodec 输入表面。将输出提供给一些 MediaMuxer 或其他任何东西,以查看输出。
- 使用编解码器创建的表面作为目标启动相机捕获请求。
编解码器输出具有正确的大小。但结果因设备而异:
- Nexus 5/6:在 Android 5/6 上一切正常。
- 搭载Android 5.1的三星平板:某些分辨率下,图像明显拉伸,说明摄像头输出分辨率与表面尺寸不匹配。开始旋转相机时变得非常明显 - 图像变得越来越倾斜,因为它没有与 X/Y 轴对齐。对于其他一些分辨率,输出正常。这里没有与大小或纵横比相关的模式。
没问题,有人会说。也许表面不是完全按照指定的宽度和高度创建的,或者其他什么(即使输出大小是专门为 MediaCodec.class 目标提取的)。
因此,我创建了一个 OpenGL 上下文,为其生成了一个纹理,一个 SurfaceTexture,将其默认缓冲区大小设置为相机输出大小,并使用该纹理创建了一个 Surface。我不会深入讨论将其绘制到 TextureView 或返回到 MediaCodec 的 EGL 表面的血腥细节。结果是相同的 - Camera2 捕获请求仅针对某些分辨率输出失真图像。深入挖掘:在 updateTexImage 之后立即在 SurfaceTexture 上调用 getTransformMatrix - 正如预期的那样,矩阵始终是单位矩阵。
所以,这里真正的问题是相机没有以提供的目标表面的大小进行捕捉。因此,解决方案是获取相机正在捕获的实际尺寸,剩下的就是纯 GL 矩阵变换以正确绘制。但是 - 我怎么得到它?
注意:使用旧的 Camera API,具有完全相同的“预览尺寸”和与目标相同的表面(MediaCodec 或自定义) - 一切都很好!但我不能使用旧的相机 API,因为它已被弃用,而且似乎最大捕获大小为 1080p,而 Camera2 API 超出了这个范围,我需要支持 4k 录制。
android - Camera2 和 Renderscript 分配
我正在尝试使用使用 USING_IO_INPUT 标志创建的分配来从相机获取图像。我设置如下
我正在将分配表面添加到预览会话,并获取对我非常简单的函数的回调
此设置适用于 Nexus 5X,但在运行 5.1.1 的 Nexus 4 上失败。当我调用allocation.ioReceive()
回调时,我从驱动程序中打印了一些警告,并且从分配复制到字节数组会导致垃圾被复制。
我在后台线程中运行相机,尽管onBufferAvailable
在“RSMessageThread”中被调用。
这个问题与我设置分配和相机预览的方式有关,还是驱动程序中的错误?
android - android camera2手柄缩放
我是 Android Camera2 API 的新手。我只是将我的所有项目移动到新的 Camera2 API。我以Camera2Basic 示例为起点。
我现在正在尝试通过添加以下内容来处理缩放:
和这个:
但是在我拍摄之后,图片结果是没有缩放的。我怎样才能让它发生?谢谢大家。
更新
需要添加captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);
到captureStillPicture()
方法。