Как включить Camera2 API и снимать RAW на Android —
Хотя API-интерфейс Camera2 был представлен в Android Lollipop в 2015 году, большинство производителей телефонов в 2017 году до сих пор не реализовали API-интерфейс Camera2 в своих мобильных телефонах. Только несколько устройств премиум-класса имеют полную поддержку Camera2 API, несмотря на тот факт, что Google устарел унаследованный API-интерфейс Camera и призвал разработчиков внедрять Camera2 с момента его выпуска. Похоже, что производители используют функции Camera2 API, такие как захват формата RAW, в качестве точки продаж для своих премиальных устройств, а не для универсального обновления, которое задумал Google.
Плохая новость заключается в том, что невозможно просто перезаписать ваше стандартное ПЗУ с помощью API-интерфейса Camera2 — вам придется пересобрать ПЗУ и добавить поддержку Camera2 API самостоятельно, либо перепрограммировать пользовательское ПЗУ со встроенным API. Есть несколько хитростей, чтобы включить Camera2 API, если он был оставлен в вашем ПЗУ, но отключен производителем. Существует также встроенный способ делать фотографии в формате RAW на устройствах Mediatek. Я покажу вам эти трюки ниже.
Что, черт возьми, формат RAW и почему я хочу Camera2 API?
Если вы наткнулись на это руководство и не знаете, что такое формат RAW, это, по сути, формат изображения без потерь — воспринимайте его как битрейт видео или музыки. Вы знаете разницу между музыкальными файлами 120 кбит / с, 320 кбит / с и FLAC, верно? Или смотреть Youtube видео в 320p против 1080p? Это в основном то же самое для JPEG против RAW, вроде.
Таким образом, неотредактированный RAW может показаться более уродливым, чем JPEG, при параллельном сравнении. Но для любителей манипулирования изображениями отсутствие «постобработки» со стороны программного обеспечения камеры — это именно то, что вам нужно. Постобработка полностью находится под вашим контролем. Это означает, что фотографии RAW могут быть улучшены в гораздо большей степени, чем файлы JPEG, потому что вы не боретесь с «магией» постобработки программного обеспечения камеры, применяемой к файлам JPEG.
Включить Camera2 API в Build.Prop
Предупреждение: Всегда создавайте резервную копию вашего build.prop на случай, если что-то пойдет не так.
Этот метод имеет 50/50 шансов на успех, но его стоит попробовать. Похоже, что некоторые производители имеют Camera2 API, встроенный в ПЗУ, но по какой-то причине отключили его — просто добавив строку в build.prop в разделе / system вашего Android-устройства, вы можете включить функцию Camera2 API.
Смотрите также: Как редактировать Android Build.Prop с помощью основных настроек.
Для начала вам понадобится рутованный телефон и метод редактирования файла build.prop. Вы можете использовать приложение для просмотра корневых файлов (например, ES Explorer), чтобы перейти к разделу / system на вашем телефоне и открыть build.prop с помощью текстового редактора, или вы можете использовать специальный редактор build.prop, такой как JRummy BuildProp Editor.
Как только вы окажетесь внутри build.prop, ищите эту строку:
persist.camera.HAL3.enabled = 0
Измените 0 на 1, сохраните и выйдите из build.prop, затем перезагрузите телефон. Если эта строка не найдена в вашем build.prop, попробуйте вручную добавить persist.camera.HAL3.enabled = 1 в конец файла build.prop, сохраните и перезагрузите компьютер. Затем вы можете проверить, работает ли он, запустив стороннее приложение для камеры, такое как Open Camera или Camera FV-5, и проверив в меню «Настройки», можете ли вы включить режим Camera2 API.
Включить Camera2 API в эмуляторе терминала
Альтернативным способом, описанным выше, является попытка включить API-интерфейс Camera2 через эмулятор терминала. Просто запустите терминал и введите следующие команды:
су
su persist.camera.HAL3.enabled 1
выход
выход
Перезагрузите телефон и проверьте, работает ли он с сторонним приложением камеры, таким как Open Camera или Camera FV-5.
Снимайте RAW фотографии в режиме Mediatek Engineer
Если у вас есть устройство с набором микросхем Mediatek, есть способ, позволяющий снимать фотографии в формате RAW даже без включенного Camera2 API, в режиме Engineer Mode. Существует несколько методов доступа к режиму инженера:
Откройте номеронабиратель телефона и введите этот номер: * # * # 3646633 # * # *
Кроме того, вы можете установить приложение, такое как MTK Engineering Mode, чтобы всегда иметь ярлык на вашем доме. Вы также можете установить Xposed и модуль GravityBox (см. «Как полностью создать тему Android с модулями Xposed»), который также будет иметь панель запуска в режиме Engineer.
В любом случае, попав в Инженерный режим, просто прокрутите вправо до «Тестирование оборудования»> «Камера». Это режим тестирования оборудования камеры, но вы можете включить все виды параметров камеры, включая формат RAW, и делать фотографии.
При съемке фотографий в формате RAW в режиме Engineer два файла будут сохранены в каталоге / DCIM / CameraEM / — JPEG для предварительного просмотра фотографии и фактический файл RAW, который нельзя просмотреть на телефоне Android. Вам нужно будет экспортировать файл RAW на компьютер и использовать программное обеспечение для редактирования изображений, такое как Adobe Photoshop, для работы с изображением RAW, а также может потребоваться преобразовать его в универсальный формат RAW, а не в то, что выводит ваш телефон.
Как установить Google камеру на Xiaomi и активировать HDR+? Полная инструкция
Фотовозможности — один из самых важных параметров, по которым выбирают смартфон в 2019 году. За последнее время уровень мобильных камер сильно вырос. Вендоры стали активно улучшать алгоритмы обработки снимков и пиарить фотовозможности своих устройств. Особенно преуспели в этом программисты Google. В статье мы разберем основные способы, как установить Google камеру на Xiaomi, чтобы заставить даже бюджетный смартфон фотографировать в несколько раз лучше.
Обязательно читайте статью полностью! После инсталляции GCam с HDR+ вы не поверите своим глазам, увидев, что ваш даже бюджетный аппарат начал снимать на уровне дорогих Айфонов, а то и круче.
Установка камеры от Google с HDR+ на новые телефоны Xiaomi проходит в несколько кликов. Однако для ее инсталляции на недорогие «мобильники» понадобиться активировать Camera2 API (HAL3).
Ниже вас ждет доступное описание преимуществ HDR+ и Расширенного HDR+. А во второй части статьи мы подготовили пошаговое руководство (работоспособность проверена на всех популярных телефонах Сяоми) по активации камера 2 АПИ и установке Гугл Камеры.
Почему Google Camera с HDR+ – лучшее приложение для съемки?
Вот краткий перечень неоспоримых достоинств этой камеры.
Xiaomi неплохо «прокачали» софт для обработки фото. В их телефонах появился продвинутый режим ночной съемки, интеграция с искусственным интеллектом, распознавание сцены и пр. Это позволило девайсам китайской компании войти в рейтинг ТОП-10 лучших камерофонов, сформированный авторитетным изданием DxOMark.

