Aliran output
Subsistem kamera beroperasi hanya pada pipeline berbasis ANativeWindow untuk semua resolusi dan format output. Beberapa streaming dapat dikonfigurasi sekaligus untuk mengirim satu frame ke banyak target seperti GPU, encoder video, RenderScript, atau buffering yang terlihat aplikasi (RAW Bayer, buffering YUV yang diproses, atau buffering yang dienkode JPEG).
Sebagai pengoptimalan, aliran output ini harus dikonfigurasi terlebih dahulu, dan hanya ada sejumlah terbatas sekaligus. Hal ini memungkinkan pra-alokasi buffering memori dan konfigurasi hardware kamera, sehingga saat permintaan dikirimkan dengan beberapa atau berbagai pipeline output yang tercantum, tidak akan ada penundaan atau latensi dalam memenuhi permintaan.
Untuk informasi lebih lanjut tentang kombinasi output streaming yang dijamin
yang bergantung pada tingkat hardware yang didukung, lihat
createCaptureSession()
.
Memotong
Pemangkasan array piksel penuh (untuk zoom digital dan kasus penggunaan lainnya yang menginginkan FOV yang lebih kecil) dikomunikasikan melalui setelan ANDROID_SCALER_CROP_REGION. Ini adalah setelan per permintaan, dan dapat berubah berdasarkan per permintaan, yang penting untuk menerapkan zoom digital yang lancar.
Wilayah ditentukan sebagai persegi panjang (x, y, lebar, tinggi), dengan (x, y) yang menjelaskan sudut kiri atas persegi panjang. Persegi panjang ditentukan pada sistem koordinat array piksel aktif sensor, dengan (0,0) sebagai piksel kiri atas array piksel aktif. Oleh karena itu, lebar dan tinggi tidak boleh lebih besar dari dimensi yang dilaporkan di kolom info statis ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY. Lebar dan tinggi minimum yang diizinkan dilaporkan oleh HAL melalui kolom info statis ANDROID_SCALER_MAX_DIGITAL_ZOOM, yang menjelaskan faktor zoom maksimum yang didukung. Oleh karena itu, lebar dan tinggi wilayah pemangkasan minimum adalah:
{width, height} = { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] / ANDROID_SCALER_MAX_DIGITAL_ZOOM), floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] / ANDROID_SCALER_MAX_DIGITAL_ZOOM) }
Jika wilayah pemangkasan perlu memenuhi persyaratan tertentu (misalnya, harus dimulai pada koordinat genap, dan lebar/tingginya harus genap), HAL harus melakukan pembulatan yang diperlukan dan menulis wilayah pemangkasan akhir yang digunakan dalam metadata hasil output. Demikian pula, jika HAL menerapkan stabilisasi video, HAL harus menyesuaikan wilayah pemangkasan hasil untuk mendeskripsikan wilayah yang sebenarnya disertakan dalam output setelah stabilisasi video diterapkan. Secara umum, aplikasi yang menggunakan kamera harus dapat menentukan bidang pandang yang diterimanya berdasarkan area pemangkasan, dimensi sensor gambar, dan panjang fokus lensa.
Karena wilayah pemangkasan berlaku untuk semua aliran data, yang mungkin memiliki rasio aspek yang berbeda dengan wilayah pemangkasan, wilayah sensor yang tepat yang digunakan untuk setiap aliran data mungkin lebih kecil dari wilayah pemangkasan. Secara khusus, setiap streaming harus mempertahankan piksel persegi dan rasio aspeknya dengan memangkas area pemangkasan yang ditentukan secara minimal. Jika rasio aspek streaming lebih lebar dari wilayah pemangkasan, streaming harus dipangkas lebih lanjut secara vertikal, dan jika rasio aspek streaming lebih sempit dari wilayah pemangkasan, streaming harus dipangkas lebih lanjut secara horizontal.
Dalam semua kasus, pemangkasan aliran data harus dipusatkan dalam region pemangkasan penuh, dan setiap aliran data hanya dipangkas secara horizontal atau vertikal relatif terhadap region pemangkasan penuh, tidak pernah keduanya.
Misalnya, jika dua aliran data ditentukan, aliran data 640x480 (rasio aspek 4:3), dan aliran data 1280x720 (rasio aspek 16:9), di bawah ini menunjukkan wilayah output yang diharapkan untuk setiap aliran data untuk beberapa contoh wilayah pemangkasan, pada sensor hipotetis 3 MP (array 2000 x 1500 piksel).
Wilayah pemangkasan: (500, 375, 1000, 750) (rasio aspek 4:3)
Pemangkasan streaming 640x480: (500, 375, 1000, 750) (sama dengan wilayah pemangkasan)
Pemangkasan streaming 1280x720: (500, 469, 1000, 562)

Gambar 1. Rasio aspek 4:3
Wilayah pemangkasan: (500, 375, 1333, 750) (rasio aspek 16:9)
Pemangkasan streaming 640x480: (666, 375, 1000, 750)
Pemangkasan streaming 1280x720: (500, 375, 1333, 750) (sama dengan wilayah pemangkasan)

Gambar 2. Rasio lebar tinggi 16:9
Wilayah pemangkasan: (500, 375, 750, 750) (rasio aspek 1:1)
Pemangkasan streaming 640x480: (500, 469, 750, 562)
Pemangkasan streaming 1280x720: (500, 543, 750, 414)

