A API de extensões do fornecedor CameraX do Google possibilita que aplicativos de câmera de terceiros usem alguns dos melhores recursos do aplicativo de câmera padrão.
Há uma piada antiga na Internet que diz que você pode saber se alguém está usando um telefone Android pelo má qualidade de suas selfies. Embora os memes sejam definitivamente um pouco exagerados, infelizmente há um pouco de verdade por trás deles. Os telefones Android geralmente estão à frente dos iPhones em termos de desempenho da câmera, pelo menos no papel. OEMs como LG e Samsung tendem a usar câmeras com mais pixels e aberturas maiores do que os iPhones concorrentes. As especificações não são tudo, no entanto. Parte do motivo pelo qual a Apple pode competir no jogo de câmeras é o software iOS. Todos os OEMs, da Apple à ZTE, usam alguma mágica do software para melhorar a aparência das fotos e dos vídeos. As empresas usam algoritmos para reduzir o ruído, ajustar a saturação e o contraste das cores e até mesmo iluminar cenas escuras, tudo para tornar o resultado final mais agradável. É aqui, historicamente, que os OEMs do Android ficaram aquém da Apple.
Desenvolvimentos de Software
Mais recentemente, porém, as coisas começaram a mudar. O maior exemplo dessa mudança é provavelmente o Google e a linha Pixel. Em termos de hardware, as câmeras Pixel realmente não se comparam a outros carros-chefe. No entanto, é no software que o Google faz a diferença. Com recursos como Modo Retrato, Visão Noturna, HDR+ e Zoom Super Res, os Pixels ganharam a reputação de ter alguns dos melhores câmeras de smartphones do mercado.
Outros OEMs do Android estão seguindo o exemplo do Google. Samsung, OPPO, Xiaomi, Vivo, OnePlus, etc., todos introduziram suas próprias versões dos recursos de câmera mais populares do Pixel e até possuem alguns recursos exclusivos próprios. Com palavras-chave como “IA” e “aprendizado de máquina”, os OEMs do Android estão tentando convencê-lo de que o software deles é o software que você deseja para aprimorar suas fotos e vídeos. Chegamos a um ponto em que os telefones Android podem competir genuinamente com os iPhones em todos os aspectos do desempenho da câmera.
O problema
Infelizmente, ainda há uma exceção importante: aplicativos de terceiros. Seu carro-chefe superduper de 50 câmeras pode tirar fotos incríveis com o aplicativo de câmera integrado, mas mude para o Instagram, Snapchat, ou mesmo um aplicativo de câmera de terceiros, e é basicamente uma garantia de que o que você captura não ficará tão bom. Como se isso não bastasse, você também perde todos os recursos e modos interessantes da câmera. Isso ocorre porque, diferentemente do iOS, o Android não possui uma estrutura de câmera unificada. Claro, os recursos básicos estão lá. Um aplicativo de terceiros ainda pode tirar fotos e vídeos e usar o flash. Mas o que acontece se o seu telefone tiver um sensor secundário para grande angular ou telefoto? É possível que os desenvolvedores consigam acessar esse segundo sensor, mas o método usado deverá ser específico para o seu dispositivo.
Digamos que você tenha um LG V40 (eu sei, eu sei, imagine que você tenha). O V40 possui três sensores: padrão, telefoto e ultralargo. O aplicativo de câmera integrado não tem problemas para alternar entre todos esses sensores diferentes. Mas esqueça de usar o sensor ultralargo no Instagram. Agora, o Instagram pode dar uma olhada em como o aplicativo de câmera da LG usa os diferentes sensores e desenvolver uma maneira de os usuários tirarem fotos grande angular ou com zoom. Mas isso provavelmente só funcionaria no LG V40. Embora o Galaxy S10 tenha os mesmos três modos de sensor (padrão, telefoto e ultralargo), a equipe do Instagram teria que desenvolver outro método para a Samsung.
Agora adicione Huawei, Vivo, OnePlus, Xiaomi, OPPO, Nokia, ZTE, HTC e qualquer outra marca que você possa imaginar à mistura. Como você pode imaginar, tentar desenvolver um método para acessar apenas os potenciais sensores extras para cada telefone de cada marca seria extremamente tedioso. E então você precisa manter a compatibilidade com todos os telefones novos e atuais.
Essas limitações também se aplicam aos recursos da câmera. Coisas como modo retrato, visão noturna e HDR + precisam de métodos específicos por dispositivo para serem usados ou são completamente inacessíveis para aplicativos de terceiros.
Obviamente, para um aplicativo como o Instagram, isso não é grande coisa. Não é o foco deles, e você sempre pode usar o aplicativo da câmera do seu telefone para tirar a foto primeiro. Mas e os aplicativos de câmera dedicados?
Os efeitos
Abra a Google Play Store e pesquise “câmera”. Você encontrará centenas de resultados. Mesmo com as melhorias no software de câmera original, os aplicativos de câmera de terceiros ainda são muito populares. Alguns visam fornecer recursos mais técnicos, como exposição e foco manuais (recursos que o aplicativo da câmera do seu telefone pode não ter). Outros visam fornecer uma experiência do usuário consistente em todos os seus dispositivos.
Especialmente por este último motivo, a fragmentação da câmera do Android pode tornar incrivelmente difícil desenvolver e manter um aplicativo de câmera amplamente compatível. Se você deseja fornecer recursos extras, como incluirá todos os recursos potenciais de todos os aplicativos primários em potencial? Se você está procurando uma experiência consistente, como pode garantir de forma realista que o acesso ao sensor grande angular em todos os dispositivos que o possuem funcionará?
A resposta é: você não pode. Você pode tentar oferecer suporte a tantos recursos em tantos dispositivos quanto possível, mas no final, será muito trabalhoso por uma recompensa relativamente pequena. Não é difícil imaginar que pelo menos alguns desenvolvedores simplesmente desistiram de criar um aplicativo de câmera completo para Android. Na verdade, vários o fizeram.
As casualidades
Faça uma pesquisa por aplicativos de câmera na Play Store. Você notará algumas coisas. Um, há um muito de opções. Dois, a maioria deles faz coisas bastante semelhantes (aplica filtros após o fato e coisas assim). Terceiro, as opções mais avançadas provavelmente não são atualizadas com tanta frequência. Você pode até encontrar resultados no Google que não estão mais na loja.
Recentemente, tivemos um grande exemplo de alguém desistindo. A Moment decidiu interromper o desenvolvimento de seu aplicativo Pro Camera para Android.
O aplicativo Pro Camera da Moment teve como objetivo trazer recursos avançados de foto e vídeo para o Android. Estes são apenas alguns desses recursos:
- Histogramas RGB
- Foco dividido
- Controle manual sobre exposição, ISO, velocidade do obturador, balanço de branco
- Pico de foco
- Captura RAW
- Mudanças dinâmicas na taxa de quadros e na resolução
O problema é que muitos desses recursos simplesmente não funcionam em muitos dispositivos. Olhar a lista de compatibilidade de recursos do Moment é como olhar a foto de uma pista de dança. Mesmo dentro da mesma linha de produtos, o suporte a recursos é incrivelmente fragmentado. Após dois anos de desenvolvimento, a Moment não tem mais capacidade de continuar o desenvolvimento de seu aplicativo.
Verde = compatível com Moment Pro Camera. Amarelo = compatível com o dispositivo, mas não com minha câmera Moment Pro. Vermelho = não suportado pelo dispositivo. Fonte da imagem: Momento. Obtido através de: 9to5Google.
A solução?
Já se passaram quase 12 anos desde que o Android foi lançado, mas podemos finalmente ter uma solução para a fragmentação da câmera.
Esta solução vem direto do Google, embora não esteja integrada diretamente no Android. Em vez disso, é um Biblioteca de suporte do Jetpack. Se você está familiarizado com o desenvolvimento de aplicativos Android, provavelmente já conhece os conjuntos de bibliotecas de suporte AppCompat e AndroidX. Essas bibliotecas do Google visam tornar mais fácil para os desenvolvedores manterem a compatibilidade com versões anteriores do Android, ao mesmo tempo em que podem introduzir novos recursos e estilos.
Uma adição mais recente ao Jetpack (mais ou menos) é a biblioteca CameraX. Semelhante a outras bibliotecas Jetpack, o objetivo do CameraX é facilitar o desenvolvimento de câmeras. Em sua forma mais básica, o CameraX envolve o Android Câmera2, uma API que permite que aplicativos testem os recursos da câmera em um dispositivo, desde que o OEM exponha esses recursos da câmera à API. Os usuários podem verificar quais recursos da câmera estão expostos à API Camera2 usando o aplicativo Camera2 API Probe e depois compará-los com os recursos disponíveis no aplicativo de câmera padrão.
Preço: Grátis.
4.2.
A vantagem de usar o CameraX como wrapper para a API Camera2 é que, internamente, ele resolve quaisquer problemas de compatibilidade específicos do dispositivo que possam surgir. Isso por si só será útil para desenvolvedores de aplicativos de câmera, pois pode reduzir o código padrão e o tempo gasto na pesquisa de problemas de câmera. No entanto, isso não é tudo o que o CameraX pode fazer.
Embora a primeira parte seja interessante apenas para desenvolvedores, há outra parte que se aplica tanto a desenvolvedores quanto a usuários finais: Extensões de fornecedor. Esta é a resposta do Google à fragmentação dos recursos da câmera no Android. Os fabricantes de dispositivos podem optar por enviar bibliotecas de extensão com seus telefones que permitem ao CameraX (e aos desenvolvedores e usuários) aproveitar os recursos nativos da câmera. Por exemplo, digamos que você realmente gosta do efeito Modo Retrato da Samsung, mas não gosta do aplicativo da câmera em si. Se a Samsung decidir implementar uma extensão do Modo Retrato CameraX em seus telefones, qualquer aplicativo de terceiros que use o CameraX poderá usar o Modo Retrato da Samsung. Obviamente, isso não se limita apenas a esse recurso. Os fabricantes podem, teoricamente, abrir qualquer um dos recursos de sua câmera para aplicativos usando o CameraX.
Infelizmente, há uma ressalva, que mencionei anteriormente: isso não é um requisito para os fabricantes. Google diz eles oferecerão suporte a extensões em todos os dispositivos Pixel novos e futuros, começando com o Pixel 4. OPPO diz eles abriram seus modos Beauty e HDR. Outros OEMs podem optar por disponibilizar apenas seus modos noturnos para o CameraX ou podem optar por não implementar nenhuma extensão. Depende totalmente do fabricante qual dispositivo suporta quais extensões CameraX (se houver). Google usado para manter uma lista de dispositivos que suportam extensões de fornecedores e quais recursos de câmera eles abriram, mas não atualizaram a lista nos últimos meses. Entramos em contato com o Google há algumas semanas perguntando se poderiam fornecer uma lista atualizada, mas a empresa ainda não respondeu com uma lista. Pelo que vale, um postagem recente no blog do Google afirma que dispositivos Samsung, LG, OPPO, Xiaomi e Motorola (no Android 10) fornecem alguma extensão funções, mas a postagem do blog não especifica exatamente quais dispositivos são suportados ou quais funções eles fornecer.
Se um número suficiente de fabricantes decidir implementar extensões, o cenário de câmeras de terceiros do Android será muito mais brilhante. Os desenvolvedores não terão que perder tempo reimplementando um recurso de câmera para todos os dispositivos possíveis, já que a estrutura do CameraX cuidará disso. Haverá menos fragmentação de recursos, uma vez que recursos semelhantes entre dispositivos estarão acessíveis por meio de uma interface comum. E há muito mais possibilidades.
Claro, tudo isso depende da capacidade do Google de convencer os fabricantes a implementar bibliotecas de extensões de fornecedores CameraX daqui para frente. A menos que o CameraX seja amplamente implementado, ele apenas aumentará a fragmentação atual. Pessoalmente, porém, estou esperançoso. O Google pode ser muito convincente quando quer, e parece que há muito trabalho sendo feito no CameraX. É emocionante ver uma possível solução para os problemas de câmera do Android no horizonte e estou ansioso para ver como o CameraX irá melhorar e se expandir ao longo do tempo.
O que você acha do CameraX? O Google conseguirá criar uma experiência de câmera unificada para Android?