Во всех устройствах Xiaomi (даже бюджетных) применяются дорогие, качественные фотомодули от Sony с огромным потенциалом. Раскрыть его помогает пресловутая технология HDR+, которая есть только в приложении Google Camera на смартфонах линейки Pixel. Всем остальным он стал доступен благодаря стараниям программистов-энтузиастов. Харьковский разработчик под ником «BSG» первым портировал его на многие мобильные устройства.
Как функционирует HDR+?
Прежде чем перейти к основной теме и рассказать, как установить Google камеру на Xiaomi. Буквально пару слов скажем о принципе работы технологии. Название HDR означает широкий динамический диапазон (High-Dynamic Range). Его стандартная версия есть в каждом современном телефоне. Он помогает расширить ДД, который узкий во всех смартфонах из-за конструкции модуля камеры.
В режиме HDR аппарат делает подряд три снимка.
За основу берется первый кадр. Затем со второго камера захватывает темные участки, а с третьего — светлые и совмещает их вместе. Получается фото, где одновременно хорошо передаются яркие и затемненные участки. Обычно у него и детализация выше.
Особенности HDR+
Этот алгоритм означает High-Dynamic Range + Low noise и представляет собой улучшенный алгоритм обычного HDR. У него есть два режима.
За счет уникальной технологии шумоподавления количество цифрового шума на фото с HDR+ стремится к нулю. Снимки выходят не смазанные, так как длинные выдержки не применяются.

