2019. július 22., hétfő

Gyorskeresés

Android Camera2 API - Apa kezdődik! [Dióhéjban]

Írta: | Kulcsszavak: camera2. api. android . camera2 api . google . kamera

[ ÚJ BEJEGYZÉS ]

Igaz nem egy ropogós, friss dologról írok most de nem is igazán találtam semmit ahol legalább nagyjából körül írnák, hogy mi is ez. Miért is vannak az idei készülékek kamerájában manuális mód.
Nem, nem a Samsung csinálta az S6-hoz. ;]
Ez annál sokkal bonyolultabb..

Az egész a Google I/O 2014 - Keynote-on kezdődött. Bejelentésre került az Android 5.0, Lollipop mely megreformálja az Androidos készülékkel történő fényképezést, videózást.

Camera2 API

Hogy megértsük mi is ez először egy alapfogalmat kell tisztáznunk.

API: Az alkalmazásprogramozási felület vagy alkalmazásprogramozási interfész (angolul application programming interface, röviden API) egy program vagy rendszerprogram azon eljárásainak (szolgáltatásainak) és azok használatának dokumentációja, amelyet más programok felhasználhatnak. Egy nyilvános API segítségével lehetséges egy programrendszer szolgáltatásait használni anélkül, hogy annak belső működését ismerni kellene. - wiki
Összefoglalva, az API egy "gyűjtemény" mely az adott rendszerprogram szubrutinjait és eljárásait tartalmazza, megkönnyítve a használatát.

Camera API fejlődése

Az első Camera API réges rég,egy messzi, messzi galaxisban készült. Az android legelső, Alpha vagyis Astro kiadásához. Ez a " point-and-shoot camera " logikáját követi, Magyarországon jobban ismert a Kompakt fényképező elnevezés.

Természetesen az első API is fejlődött. A fokozatosan növekvő igények miatt bővíteni kellet a "tudástárat". Az egyik legjelentősebb fejlesztés egy új számítási módszer megérkezése volt mely segítségével több képet tudott rögzíteni elhanyagolható időkülönbséggel. Legelterjedtebb implementációja ennek a funkciónak az ún. HDR (High Dynamic Range), mely szinte egy időben készít különböző expozíciós képeket és ezekből az adott alkalmazás erre kifejlesztett metódusa egyetlen kibővített tónustartományú képet hoz létre. Ennek a megoldásnak köszönhető még az alábbi funkciók is: Super Resolution, Both Joined, Low-light mode, Eraser, Best face, melyek mind több képpel manipulálnak.
Ezen kívül a Google foglakozott az optikai zoom-mal felszerelt készülékekkel valamint a nagyobb méretű szenzorokkal érkező készülékekkel is melyek szintén az API bővítését igényelték.

KitKat-ig elég limitált számú funkció érhető el a Google saját megvalósításában. Így több gyártó is saját megvalósítást készített. Ezek a nagyközönség számára elérhetetlenek.

2014-ben a Google megreformálta a saját API-ját.

Az új API

Próbálta a felhasználói igényekhez igazítani az új API működését. Ennek eredménye az lett, hogy már nem bővítette a meglévőt hanem teljesen újra lett írva. From scratch.

Az új API logikája merőben eltér az előzőtől.
Az egész csővezeték rendszerű lett (pipeline). A beérkező kérelem (request) több bufferen keresztül halad mindegyik saját beállításán így a végeredmény egy merőben eltérő kép lesz.

Hogy ez mit is takar?

Néhány előnye az új API-nak:
- Minden frame külön, külön kontrollálható.
- Több szálú buffereknek köszönhetően egyszerre készülhet JPEG + RAW formátumú kép.
- Nincs szignifikáns különbség a videó és a fénykép között beállítások szempontjából.
- Teljes szenzormérettel elérhető 30 FPS-es feldolgozás. Multi Frame Capture

