Android Camera2捕获图像倾斜 更新< /强>:这看起来与此有关:-我认为这是一个错误,因为Nexus 5/6工作正常,没有必要获得完整的传感器大小,然后手动裁剪以达到期望的纵横比,也可能不使用“支持”的输出大小!p>
问题:Android Camera2捕获图像倾斜 更新< /强>:这看起来与此有关:-我认为这是一个错误,因为Nexus 5/6工作正常,没有必要获得完整的传感器大小,然后手动裁剪以达到期望的纵横比,也可能不使用“支持”的输出大小!p>,android,android-camera,android-mediacodec,android-camera2,Android,Android Camera,Android Mediacodec,Android Camera2,问题: 使用Camera2 API获取相机的特征,并提取适合MediaCodec.class的输出大小 使用合适的相机输出尺寸之一创建MediaCodec输入表面。将输出馈送到某个MediaMuxer或任何东西,以查看输出 使用编解码器创建的曲面作为目标启动相机捕获请求 编解码器输出的大小正确。但结果因设备而异: Nexus5/6:安卓5/6上一切正常 三星安卓5.1平板电脑:对于某些分辨率,图像明显拉伸,表明相机输出分辨率与表面尺寸不匹配。开始旋转相机时变得非常明显-图像变得越来越倾斜,因为
- Nexus5/6:安卓5/6上一切正常
- 三星安卓5.1平板电脑:对于某些分辨率,图像明显拉伸,表明相机输出分辨率与表面尺寸不匹配。开始旋转相机时变得非常明显-图像变得越来越倾斜,因为它与X/Y轴不对齐。对于某些其他分辨率,输出正常。这里没有与尺寸或纵横比相关的图案
注意:使用旧的Camera API,使用与目标完全相同的“预览大小”和相同的表面(MediaCodec或自定义),一切都很好!但是我不能使用旧的camera API,因为它已经被弃用了,而且看起来最大捕获大小为1080p,而Camera2 API超出了这个范围,我需要支持4k录制。是的,这是三星设备上的一个bug 通常,当您在输出上要求多个不同的纵横比时,就会发生这种情况,并且特定于设备的相机代码会在正确裁剪和缩放所有纵横比时自动跳转。您可以通过确保所有请求的大小具有相同的纵横比来避免这种情况 分辨率可能实际上是您要求的-但它的缩放不正确(您可以使用尺寸有问题的ImageReader进行测试,在这里您可以使用一个显式缓冲区。)
我们在Android合规性测试中添加了额外的测试,以确保此类拉伸输出不会继续发生。我遇到了类似的问题,型号为SM-A7009,api级别为21,传统camera2设备 预览被拉伸,
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
只支持其中三个
$ 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
$ 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
支持的预览大小都具有1.33333
比率。它们具有从摄像机特性报告的相同比率。传感器信息活动阵列大小
所以我认为这是一些三星设备在api 21中使用传统camera2 api的一个缺陷
解决方案是使用不推荐的摄像头API制作这些设备
希望它能对任何到达这里的人有所帮助。你能找到修复方法吗?没有。我学会了把它当作一个BUG来对待,然后继续前进。谷歌总是说这是三星的问题,只要人们盲目地购买他们最新的旗舰产品,三星就不在乎那些晦涩难懂的平台错误或他们的Camera2 API实现。我最终将三星设备列入Marshmellow的白名单,改为使用camera1,三星似乎直到2009年才更新其摄像头,使其与camera2配合使用Marshmellow@AdrianCrețu嘿,我能知道你是如何通过openGl创建camera2 perview的吗?我需要help@RautDarpan-我已经生成了一个OpenGL纹理,并使用该纹理创建了馈送到相机捕获请求中的SurfaceTexture/Surface。其余的是OpenGL的常见操作。当然,如果你问如何进一步操纵它,细节可能会变得复杂,但这是核心。@ArkadyGamza-既然我们谈论的是曲面,你怎么知道“相机选择”是什么?3264x2448与640x480的纵横比相同,因此没有倾斜。Nexus 5在这方面对我来说工作得很好。@EddyTalvala-所以我知道这是AOSP(或三星?)中的一个缺陷,当输出到多个表面时,具有不同的输出纵横比。不幸的是,出于预览+编码的目的,这正是我正在做的。我认为你是第一个真正正确解释这一点的人,所以我将把它标记为一个答案;那会更容易修复。这是一些特定于设备的摄像头实现的一个缺陷(AOSP只是告诉摄像头硬件“给我们这些X输出的大小为a、B和C”。通常这是因为在引擎盖下,它们只有一些