Пока никто из производителей не переплюнул эту разработку Google, поэтому данная инструкция о том, как установить Google камеру на Xiaomi крайне актуальна.
Режим «Night Sight» — квинтэссенция мобильной фотографии
Алгоритмы Google постоянно совершенствуются. Кульминацией развития технологии стал «Night Sight» — режим ночной съемки, основанный на машинном обучении с элементами искусственного интеллекта. Ночные фото, сделанные с его использованием, поражают яркостью, резкостью и шириной динамического диапазона.
Проверка совместимости с Camera2 API
Как мы уже писали ранее, для работы GCam требуется активация Camera2 API. На флагманских смартфонах Xiaomi с этим нет проблем, так как в них он уже включен. Останется только загрузить приложение с сайта, указанного ниже, и запустить его.
Список аппаратов с активным HAL3:
Если у вас не топовое устройство или старое, то для инсталляции Google камеры придется немного «заморочиться». Делайте все по нашей инструкции, и сложностей с установкой не возникнет.
Каким бы аппаратом вы не обладали, рекомендуем выполнить простую процедуру проверки функциональности HAL3. Для этого подойдет простое приложение «Camera2 API probe».
Нужные вам данные прописаны в строке «Hardware support level». Именно они показывают совместимость. Всего есть четыре уровня поддержки драйвера, а именно:
Например, проверка Redmi Note 5 с прописанным активатором показывает «LEVEL_3» — можно устанавливать приложение камеры и пользоваться. Если у вас LEGACY — следует пройти процедуру включения HAL3.
Инструкция по активации Camera2 API
Прежде чем приступать, убедитесь, что у вас разблокирован загрузчик.
Внимание! Вам обязательно нужен разблокированный загрузчик, кастомное Recovery или разблокированные Root-права.
Существует три популярных и рабочих способа, как включить Camera2 API на Xiaomi.
Метод первый — через Magisk (рекомендуется)
Преимущество этого способа в том, что после обновления прошивки не придется заново включать Camera2 API.
Метод второй — через Recovery
Метод третий — вручную
Откуда скачать Google камеру?
Мы уже на финишной прямой. Осталось самое простое — инсталлировать само приложение и внести основные настройки. Найти лучшую версию GCam под свой аппарат трудно, так как в интернете сотни версий. Все имеют свои особенности, оптимизации, плюсы и минусы.
Советуем читать форумы (например, 4PDA), посвященные камере вашего аппарата. Там часто выкладывают эксклюзивные фиксы, а также оптимальные версии камеры.
Если нет желания заниматься этим, придется пользоваться рекомендуемыми и универсальными модификациями.
Как установить Google камеру на Xiaomi и найти подходящую версию?
Откройте сайт celsoazevedo.com. Это хранилище огромного количества программ GCam, которые туда добавляют сами разработчики. Лучше всего перейти в категорию «Suggested Versions» (рекомендуемые версии). Там находятся наиболее универсальные камеры со списками изменений и настройками, которые предлагает создатель мода. Если заморочиться, вы, вероятно, найдете даже специальные GCam, адаптированные под конкретную модель Xiaomi.
Для установки сделайте следующее:
Напоследок, вот вам пример, который явно демонстрирует превосходство GCam HDR+ над стандартной камерой Xiaomi.
На этом мы завершаем нашу инструкцию о том, как установить Google камеру на Xiaomi. Надеемся, что она была вам полезна. В будущем вас ждет цикл статей о том, как настроить Гугл Камеру с ХДР+ и делать на нее великолепные фотографии. Также мы разберем настройки стандартной камеры Xiaomi. Там тоже есть много интересных фишек, которые полезно знать.
Русские Блоги
Android: анализ фреймворка Camera2 / HAL3
Android: анализ кадра Camera2 / HAL3
1. Механизм высоких частот на Android O:
2. Обновлен фреймворк Camera HAL3:
Фреймворк Natice: frameworks / av /. Обеспечивает реализацию вспомогательных интерфейсов, таких как ICameraService, ICameraDeviceUser, ICameraDeviceCallbacks, ICameraServiceListener и т. Д. И основная функция камеры-сервера.
Интерфейс IPC Binder: предоставляет интерфейс для межпроцессного взаимодействия, обмена данными между APP и CameraService, а также обмена данными между CameraService и HAL. Среди них AIDL и HIDL реализованы на основе Binder.
Служба камеры: frameworks / av / services / camera /. Сервисы, которые взаимодействуют с APP и HAL, играют роль в соединении прошлого и будущего.
HAL: HAL Google определяет стандартный интерфейс, к которому может получить доступ служба камеры. Для поставщиков эти интерфейсы должны быть реализованы.
Подключение из приложения к CameraService включает три уровня в архитектуре Android: уровень приложения, уровень инфраструктуры и уровень времени выполнения. Среди них уровень приложения напрямую вызывает методы, инкапсулированные слоем Framework, а уровень Framework должен удаленно вызывать функции CameraService во время выполнения через Binder.
Основная логика вызова функции этой части показана на рисунке ниже: 
В приложении необходимо вызвать API, чтобы открыть камеру, как показано ниже:
CameraCharacteristics: описать различные характеристики камеры, мы можем получить их с помощью метода getCameraCharacteristics (@NonNull String cameraId) CameraManager.
CameraDevice: описывает системную камеру, аналогичную предыдущей Camera.
CameraCaptureSession: класс сеанса. Когда вам нужно делать снимки, предварительный просмотр и другие функции, вам необходимо сначала создать экземпляр этого класса, а затем управлять им с помощью методов в экземпляре (для Например, сделайте снимок ()).
CaptureRequest: описывает запрос операции. Параметры CaptureRequest должны передаваться для таких операций, как фотосъемка и предварительный просмотр. Конкретный элемент управления параметром также устанавливается через переменные-члены CameraRequest.
CaptureResult: опишите результат после того, как фотография сделана.
Например, код Java для открытия камеры:
mCameraManager.openCamera(currentCameraId, stateCallback, backgroundHandler);
Процесс создания фотографий Camera2 выглядит следующим образом: 
(1)Framework CameraManager :/frameworks/base/core/java/android/hardware/camera2/CameraManager.java
Начальной точкой входа является метод openCamera программы CameraManager, но, как видно из кода, он просто вызывает метод openCameraForUid.
Следующий код игнорирует некоторые операции, связанные с проверкой параметров, и, наконец, в основном вызывает метод openCameraDeviceUserAsync.
См. Следующий анализ аннотаций:
Прежде чем продолжить анализ процесса открытия камеры, давайте кратко рассмотрим метод setRemoteDevice в вызываемом CameraDeviceImpl, который в основном предназначен для сохранения полученного удаленного устройства:
(3) Время выполнения: с помощью механизма Binder мы удаленно вызываем метод connectDevice (называемый функцией в C ++, но, возможно, проще сказать это как метод). Этот метод реализован в классе CameraService.
ConnectHelper имеет больше контента, игнорируя анализ мест, на которые нам не нужно обращать внимание:
makeClient в основном основан на версии API и версии HAL для выбора и создания определенного экземпляра клиента.Клиент вернется к экземпляру CameraDeviceImpl по пути, проанализированному выше, и будет сохранен в mRemoteDevice.
На этом этапе в процессе открытия камеры логика вызова из приложения в CameraService в основном завершена.
Краткое изложение схемы:
Поскольку механизм Treble добавлен в Android O, основной частью CameraServer является CameraService. Он будет искать существующую службу Provider и добавлять ее во внутренний CameraProviderManager для управления. Все связанные операции выполняются посредством удаленных вызовов.
Основным телом на одном конце службы Provider является CameraProvider, который был подключен к уровню реализации Camera HAL оборудования lib во время инициализации и управляется CameraModule.
После запуска процесса «носитель» ссылки завершен (обратите внимание, что QCamera3HWI в настоящее время еще не создан), что может быть просто представлено следующим рисунком:
При включении камеры будет создано полное соединение этого слоя, а основная логика вызова выглядит следующим образом:
Как упоминалось в прошлый раз, в CameraService :: makeClient создается экземпляр CameraDeviceClient. Теперь начнем с его конструктора и продолжим исследовать процесс открытия камеры.
Эта часть основного действия находится на уровне среды выполнения, который для анализа разделен на CameraService и HAL Service.
После того, как CameraService создаст CameraDeviceClient, он вызовет свою функцию инициализации:
Вернитесь и посмотрите на функцию инициализации:
Функция инициализации длиннее, и связанные операции с RequestMetadataQueue здесь опускаются.
Экземпляр CameraDevice фактически существует после инициализации службы HAL. Как упоминалось ранее, через интерфейс deviceInfo в CameraProviderManager вызовите метод open удаленного экземпляра CameraDevice, давайте посмотрим на его реализацию кода:
И CameraDeviceSession создается непосредственно в creatSession. Конечно, в его конструкторе будет вызвана внутренняя функция инициализации, а затем она войдет в процесс инициализации уровня интерфейса HAL QCamera3HWI. На этом этапе в основном проходит процесс открытия камеры из CameraService в HAL Service.
Сводка схемы:
4. От службы HAL к камере HAL
В HAL3 уровень преобразования интерфейса (и уровень синтаксического анализа потока) камеры HAL предполагается QCamera3HardwareInterface, а уровень интерфейса и уровень реализации в основном такие же, как и в HAL1, как в mm_camera_interface.c, так и mm_camera.c.
Затем, когда был создан экземпляр уровня преобразования интерфейса, как он был инициализирован и когда он был создан, какое взаимодействие он имел с уровнем интерфейса и уровнем реализации? Основной поток вызовов показан на следующем рисунке:
(1)CameraModule(HAL Servic) : hardware\interfaces\camera\common\1.0\default\CameraModule.cpp
Продолжим смотреть на реализацию openCamera:
Вышеупомянутая часть посвящена openCamera на уровне преобразования интерфейса. Давайте продолжим рассмотрение ее функции инициализации. Как мы проанализировали ранее, при создании экземпляра CameraDeviceSession будет вызван его внутренний метод инициализации, который включает метод инициализации вызова QCamera3HWI.
(4) mm_camera_interface.c (уровень интерфейса): hardware \ qcom \ camera \ qcamera2 \ stack \ mm-camera-interface \ src \ mm_camera_interface.c
В camera_open особо нечего делать, и часть, касающаяся выделения памяти и инициализации cam_obj, опускается. Фактически, mm_camera_open на уровне реализации вызывается для фактической реализации операции открытия камеры, и различная информация об устройстве заполняется в структуре cam_obj.
Код для mm_camera_intf_add_channel, вызываемого во время инициализации, выглядит следующим образом:
(5) mm_camera.c (уровень реализации): hardware \ qcom \ camera \ qcamera2 \ stack \ mm-camera-interface \ src \ mm_camera.c
Соответствующая часть инициализации, код mm_camera_add_channel выглядит следующим образом:
В общем, после вышеупомянутой операции было открыто все соединение камеры сверху вниз.Затем, пока приложение отправляет запрос предварительного просмотра в соответствии с процессом, данные предварительного просмотра могут быть получены.
Три, основная концепция: запрос
Запрос является наиболее важной концепцией в процессе обработки данных камеры 2. Платформа приложения получает желаемый результат, отправляя запрос в подсистему камеры.
запрос имеет следующие важные характеристики:
1. Общий поток обработки запроса выглядит следующим образом:
2. Как обрабатывается запрос в HAL
(1) Платформа отправляет асинхронный запрос к hal.
(2) hal должен обрабатывать запросы по порядку и возвращать временную метку (шторку, которая является временем генерации кадра), метаданные и буферы изображений для каждого запроса.
(3) Для каждого типа пара, на который ссылается запрос, результат должен быть возвращен в режиме FIFO. Например: для предварительно просмотренного потока идентификатор результата 9 должен быть возвращен перед идентификатором результата 10. Но поток, используемый для фотосъемки, в настоящее время может быть возвращен только к результату с идентификатором 7, потому что поток, используемый для фотосъемки и предварительного просмотра, отличается.
(4) Информация, требуемая hal, получается через метаданные, передаваемые в запросе, а информация, которую hal должен вернуть, возвращается через метаданные, содержащиеся в результате.
Общий поток обработки запроса HAL показан на рисунке ниже.

