Az új API megjelenésével egy időben a Google száműzte az első API-t és minden fejlesztőt az új API használatára sarkall, ezzel jelezve, hogy az első API már elavult.

Mélyebbre úszva.

Három azaz 3, megvalósítása létezik a Camera2 API implementációjának.
Mivel az új API teljesen eltér az eddigiektől így a Google-nak kompromisszumot kellett kötnie és sok rugalmas implementációt készítenie, hogy a gyártók tudják frissíteni a saját készülékeiket az új rendszerre.
Ez ésszerű, ha a Google kötelezne mindenkit a teljes implementálásra a Lollipop működéséhez akkor ez a frissítés terjedne el a leglassabban. Ha bár eddig úgy tűnik e nélkül is sikerült elérni ezt hála a Lollipop egyéb hibáinak, de ez egy más téma.

A Reference Sheet-en is látszik, hogy 3 megvalósítás létezik:
- Full
- Limited
- Legacy

Hardver Rétegek

FULL: - Szinte minden

- Legalább 20 fps de inkább 30 fps szenzor méret tömörítés nélküli YUV kimenet.
- Per frame kontrol
- Manuális szenzor kontrol (ISO, exposure, stb)
- Manuális post-processing kontrol
- Manuális méret, koordináta állítás
- Legalább 3 feldolgozott, nem szétváló kimenet. pl: YUV 4:2:0 ,előnézetekhez.
- Lehetőség a beállítások listázására a kimenet szerint

+ A FULL sem követeli meg a RAW mentés lehetőségét.

LIMITED: - Részleges implementáció.

Ebben a megvalósításban nagy különbségek lehetnek két megvalósítás között is.
A LIMITED nem követeli meg a Camera2 API implementálását hanem egy új réteg kerül be amely pár funkciót tud biztosítani az új API nélkül is.

Minden kamera más adottságokkal rendelkezik így változhatnak a megvalósítás funkciói is.

LEGACY

Erről nincs sokat írni. Fent említettem, hogy ha kötelező lenne implementálni az API-t akkor lassú lenne a frissítés. Ez az implementáció azért jött létre, hogy ne kelljen implementálni az új API-t a frissítéshez. Néhány funkciót ezzel a módszerrel is életre lehet kelteni a köztes rétegen de elenyésző teljesítményt nyújt. Már ha éppen nyújt bármit is az adott implementáció.

Megkötések:

A legnagyobb hiány ami miatt a gyártók hanyagolják az új API használatát(mert hanyagolják. Erre később kitérek.) Az a HAL (Hardware Abstraction Layer) miatt van.
Ez a réteg közvetlenül a harvder fölött helyezkedik el és a gyártó készíti. (Qualcomm, Intel, MediaTek, stb)
Őket nem lehet kötelezni, hogy a Google megoldását kövessék így ha a HAL nem támogatja az adott API implementációját az egész bukott ügy mivel a gyártónak újra kell írnia a HAL és az ISP(Image Signal Processor) erre eső részét a saját szabadalmazott megoldásuk helyett.
Igazság szerint ezek csak kis problémák. A nagyobb az, hogy nem fordítanak rá időt.
Az új API bonyolult és összetett. Idő kell az implementálásához amit a gyártók nem adnak meg.

Készülékek:

Fentebb említettem, hogy hanyagolják az új API-t.
És most ezt be is mutatom.

MWC 2015 készülékei camera2 API implementációja:

FULL:

-

LIMITED.

- Samsung Galaxy S6 / S6 Edge

LEGACY:

- HTC One M9
- ASUS Zenfone 2
- Lenovo VIBE Shot
- Sony Xperia M4 Aqua
- GiONEE Elife S7

Készülékek melyek támogatják a camera2 API teljes implementációját:

Nexus 5
Nexus 6

