当前位置: 首页 > 知识库问答 >
问题:

Android Pie AOSP默认摄像头方向问题:摄像头传感器向右旋转90度,显示屏处于反向横向模式

顾俊哲
2023-03-14

我正在使用(Android派)AOSP相机2应用程序。(

我们使用的是OV5640摄像头模块。能够在反向横向模式下预览和捕获图像和视频(但启用镜像)。但对于机械外壳配件,摄像头传感器模块在物理上向右旋转90度。在用于预览的摄像头应用程序中,图像将以90度左移的方式出现,同时启用了镜像功能。即使在拍摄完图像或视频后,也会有同样的行为。

请你建议我在相机应用程序(包/应用程序/相机2)中需要做什么更改:反向Landscpe和相机传感器模块旋转到90度右

我试着如下所示,这次相机图像捕获预览和相机方向相同,但预览尺寸更小。并且在拍摄完图像后,图像也保存在正确的方向上。仍然存在镜像问题。

但是视频预览仍然是90度左右旋转,但是在拍摄视频后,保存的视频正在正常播放。仍然存在镜像问题。

软件包/apps/Camera2/src/com/android/camera/app/OrientationManager。JAVA

            public static DeviceOrientation from(int degrees) {
        switch (degrees) {
            case 0:
                return CLOCKWISE_90;
            case 90:
                return CLOCKWISE_0;
            case 180:
                return CLOCKWISE_270;
            case 270:
                return CLOCKWISE_180;
            default:
                return CLOCKWISE_90;
           }
         }

软件包/应用程序/相机2/src/com/android/相机/处理/ImageBackend/TaskCompressImageToJpeg.java

                    final DeviceOrientation exifDerivedRotation;
                if (exifOrientation == null) {
                    // No existing rotation value is assumed to be 0
                    // rotation.
                    exifDerivedRotation = DeviceOrientation.CLOCKWISE_90;
                } else {
                    //exifDerivedRotation = DeviceOrientation
                      //      .from(exifOrientation);
                    exifDerivedRotation = DeviceOrientation.CLOCKWISE_90;
                }

    // Resulting image will be rotated so that viewers won't
    // have to rotate. That's why the resulting image will have 0
    // rotation.
            resultImage = new TaskImage(
            DeviceOrientation.CLOCKWISE_90, resultSize.getWidth(),
                      resultSize.getHeight(),
                      ImageFormat.JPEG, null);
    // Image rotation is already encoded into the bytes.

src/com/android/camera/textureviewheelper。JAVA

            // This rotation code assumes that the aspect ratio of the content
    // (not of necessarily the surface) equals the aspect ratio of view that is receiving
    // the preview.  So, a 4:3 surface that contains 16:9 data will look correct as
    // long as the view is also 16:9.
    switch (deviceOrientation) {

        case CLOCKWISE_90:
            transform.setRectToRect(rotatedRect, desiredBounds, Matrix.ScaleToFit.FILL);
            transform.preRotate(270, mWidth / 2, mHeight / 2);
            break;
        case CLOCKWISE_180:
            transform.setRectToRect(normalRect, desiredBounds, Matrix.ScaleToFit.FILL);
            transform.preRotate(180, mWidth / 2, mHeight / 2);
            break;
        case CLOCKWISE_270:
            transform.setRectToRect(rotatedRect, desiredBounds, Matrix.ScaleToFit.FILL);
            transform.preRotate(90, mWidth / 2, mHeight / 2);
            break;
        case CLOCKWISE_0:
        default:
            transform.setRectToRect(normalRect, desiredBounds, Matrix.ScaleToFit.FILL);
            break;

谢谢和问候,德文德拉

共有1个答案

孙志
2023-03-14

您是否从HAL的相机元数据返回了正确的传感器方向值?此外,AndroidCDD中有一个普遍要求,即传感器的长边必须与屏幕的长边对齐,大多数应用程序都希望这是真的。

Android操作系统还可以从前置摄像头翻转图像进行预览,但对于静态拍摄或录制的视频,不应这样做。如果这是一个后向摄像头,并且您正在从传感器模块生成镜像图像,则需要在HAL或硬件级别取消镜像。

一般来说,应用程序无法旋转/翻转绘制到SurfaceView中的图像,因此在应用程序中无法解决这一问题。如果你在应用程序中修复它,所有3P应用程序仍然会被破坏。当然,如果该设备不打算运行其他应用程序,或者被认证为与Android兼容,这可能无关紧要。

 类似资料:
  • 问题内容: 在我的相机应用中,您可以在前后相机之间切换。当我使用后置摄像头拍照时,照片与预览显示的一样。但是当我切换到前置摄像头时,图片是镜像的。我认为这与前置摄像头和后置摄像头处于横向模式有关。我已经尝试了几乎所有给定的答案。 如果有人可以向我指出正确的方向,那将真的有帮助。 问题答案: 我找到了答案,这样做没有帮助。我必须镜像生成的位图才能获得所需的结果。我使用Matrix方法来实现这一目标。

  • 我是新来发帖的,所以请友善些!我已经研究了几乎所有其他与此相关的问题,并尝试了大多数,但我完全感到沮丧。我只想让我的Android手机以纵向模式显示摄像头,而不是横向模式。我只是修改opencv提供的ImageManipulations示例。 我使用的是opencv 3.01、Android sdk版本23、Android Studio 2.0和Android版本6.0.1的Nexus 5手机。这

  • 我的应用程序使用intent拍照。如果我按肖像方向拍摄,我会得到图像。但当我旋转我的设备,并采取横向方向,我得到了错误。甚至错误消息指向(可能)错误的行。 打开相机: 关于活动结果: 给出解释的结果。然后我用其他代码再试一次<打开摄像机: 关于活动结果: 仍然有相同的结果<在寻找一些解决方案后,他们谈到了保存实例。然后我把这个(我使用片段) 仍未工作,其中一条错误消息指向 在onCreate(Bu

  • 我已经建立了一个自定义的相机应用程序。面对屏幕方向的问题,我不希望在方向改变时重新创建活动。请用完整的解决方案帮助我。 在预览类中的surfaceChanged方法内获取空指针异常。 获取以下行中的空指针异常: 任何帮助将不胜感激。 以下是错误日志: 12-23 16:07:34.962 8845-8845/com。清晰摄像机E/AndroidRuntime﹕ 致命异常:主进程:com。清晰摄像头

  • 表情测试 图片转文字 相框 拍摄图片

  • 摄像头用于采集图像和影像信息,通过模块间的组合完成各种创意活动。 净重量:8.1g 体积:24×24×22mm 参数 分辨率:1280×720 像素大小:3.4um×3.4um 最大图像传输速率:全尺寸 @ 30fps 视场角:100° 镜片结构:4G+IR 焦比:2.97 有效焦距:2.4mm 功耗:100uA(待机)~240mW(工作) 电源:USB总线电源 抗跌落能力:1m 工作温度:-30