Gambar 3. Rasio aspek 1:1
Dan contoh terakhir, streaming dengan rasio aspek persegi 1024x1024, bukan streaming
480p:
Wilayah pemangkasan: (500, 375, 1000, 750) (rasio aspek 4:3)
Pemangkasan streaming 1024x1024: (625, 375, 750, 750)
Pemangkasan streaming 1280x720: (500, 469, 1000, 562)

Gambar 4. Rasio aspek 4:3, persegi
Pemrosesan ulang
Dukungan tambahan untuk file gambar mentah disediakan oleh dukungan pemrosesan ulang untuk data Bayer RAW. Dukungan ini memungkinkan pipeline kamera memproses buffering dan metadata RAW yang diambil sebelumnya (seluruh frame yang direkam sebelumnya), untuk menghasilkan output YUV atau JPEG yang dirender baru.
Zoom
Untuk perangkat yang menjalankan Android 11 atau yang lebih tinggi, aplikasi dapat menggunakan zoom kamera
(digital dan optik) melalui setelan ANDROID_CONTROL_ZOOM_RATIO
.
Rasio zoom ditentukan sebagai faktor floating point. Daripada
menggunakan ANDROID_SCALER_CROP_REGION
untuk pemangkasan dan zoom, aplikasi dapat menggunakan
ANDROID_CONTROL_ZOOM_RATIO
untuk mengontrol tingkat zoom, dan menggunakan
ANDROID_SCALER_CROP_REGION
untuk pemangkasan horizontal dan vertikal guna
mencapai rasio aspek yang berbeda dengan sensor kamera native.
Sistem multi-kamera dapat berisi lebih dari satu lensa dengan panjang fokus
yang berbeda, dan pengguna dapat menggunakan zoom optik dengan beralih antar-lensa.
Menggunakan ANDROID_CONTROL_ZOOM_RATIO
memiliki manfaat dalam skenario di bawah:
- Memperbesar dari lensa lebar ke lensa telefoto: Rasio floating point
memberikan presisi yang lebih baik dibandingkan dengan nilai bilangan bulat
ANDROID_SCALER_CROP_REGION
. - Memperkecil dari lensa lebar ke lensa ultra lebar:
ANDROID_CONTROL_ZOOM_RATIO
mendukung zoom-out (<1,0f) sedangkanANDROID_SCALER_CROP_REGION
tidak.
Rasio zoom: 2,0; 1/4 dari bidang pandang asli
Wilayah pemangkasan: (0, 0, 2000, 1500) (rasio aspek 4:3)
Pemangkasan streaming 640x480: (0, 0, 2000, 1500) (sama dengan wilayah pemangkasan)
Pemangkasan streaming 1280x720: (0, 187, 2000, 1125)

Gambar 5. Zoom 2,0, rasio aspek 4:3
Rasio zoom: 2,0; 1/4 bidang pandang asli
Wilayah pemangkasan: (0, 187, 2000, 1125) (rasio aspek 16:9)
Pemangkasan streaming 640x480: (250, 187, 1500, 1125) (pillarboxed)
Pemangkasan streaming 1280x720: (0, 187, 2000, 1125) (sama dengan wilayah pemangkasan)

Gambar 6. Zoom 2.0, rasio aspek 16:9
Rasio zoom: 0,5; 4x bidang pandang asli (beralih dari lensa lebar ke lensa ultra lebar)
Wilayah pemangkasan: (250, 0, 1500, 1500) (rasio aspek 1:1)
Pemangkasan streaming 640x480: (250, 187, 1500, 1125) (letterbox)
Pemangkasan streaming 1280x720: (250, 328, 1500, 844) (letterbox)

Gambar 7. Zoom 0,5, rasio aspek 1:1
Seperti yang terlihat dari grafik di atas, sistem koordinat area pemangkasan berubah menjadi bidang pandang
yang efektif setelah zoom, dan diwakili oleh persegi panjang dengan dimensi berikut:
(0
, 0
, activeArrayWith
, activeArrayHeight
).
Hal yang sama berlaku untuk area dan wajah AE/AWB/AF. Perubahan sistem koordinat ini tidak berlaku untuk
pengambilan RAW dan metadata terkaitnya seperti intrinsicCalibration
dan
lensShadingMap
.
Dengan menggunakan contoh hipotetis yang sama di atas, dan dengan asumsi bahwa streaming output #1 (640x480) adalah streaming jendela bidik, zoom 2,0x dapat dicapai dengan salah satu dari dua cara:
zoomRatio = 2.0
,scaler.cropRegion = (0, 0, 2000, 1500)
zoomRatio = 1.0
(default),scaler.cropRegion = (500, 375, 1000, 750)
Agar aplikasi menetapkan android.control.aeRegions
sebagai kuadran kiri atas
dari bidang pandang jendela bidik, tetapkan
android.control.aeRegions
ke (0, 0, 1000, 750)
dengan
android.control.zoomRatio
ditetapkan ke 2.0
. Atau,
aplikasi dapat menetapkan android.control.aeRegions
ke wilayah
(500, 375, 1000, 750)
yang setara untuk
android.control.zoomRatio
dari 1.0
.