Android 10 (API 29), как включить HDR и ночной режим - PullRequest
2 голосов
/ 06 февраля 2020

Я создаю камеру, предназначенную для работы исключительно с Pixel 3 XL. Я использую camera2 API и хотел бы сделать снимок с помощью фронтальной камеры с включенным HDR и / или ночным режимом. Это фрагмент кода, в котором я настроил свой запрос на захват:

 final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
 captureBuilder.addTarget(mStillImageReader.getSurface());
 captureBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTROL_SCENE_MODE_HDR);
 captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CameraMetadata.CONTROL_AWB_MODE_AUTO);
 captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
 captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
 captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_SCENE_MODE_NIGHT);
 captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 0);

...
 mCaptureSession.capture(captureBuilder.build(), CaptureCallback, mBackgroundHandler);

Я надеялся получить что-то близкое к тому, что делает приложение для собственной камеры Android, когда оно настроено на съемку в ночном режиме или HDR + , Кто-нибудь знает, нужно ли мне делать больше, чем просто устанавливать флаги в запросе захвата, чтобы получить желаемое поведение?

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

В Android алгоритмы обработки изображений могут быть реализованы как на уровне HAL, так и на уровне приложений. Android Framework расположен между HAL и приложением и предоставляет интерфейс для взаимодействия с камерой. При вызове метода set:

captureBuilder.set(
    CaptureRequest.CONTROL_SCENE_MODE,
    CameraMetadata.CONTROL_SCENE_MODE_HDR);

Вы запрашиваете HAL для выполнения HDR перед возвратом изображения в приложение. Обратите внимание: HAL внедряется OEM-производителями (или поставщиками) (может считать Pixel OEM-производителем), и разработчик должен реализовывать различные CONTROL_SCENE_MODES. Вы можете и должны запрашивать доступные режимы управления, используя:

// Get the camera charecteristics for current camera
CameraCharacteristics cameraCharacteristics = getCameraCharecteristics(cameraFacing);

int[] modes = cameraCharacteristics.get(
                CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES);

// Check if the modes array has the SCENE MODE you wish to apply
// ... by iterating through the list.

Если вы запустите это на Pixel 3 XL, вы можете не получить поддержку HDR. Поправьте меня, если я ошибаюсь.

Если вы не хотите sh писать свои собственные алгоритмы для HDR и ночного режима, вам придется полагаться на доступные сценические режимы, и для этого лучше всего будет запросить и подтвердить. В качестве альтернативы вы можете запросить YUV или RAW изображение с камеры 2 и запустить их с помощью алгоритмов HDR или ночного режима на уровне приложения.

TL; DR; Собственная камера пикселя Google Скорее всего, выполняется больше обработки изображения поверх изображения, возвращаемого камерой2, и, следовательно, его нельзя воспроизвести, используя только камеру2, задав любые конфигурации.

1 голос
/ 07 февраля 2020

HDR + / HDR, похоже, не поддерживается на собственных телефонах Pixel от Google, даже с CameraX (и, конечно, не с Camera2)

Myabe стоит попробовать CameraX с расширением стороннего производителя, например this .

Проблема в том, что CameraX находится в (очень) альфа-состоянии на данный момент, и его судьба также не ясна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...