Szomorú látni, hogy a gyártók a saját képükre formálják ezt is.
De ami még elszomorítóbb, hogy a 2015 előtt kiadott készülékekre nem sok esély van, hogy Legacy implementációs réteg fölött tudja majd használni az új API-t.

- s3nsitivity

Hozzászólások

(#1) fene_vad


fene_vad
(senior tag)

huhh nem vagyok egy nagy grammarnáci, de ez a DIÓHÉLY retináig kiégette a szemem:)

(#2) s3nsitivity válasza fene_vad (#1) üzenetére


s3nsitivity
(PH! addikt)

Elég sokszor átolvastam, nem igaz, hogy nem tűnt fel. :DDD
:R

" Widespread acceptance of an idea is not proof of it's validity " (Robert Langdon)

(#3) maximilian4


maximilian4
(PH! addikt)

Készülékek melyek támogatják a camera2 API teljes implementációját:

Nexus 5
Nexus 6

Nekem ezeket tudja az oppo r5-öm is, a find 7 is tudja, n3 stb.
Illetve ha jól tudom mostmár itt a g4 is.

Maxi

(#4) s3nsitivity válasza maximilian4 (#3) üzenetére


s3nsitivity
(PH! addikt)

Ezekről nem tudok.
A G4 tán csak limited de arról se tudok még pontos infót.

Ha lefuttatnál egy camera2 api tesztert azt megköszönnék! :R

" Widespread acceptance of an idea is not proof of it's validity " (Robert Langdon)

(#5) s3nsitivity válasza s3nsitivity (#4) üzenetére


s3nsitivity
(PH! addikt)

Kicsit utána járva az R5 és a Find 7 se kapja meg az új apit.

De a Color OS még csak béta így a véglegesbe lehet benne lesz

[ Szerkesztve ]

" Widespread acceptance of an idea is not proof of it's validity " (Robert Langdon)

(#6) maximilian4 válasza s3nsitivity (#5) üzenetére


maximilian4
(PH! addikt)

Hát nem tudom. A "pure image 2.0" képfeldolgozó algoritmus van benne, ami elég fejlett.
Mindent tudok manuálisan állítani.
Akár 32 másodperces záridő, raw-ban rögzítés, iso, fehéregyensúly stb.

Maxi

(#7) s3nsitivity válasza maximilian4 (#6) üzenetére


s3nsitivity
(PH! addikt)

Mint ahogy a cikkben is írtam a gyártók a saját megoldásait implementálják így nem használva az api-t is elérhetők egyes funkciók. :K
Persze mivel egyik se volt a kezemben nem mondom biztosra. :D

Manual Camera Compatibility, ha van időd ezt futtasd le, ez megmondja mit tud az új apiból vagy mit nem. :K

" Widespread acceptance of an idea is not proof of it's validity " (Robert Langdon)

(#8) gyurkikrisz


gyurkikrisz
(PH! addikt)

A széttagoltság, ez a kedvencem az Androidban.

A tuning a kisfiúk alap órajele. | i5 6500

(#9) dontdoit


dontdoit
(kvázi-tag)

Oneplus one kapja?

Nem beszélgetni akarok. Üzletelni. Mennyi? Annyi! Telefonszám? Mikor, hol? És kész is az üzlet.

(#10) s3nsitivity válasza dontdoit (#9) üzenetére


s3nsitivity
(PH! addikt)

A linkelt bejegyzés Steve-től pont a OnePlus One-ra irányult.
Mivel a qualcomm nem támogatja az adott SoC-ra a HAL3-at így szükséges a port.. amit elvileg csinálnak csak így majd elvész számos funkció ami a saját API-jukból származik. pl: Clear Image.

Én személy szerint remélem, hogy megkapja.. Azok a funkciók számomra nem fontosak, legalábbis kevésbé mint az újak. :D

" Widespread acceptance of an idea is not proof of it's validity " (Robert Langdon)

További hozzászólások megtekintése...
Copyright © 2000-2019 PROHARDVER Informatikai Kft.