Android L Uusittu Camera2 API

Tuleva Android L on monessakin mielessä hyvin mielenkiintoinen, mutta taas kerran yksi itseä kiinnostava asia on parannettu Camera API.

Olemassaollut rajapinta kameran käyttöön oli kohtuullinen, mutta hyvin rajoittunut. Sillä pääsi käsiksi kuvaan joka oli otettu, mutta ei esim. kuvaan suoraan kamerasta tulevana, ennen sen tallennusta – jota joskus itse kaipasin. Tyypillinen kamerakoodi oli kuvan käsittelyä sen oton jälkeen.

Uusissa laitteissa on ensinnäkin paranneltu latenssia ja rautapuolta, mutta Android L tuo mukanaan myös Camera API version 2 – se löytyy paketista android.hardware.camera2 (ei kovin suuri yllätys 😉

Sieltä löytyy mm. CameraManager, CameraDevice, CaptureSession, CaptureRequest, ja CaptureResult luokat, jotka antavat jo nimillään kuvaa siitä millä tasolla liikutaan.Camera data model

Ensimmäinen palikka on yleensä CameraManager, jolta saa tietoa saatavilla olevista kameroista. Sen openCamera-metodilla pääsee käsiksi CameraDevice instanssiin, joka edustaa yhtä kameraa.

Seuraavaksi tarvitaan kohteita, joihin kameran esikatselu/tallennus ohjataan. Ne rekisteröidään kameralle ennen kuin sillä voi juurikaan muuta tehdä. Näitä löytyy Surface-rajapintojen alta, esim. TextureView (esikatselunäyttö), MediaRecorder (videon tallennukseen), MediaCodec, ImageReader (kuvien tallennus), RenderScriptAllocation .(YUV prosessointi). Näiden kohteiden koot pitää säätää käytössä olevan kameran mukaan.

Seuraavaksi kutsutaan createCaptureSessions-metodia, joka saa parametrinaan em. kohteet – ja kutsuu valmistuttuaan StateListener-olion onConfigured-metodia (initialisoinnissa voi mennä hetki aikaa).

Seuraavaksi, createCaptureRequest-metodin kautta pääsee käsiksi CaptureRequest-rajapintaan. Parametrina annetaan yksi seuraavista: TEMPLATE_PREVIEW, TEMPLATE_RECORD, TEMPLATE_STILL_CAPTURE, TEMPLATE_VIDEO_SNAPSHOT. Taas kerran vakioiden nimet ovat hyvin kuvaavia.

Tämän CaptureRequest-rajapinnan kautta voidaan päästä käsiksi mm. valkotasapainoon, sisäänrakennettuihin efekteihin, ja salamaan, ISO arvoon, jpeg metadataan, valonmittaukseen, valotuksen säätöön, kuvanvakaukseen, jne.

Seuraava piirre kiinnostaa etenkin itseä, kun järkkärillä valokuvaus kuuluu myös rakkaisiin harrastuksiin: Täältä pääsee käsiksi myös autofocus- ja autoexposure-toimintoihin, ja niitä voikin säätää manuaalisesti.

Varsinainen kaappaus tapahtuu session-instanssin capture-metodilla, välittäen samalla sekä request, että CaptureListener callback-olio parametreina. Näin saat tiedon kun kuva on otettu – kiitos asynkronisten viiveiden jne.

 

Rajumpia päivityksiä ovat mm. burst mode, hdr+, mahdollisuus kaapata kuvia sillä tahdilla mihin rauta pystyy (Esim. Nexus 5 30 fps 8-megapikselin kuvien valokuvaus).

Koodiesimerkkejä perästä jahka joskus kerkisi huvikseen taas koodailla 😉

Mutta onhan noita jo Interwebbi pullollaan. Esim. tuolta: https://github.com/googlesamples/android-Camera2Basic

 

Tuolta lisätietoa:

https://source.android.com/devices/camera/camera3.html

 

 

 

 

 

 

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s