De CameraX-API voor leveranciersextensies van Google maakt het mogelijk dat camera-apps van derden enkele van de beste functies van de stockcamera-app gebruiken.
Er bestaat een al lang bestaand grapje op internet dat je kunt zien of iemand een Android-telefoon gebruikt slechte kwaliteit van hun selfies. Hoewel de memes absoluut behoorlijk overdrijven, zit er helaas een stukje waarheid achter. Android-telefoons liepen qua cameraprestaties meestal voor op iPhones, althans op papier. OEM's zoals LG en Samsung gebruiken vaak camera's met meer pixels en grotere diafragmaopeningen dan concurrerende iPhones. Specificaties zijn echter niet alles. Een deel van de reden waarom Apple kan concurreren in het cameraspel is vanwege de iOS-software. Alle OEM's, van Apple tot ZTE, gebruiken wat softwaremagie om foto's en video's er beter uit te laten zien. De bedrijven gebruiken algoritmen om ruis te verminderen, de kleurverzadiging en het contrast aan te passen en zelfs donkere scènes op te fleuren, allemaal om de eindresultaten aangenamer te maken. Historisch gezien zijn Android-OEM's op dit punt tekortgeschoten ten opzichte van Apple.
Software-ontwikkelingen
De laatste tijd beginnen er echter dingen te veranderen. Het grootste voorbeeld van deze verandering is waarschijnlijk Google en de Pixel-line-up. Qua hardware zijn de Pixel-camera's echt niet te vergelijken met andere vlaggenschepen. Software is echter waar Google het verschil maakt. Met functies als Portretmodus, Nachtzicht, HDR+ en Super Res Zoom hebben de Pixels de reputatie opgebouwd dat ze enkele van de beste smartphonecamera's op de markt.
Andere Android-OEM's volgen het voorbeeld van Google. Samsung, OPPO, Xiaomi, Vivo, OnePlus, enz. hebben allemaal hun eigen versies van de populairste camerafuncties van de Pixel geïntroduceerd, en ze hebben zelfs een aantal unieke eigen kenmerken. Met modewoorden als 'AI' en 'machine learning' proberen Android-OEM's u ervan te overtuigen dat hun software de software is waarmee u uw foto's en video's wilt verbeteren. We zijn op een punt gekomen waarop Android-telefoons echt kunnen concurreren met iPhones op alle aspecten van cameraprestaties.
Het probleem
Helaas is er nog steeds één grote uitzondering: apps van derden. Je superduper vlaggenschip met 50 camera's maakt misschien geweldige foto's met de ingebouwde camera-app, maar schakel over naar Instagram, Snapchat, of zelfs een camera-app van derden, en het is in feite een garantie dat wat je vastlegt er lang niet zo zal uitzien als Goed. Alsof dat nog niet genoeg is, verlies je ook alle coole camerafuncties en -modi. Dit komt omdat Android, in tegenstelling tot iOS, niet echt een uniform cameraframework heeft. Zeker, de basisfuncties zijn aanwezig. Een app van derden kan nog steeds foto's en video's maken en de flitser gebruiken. Maar wat gebeurt er als uw telefoon een secundaire sensor heeft voor groothoek- of telefoto? Het is mogelijk dat ontwikkelaars toegang krijgen tot die tweede sensor, maar de methode die ze gebruiken zal specifiek moeten zijn voor jouw apparaat.
Stel dat je een LG V40 hebt (ik weet het, ik weet het, stel je voor dat je dat hebt). De V40 heeft drie sensoren: standaard, telefoto en ultrawide. De ingebouwde camera-app schakelt zonder problemen tussen al deze verschillende sensoren. Maar vergeet het gebruik van de ultrabrede sensor op Instagram. Nu zou Instagram kunnen kijken hoe de camera-app van LG de verschillende sensoren gebruikt en een manier kunnen ontwikkelen waarop gebruikers groothoek- of zoomopnamen kunnen maken. Maar dat zou waarschijnlijk alleen werken op de LG V40. Hoewel de Galaxy S10 dezelfde drie sensormodi heeft (standaard, telefoto en ultrawide), zou het Instagram-team voor Samsung een andere methode moeten ontwikkelen.
Voeg nu Huawei, Vivo, OnePlus, Xiaomi, OPPO, Nokia, ZTE, HTC en welk ander merk je maar kunt bedenken toe aan de mix. Zoals je je kunt voorstellen, zou het ongelooflijk vervelend worden om een methode te ontwikkelen om toegang te krijgen tot alleen de potentiële extra sensoren voor elke telefoon van elk merk. En dan moet je de compatibiliteit met alle huidige en nieuwe telefoons behouden.
Deze beperkingen zijn ook van toepassing op camerafuncties. Zaken als de Portretmodus, Nachtzicht en HDR+ hebben specifieke methoden per apparaat nodig om te gebruiken, of zijn volledig ontoegankelijk voor apps van derden.
Voor een app als Instagram is dit uiteraard niet zo'n groot probleem. Het is niet hun focus, en je kunt altijd de camera-app van je telefoon gebruiken om eerst de foto te maken. Maar hoe zit het met speciale camera-apps?
De effecten
Open de Google Play Store en zoek naar 'camera'. Je zult honderden resultaten vinden. Zelfs met de verbeteringen in de camerasoftware van derden zijn camera-apps van derden nog steeds erg populair. Sommige zijn bedoeld om meer technische functies te bieden, zoals handmatige belichting en scherpstelling (functies die de camera-app van je telefoon mogelijk niet heeft). Anderen streven ernaar een consistente UX op al uw apparaten te bieden.
Vooral om deze laatste reden kan de camerafragmentatie van Android het ongelooflijk moeilijk maken om een breed compatibele camera-app te ontwikkelen en te onderhouden. Als u extra functies wilt bieden, hoe gaat u dan alle potentiële functies van alle potentiële first-party apps opnemen? Als u op zoek bent naar een consistente ervaring, hoe kunt u dan realistisch garanderen dat toegang tot de groothoeksensor op elk apparaat dat deze heeft, zal werken?
Het antwoord is: dat kun je niet. Je kunt proberen zoveel mogelijk functies op zoveel mogelijk apparaten te ondersteunen, maar uiteindelijk zal het veel werk zijn voor relatief weinig beloning. Het is niet moeilijk voor te stellen dat tenminste een paar ontwikkelaars het maken van een volledig uitgeruste camera-app voor Android simpelweg hebben opgegeven. Sterker nog, meerdere hebben dat gedaan.
De slachtoffers
Ga eens zoeken naar camera-apps in de Play Store. Je zult een paar dingen opmerken. Eén, er zijn een kavel van opties. Twee: de meeste doen redelijk vergelijkbare dingen (filters achteraf toepassen en dergelijke). Ten derde worden de meer geavanceerde opties waarschijnlijk niet zo vaak bijgewerkt. Mogelijk vindt u zelfs resultaten op Google die niet langer in de winkel staan.
Onlangs hebben we een behoorlijk belangrijk voorbeeld gekregen van iemand die ermee ophoudt. Moment besloot de ontwikkeling van zijn Pro Camera-app voor Android stop te zetten.
De Pro Camera-app van Moment was bedoeld om geavanceerde foto- en videofuncties naar Android te brengen. Dit zijn slechts enkele van deze kenmerken:
- RGB-histogrammen
- Gesplitste focus
- Handmatige controle over belichting, ISO, sluitertijd, witbalans
- Focuspiek
- RAW-opname
- Dynamische framerate- en resolutieveranderingen
Het probleem is dat veel van deze functies simpelweg niet op veel apparaten werken. Kijken naar de compatibiliteitslijst van Moment's functies is alsof je naar een foto van een dansvloer kijkt. Zelfs binnen dezelfde productlijn is de ondersteuning van functies ongelooflijk gefragmenteerd. Na twee jaar ontwikkeling heeft Moment niet langer de capaciteit om de ontwikkeling van zijn app voort te zetten.
Groen = ondersteund door Moment Pro Camera. Geel = ondersteund door apparaat, maar niet door mijn Moment Pro Camera. Rood = niet ondersteund door apparaat. Bron afbeelding: moment. Opgehaald via: 9to5Google.
De oplossing?
Het is bijna twaalf jaar geleden dat Android voor het eerst werd uitgebracht, maar misschien hebben we eindelijk een oplossing voor de camerafragmentatie.
Deze oplossing komt rechtstreeks van Google, hoewel deze niet rechtstreeks in Android is ingebouwd. In plaats daarvan is het een Jetpack-ondersteuningsbibliotheek. Als u bekend bent met het ontwikkelen van Android-apps, bent u waarschijnlijk de AppCompat- en AndroidX-ondersteuningsbibliotheeksuites tegengekomen. Deze bibliotheken van Google zijn bedoeld om het voor ontwikkelaars gemakkelijker te maken om achterwaartse compatibiliteit met oudere Android-versies te behouden, terwijl ze toch nieuwe functies en stijlen kunnen introduceren.
Een nieuwere toevoeging aan Jetpack (soort van) is de CameraX-bibliotheek. Net als bij andere Jetpack-bibliotheken is het doel van CameraX om de ontwikkeling van camera's eenvoudiger te maken. In zijn meest basale vorm omhult CameraX Android Camera2, een API waarmee apps de camerafuncties op een apparaat kunnen onderzoeken, op voorwaarde dat de OEM die camerafuncties aan de API blootstelt. Gebruikers kunnen controleren welke camerafuncties worden blootgesteld aan de Camera2 API met behulp van de Camera2 API Probe-applicatie en deze vervolgens vergelijken met de functies die beschikbaar zijn in de stockcamera-applicatie.
Prijs: gratis.
4.2.
Het voordeel van het gebruik van CameraX als wrapper voor de Camera2 API is dat het intern eventuele apparaatspecifieke compatibiliteitsproblemen oplost. Dit alleen al zal nuttig zijn voor ontwikkelaars van camera-apps, omdat het de standaardcode en de tijd die wordt besteed aan het onderzoeken van cameraproblemen kan verminderen. Dat is echter niet alles wat CameraX kan doen.
Hoewel dat eerste deel meestal alleen interessant is voor ontwikkelaars, is er nog een ander deel dat van toepassing is op zowel ontwikkelaars als eindgebruikers: Leveranciersuitbreidingen. Dit is het antwoord van Google op de fragmentatie van de camerafuncties op Android. Apparaatfabrikanten kunnen ervoor kiezen om extensiebibliotheken met hun telefoons te leveren waarmee CameraX (en ontwikkelaars en gebruikers) gebruik kunnen maken van de native camerafuncties. Stel bijvoorbeeld dat je het Portretmodus-effect van Samsung erg leuk vindt, maar dat je de camera-app zelf niet leuk vindt. Als Samsung besluit een CameraX Portrait Mode-extensie in zijn telefoons te implementeren, kan elke app van derden die CameraX gebruikt de Portrait Mode van Samsung gebruiken. Uiteraard beperkt dit zich niet alleen tot die ene functie. Fabrikanten kunnen theoretisch al hun camerafuncties openstellen voor apps die CameraX gebruiken.
Helaas is er een kanttekening, die ik eerder al noemde: dit is geen vereiste voor fabrikanten. Google zegt ze ondersteunen extensies op alle nieuwe en aankomende Pixel-apparaten, te beginnen met de Pixel 4. zegt OPPO ze hebben hun Beauty- en HDR-modi geopend. Andere OEM's zouden ervoor kunnen kiezen om alleen hun Nachtmodi beschikbaar te maken voor CameraX, of ze zouden ervoor kunnen kiezen om helemaal geen extensies te implementeren. Het is volledig aan de fabrikant welk apparaat welke CameraX-extensies ondersteunt (indien aanwezig). Googlen gebruikt om een lijst met apparaten bij te houden die leveranciersextensies ondersteunen en welke camerafuncties ze hebben geopend, maar ze hebben de lijst de afgelopen maanden niet bijgewerkt. We hebben een paar weken geleden contact opgenomen met Google met de vraag of ze een bijgewerkte lijst konden verstrekken, maar het bedrijf heeft nog niet gereageerd met een lijst. Voor wat het waard is, a recente Google-blogpost stelt dat toestellen van Samsung, LG, OPPO, Xiaomi en Motorola (op Android 10) enige uitbreiding bieden functies, maar de blogpost specificeert niet precies welke apparaten worden ondersteund of welke functies ze hebben voorzien.
Als genoeg fabrikanten besluiten om extensies te implementeren, zal de camerascène van derden in Android een stuk helderder zijn. Ontwikkelaars hoeven geen tijd te verspillen aan het opnieuw implementeren van een camerafunctie voor elk mogelijk apparaat, aangezien het raamwerk van CameraX hiervoor zorgt. Er zal minder fragmentatie van functies zijn, omdat vergelijkbare functies op verschillende apparaten toegankelijk zullen zijn via een gemeenschappelijke interface. En er zijn nog veel meer mogelijkheden.
Dit hangt natuurlijk allemaal af van het vermogen van Google om fabrikanten te overtuigen om in de toekomst CameraX Vendor Extension-bibliotheken te implementeren. Tenzij CameraX op grote schaal wordt geïmplementeerd, zal het alleen maar bijdragen aan de huidige fragmentatie. Persoonlijk ben ik echter hoopvol. Google kan heel overtuigend zijn als het dat wil, en het lijkt erop dat er veel werk in CameraX wordt gestoken. Het is opwindend om een mogelijke oplossing voor de cameraproblemen van Android aan de horizon te zien, en ik kijk ernaar uit om te zien hoe CameraX in de loop van de tijd zal verbeteren en uitbreiden.
Wat vindt u van CameraX? Zal Google erin slagen een uniforme camera-ervaring voor Android te maken?