繁体   English   中英

Android Camera2 API Flash 不适用于 Galaxy 设备

[英]Android Camera2 API Flash doesnt work on galaxy devices

我正在使用 Android Camera2 API 为应用程序拍照,但在大多数三星 Galaxy 设备(galaxy s6 edge、galaxy s7、galaxy j7)上,我无法让闪光灯正常工作。 我相信我已经正确实现了 flash 逻辑,因为曾经在 Play 商店中的 Google 相机应用程序也表现出相同的行为。 此外,galaxy s8 似乎与闪光灯配合得很好(尽管结果肯定会出现不一致的照明)

Galaxy j7的问题是,当我用闪光灯拍照时(闪光灯锁定或在需要闪光灯的场景中使用自动闪光灯)闪光灯会保持很长时间,预览会锁定,然后图像可能需要 7 秒,而闪光灯不是图像的一部分。

我有以下处理闪光模式的方法:

private void setAutoFlash(CaptureRequest.Builder requestBuilder)
{
    switch (mFlashState)
    {
        case FLASH_STATE_AUTO:
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
            //requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
            break;
        case FLASH_STATE_ON:
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
            //requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
            break;
        case FLASH_STATE_OFF:
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
            //requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
            break;
    }
}

每次需要 CaptureRequest.Builder 时都会调用此闪存逻辑

注释掉的 3 行是我读过的其他内容,建议帮助 Flash 为我正常工作,但它似乎没有做任何事情

三星有自己的相机 API ( http://developer.samsung.com/galaxy/camera ),但我读到它只是 Camera2 的包装器,我担心他们的 API 甚至无法解决我的问题。

附加信息:

  • 我尝试过 Play 商店中的一些相机应用程序,有些工作,有些则没有。
  • ZCamera 与闪光灯配合得很好,这让我觉得他们使用三星的相机 API 来让它工作,但后来我注意到 ZCamera 的触摸测光在三星设备上不起作用,这是我在调试 Camera2 实现时遇到的另一个问题。
  • 如果我坚持使用已弃用的 Camera API,Flash 似乎可以正常工作

任何有关如何完成工作闪光的帮助将不胜感激

实际上在android设备中使用camera2 API是非常特殊的。 有些方法可能无法实现。 例如: thisthis 对于其他人,应根据其他属性设置适当的闪光模式。 此代码适用于大多数支持 camera2API 的三星设备:

 if (mIsFlashSupported) {
        switch (mFlashMode) {
            case FLASH_MODE_ON:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_SINGLE);
                requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_FLUORESCENT);
                break;

            case FLASH_MODE_OFF:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
                requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_DAYLIGHT);
                break;

            case FLASH_MODE_AUTO:
            default:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_SINGLE);
                requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_DAYLIGHT);
                break;
        }
    }

在断断续续地工作之后,我意识到了一些事情。 我提到 ZCamera(来自 Play 商店)与 Flash 配合使用,我认为他们通过使用三星 SDK 实现了这一点。 我检查了该应用程序,它没有使用三星 SDK。

我还将三星 SDK 合并到我的应用程序中,但没有任何改变。 三星 SDK 实际上只是 google 相机 2 的包装器,因此您可以添加一些三星特定功能,将其添加到您的项目中不会修复任何三星兼容性。

我最终意识到的是,我自己编程的触摸测光流程(触摸对焦/然后拍照)与我们在没有触摸对焦的情况下拍照时运行的逻辑非常不同。 常规照片逻辑是从 googles camera2 api 示例代码中借来的,它无法正常工作。

让闪光灯在三星设备(或至少对我有用)上闪光的技巧是首先触发对 AE 级别的检查,一旦收敛,然后启动自动对焦触发器。 如果打开闪光灯,这将闪光以检查 AE 级别和对焦,然后再次闪光以拍照

我的应用程序每 5 秒拍一张照片。 我 (1) 选择相机,(2) 获取一个会话,然后在每个循环中我 (3) 创建一个捕获请求,在其中设置 Flash 模式并在会话上调用捕获方法。

我的三星 SM-G550T(Android 6.01 版)没有问题,但我的 Moto G4(Android 7.0 版)的 Flash 模式有问题。 我将两部手机都设置为 Flash,但仅限于以下设置:

CaptureRequest.Builder requestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);

我目前在使用 LG 设备 (M210N)(Android 7.0 版)时遇到问题。 使用我上面提到的设置,我让设备只闪烁一次 如果我完全重新初始化相机(如上所述),设备只会再次闪烁一次。

如果我将CONTROL_AE_MODE_ON_ALWAYS_FLASH设置添加到上述 requestBuilder 中,那么 LG 根本不会闪烁。 所以我不得不移除那个标志。

我尝试了许多不同的附加设置和设置组合,但没有一个能消除这​​个问题。 我想知道有多少设备受到此问题的影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM