gpt4 book ai didi

Android Camera2 捕捉图像倾斜

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:19 25 4
gpt4 key购买 nike

更新:这看起来与此有关:Image data from Android camera2 API flipped & squished on Galaxy S5 - 我认为这是一个错误,因为 Nexus 5/6 工作正常,需要获得完整的传感器尺寸然后手动裁剪以达到所需的宽高比是没有意义的,还不如不使用“支持的”输出尺寸!

问题:

  1. 使用 Camera2 API 获取相机的特征,并提取适合 MediaCodec.class 的输出大小
  2. 使用合适的相机输出尺寸之一创建 MediaCodec 输入表面。将输出提供给某些 MediaMuxer 或其他任何东西,以查看输出。
  3. 使用编解码器创建的表面作为目标来启动相机捕获请求。
  4. 编解码器输出的大小正确。但结果因设备而异:

    • Nexus 5/6:在 Android 5/6 上一切正常。
    • 三星Android 5.1平板:部分分辨率下图片有明显拉伸(stretch),说明摄像头输出分辨率与表面尺寸不匹配。开始旋转相机时变得非常明显 - 图像变得越来越倾斜,因为它没有与 X/Y 轴对齐。对于其他一些分辨率,输出正常。这里没有与大小或纵横比相关的模式。

没问题,有人会说。也许表面没有完全按照指定的宽度和高度或其他任何方式创建(即使输出大小是专门为 MediaCodec.class 目标提取的)。

因此,我创建了一个 OpenGL 上下文,为其生成了一个纹理和一个 SurfaceTexture,将其默认缓冲区大小设置为相机输出大小,并使用该纹理创建了一个 Surface。我不会详细介绍将其绘制到 TextureView 或返回到 MediaCodec 的 EGL 表面的细节。结果是一样的 - Camera2 捕获请求仅针对某些分辨率输出失真的图像。深入挖掘:在 updateTexImage 之后立即调用 SurfaceTexture 上的 getTransformMatrix - 正如预期的那样,矩阵始终是单位矩阵。

所以,这里真正的问题是相机没有以提供的目标表面的大小进行捕捉。因此,解决方案是获取相机捕获的实际 大小,其余的是纯 GL 矩阵变换以正确绘制。但是 - 我如何获得它?

注意:使用旧的 Camera API,与目标(MediaCodec 的或自定义的)具有完全相同的“预览大小”和相同表面 - 一切都很好!但我不能使用旧的相机 API,因为它已被弃用,而且似乎最大捕获尺寸为 1080p,而 Camera2 API 超出了这个范围,我需要支持 4k 录制。

最佳答案

我遇到了类似的问题,型号 SM-A7009,api 级别 21,legacy camera2 设备。

预览被拉伸(stretch),surfaceTexture.setDefaultBufferSize 不起作用,框架将在预览开始时覆盖这些值。

StreamConfigurationMap.getOutputSizes(SurfaceTexture.class) 报告的预览尺寸并非全部受支持。

只支持其中三个。

$ adb shell dumpsys media.camera |grep preview-size
preferred-preview-size-for-video: 1920x1080
preview-size: 1440x1080
preview-size-values: 1920x1080,1440x1080,1280x720,1056x864,960x720,880x720,800x480,720x480,640x480,528x432,352x288,320x240,176x144

系统转储信息列出了很多预览尺寸,在检查所有这些之后,我发现只有 1440x1080, 640x480, 320x240 是支持。

支持的预览尺寸均具有 1.33333 比率。它们具有从 CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE 报告的相同比率。

所以我认为这是一些在 API 21 中使用旧版 camera2 api 的三星设备中的错误。

解决方案是使用已弃用的相机 API 制作这些设备。

希望对到达此处的任何人有所帮助。

关于Android Camera2 捕捉图像倾斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com