Çıkış akışları
Kamera alt sistemi, tüm çözünürlükler ve çıkış biçimleri için yalnızca ANativeWindow tabanlı ardışık düzende çalışır. GPU, video kodlayıcı, RenderScript veya uygulama tarafından görülebilen arabellekler (RAW Bayer, işlenmiş YUV arabellekleri ya da JPEG kodlu arabellekler) gibi birçok hedefe tek bir kare göndermek için tek seferde birden fazla akış yapılandırılabilir.
Optimizasyon amacıyla bu çıkış akışları önceden yapılandırılmalıdır ve aynı anda yalnızca sınırlı sayıda akış bulunabilir. Bu sayede, isteklerin birden fazla veya değişen çıkış ardışık düzenleriyle birlikte gönderildiğinde isteklerin yerine getirilmesinde gecikme veya gecikmeli yanıt yaşanmaması için bellek arabelleklerinin önceden ayrılmasına ve kamera donanımının yapılandırılmasına olanak tanınmaktadır.
Desteklenen donanım düzeyine bağlı olarak garanti edilen yayın çıkışı kombinasyonları hakkında daha fazla bilgi için createCaptureSession()
bölümüne bakın.
Kesme
Tam piksel dizisinin kırpılması (dijital yakınlaştırma ve daha küçük bir FOV'nin istendiği diğer kullanım alanları için) ANDROID_SCALER_CROP_REGION ayarı aracılığıyla iletilir. Bu, istek başına bir ayardır ve istek başına değişebilir. Bu, sorunsuz dijital yakınlaştırma uygulaması için kritiktir.
Bölge, (x, y) dikdörtgenin sol üst köşesini tanımlayacak şekilde bir dikdörtgen (x, y, width, height) olarak tanımlanır. Dikdörtgen, sensör etkin piksel dizisinin koordinat sisteminde tanımlanır. Bu sistemde (0,0), etkin piksel dizisinin sol üst pikseli olur. Bu nedenle, genişlik ve yükseklik, ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY statik bilgi alanında raporlanan boyutlardan daha büyük olamaz. İzin verilen minimum genişlik ve yükseklik, HAL tarafından ANDROID_SCALER_MAX_DIGITAL_ZOOM statik bilgi alanı aracılığıyla bildirilir. Bu alan, desteklenen maksimum yakınlaştırma faktörünü tanımlar. Bu nedenle, minimum kırpma bölgesi genişliği ve yüksekliği şunlardır:
{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) }
Kırpma bölgesinin belirli koşulları karşılaması gerekiyorsa (ör. çift koordinatlarda başlaması ve genişliğinin/yüksekliğinin çift olması gerekir) HAL gerekli yuvarlamayı yapmalı ve çıkış sonucu meta verilerinde kullanılan nihai kırpma bölgesini yazmalıdır. Benzer şekilde, HAL video sabitleme uygularsa sonuç kırpma bölgesini, video sabitleme uygulandıktan sonra çıktıya dahil edilen bölgeyi tanımlayacak şekilde ayarlamalıdır. Genel olarak, kamera kullanan bir uygulama, kırpma bölgesine, görüntü sensörünün boyutlarına ve lens odak uzunluğuna göre aldığı görüş alanını belirleyebilmelidir.
Kırpma bölgesi, kırpma bölgesinden farklı en boy oranlarına sahip olabilecek tüm yayınlar için geçerli olduğundan, her yayın için kullanılan tam sensör bölgesi kırpma bölgesinden daha küçük olabilir. Daha açık belirtmek gerekirse her yayın, tanımlanan kırpma bölgesini minimum düzeyde daha da kırparak kare pikselleri ve en boy oranını korumalıdır. Yayın en boy oranı kırpma bölgesinden daha genişse yayın daha da dikey olarak kırpılmalıdır. Yayın en boy oranı kırpma bölgesinden daha darsa yayın daha da yatay olarak kırpılmalıdır.
Her durumda, yayın kırpması tam kırpma bölgesinin ortasına yerleştirilmelidir ve her yayın, tam kırpma bölgesine göre yalnızca yatay veya dikey olarak kırpılır, hiçbir zaman ikisi birden kırpılmaz.
Örneğin, iki akış tanımlanırsa (640x480 akış (4:3 en boy oranı) ve 1280x720 akış (16:9 en boy oranı)) aşağıda, varsayımsal bir 3 MP (2000 x 1500 piksel dizisi) sensörde birkaç örnek kırpma bölgesi için her akışta beklenen çıkış bölgeleri gösterilmektedir.
Kırpma bölgesi: (500, 375, 1000, 750) (4:3 en boy oranı)
640x480 yayın kırpması: (500, 375, 1000, 750) (kırpma bölgesine eşit)
1280x720 yayın kırpması: (500, 469, 1000, 562)
![crop-region-43-ratio](https://source.android.google.cn/static/docs/core/camera/images/crop-region-43-ratio.png?authuser=1&hl=tr)
Şekil 1. 4:3 en boy oranı
Kırpma bölgesi: (500, 375, 1333, 750) (16:9 en boy oranı)
640x480 yayın kırpması: (666, 375, 1000, 750)
1280x720 yayın kırpması: (500, 375, 1333, 750) (kırpma bölgesine eşit)
![crop-region-169-ratio](https://source.android.google.cn/static/docs/core/camera/images/crop-region-169-ratio.png?authuser=1&hl=tr)
Şekil 2. 16:9 en boy oranı
Kırpma bölgesi: (500, 375, 750, 750) (1:1 en boy oranı)
640x480 yayın kırpması: (500, 469, 750, 562)
1280x720 yayın kırpması: (500, 543, 750, 414)
![crop-region-11-ratio](https://source.android.google.cn/static/docs/core/camera/images/crop-region-11-ratio.png?authuser=1&hl=tr)
Şekil 3. 1:1 en boy oranı
Son örnek olarak, 480p yayın yerine 1024x1024 kare en boy oranına sahip bir yayın:
Kırpma bölgesi: (500, 375, 1000, 750) (4:3 en boy oranı)
1024x1024 yayın kırpması: (625, 375, 750, 750)
1280x720 yayın kırpması: (500, 469, 1000, 562)
![crop-region-43-square-ratio](https://source.android.google.cn/static/docs/core/camera/images/crop-region-43-square-ratio.png?authuser=1&hl=tr)
Şekil 4. 4:3 en boy oranı, kare
Yeniden işleme
RAW Bayer verileri için yeniden işleme desteği, ham resim dosyaları için ek destek sağlar. Bu destek, kamera ardışık düzeninin daha önce yakalanmış bir RAW arabelleğini ve meta verileri (daha önce kaydedilen bir karenin tamamı) işlemesine olanak tanır. Böylece, yeni oluşturulmuş bir YUV veya JPEG çıkışı elde edilir.
Yakınlaştırma
Android 11 veya sonraki sürümleri çalıştıran cihazlarda uygulamalar, ANDROID_CONTROL_ZOOM_RATIO
ayarını kullanarak kameranın yakınlaştırma özelliğini (dijital ve optik) kullanabilir.
Yakınlaştırma oranı, kayan nokta faktörü olarak tanımlanır. Bir uygulama, kırpma ve yakınlaştırma için ANDROID_SCALER_CROP_REGION
yerine yakınlaştırma düzeyini kontrol etmek için ANDROID_CONTROL_ZOOM_RATIO
'ü, doğal kamera sensöründen farklı en boy oranları elde etmek için ise yatay ve dikey kırpma için ANDROID_SCALER_CROP_REGION
'ü kullanabilir.
Çok kameralı sistemler, farklı odak uzunluklarına sahip birden fazla lens içerebilir. Kullanıcı, lensler arasında geçiş yaparak optik yakınlaştırmayı kullanabilir.
ANDROID_CONTROL_ZOOM_RATIO
'ü kullanmak aşağıdaki senaryolarda avantaj sağlar:
- Geniş lensten telefoto lense yakınlaştırma: Kayan nokta oranı,
ANDROID_SCALER_CROP_REGION
tam sayı değerlerine kıyasla daha yüksek hassasiyet sağlar. - Geniş lensten ultra geniş lense yakınlaştırma:
ANDROID_CONTROL_ZOOM_RATIO
yakınlaştırmayı destekler (<1,0f),ANDROID_SCALER_CROP_REGION
ise desteklemez.
Yakınlaştırma oranı: 2,0; orijinal görüş alanının 1/4'ü
Kırpma bölgesi: (0, 0, 2000, 1500) (4:3 en boy oranı)
640x480 yayın kırpması: (0, 0, 2000, 1500) (kırpma bölgesine eşit)
1280x720 yayın kırpması: (0, 187, 2000, 1125)
![zoom-ratio-2-crop-43](https://source.android.google.cn/static/docs/core/camera/images/zoom-ratio-2-crop-43.png?authuser=1&hl=tr)
Şekil 5. 2,0 yakınlaştırma, 4:3 en boy oranı
Yakınlaştırma oranı: 2,0; orijinal görüş alanının 1/4'ü
Kırpma bölgesi: (0, 187, 2000, 1125) (16:9 en boy oranı)
640x480 yayın kırpması: (250, 187, 1500, 1125) (dikdörtgen çerçeveli)
1280x720 yayın kırpması: (0, 187, 2000, 1125) (kırpma bölgesine eşit)
![zoom-ratio-2-crop-169](https://source.android.google.cn/static/docs/core/camera/images/zoom-ratio-2-crop-169.png?authuser=1&hl=tr)
Şekil 6. 2,0 yakınlaştırma, 16:9 en boy oranı
Yakınlaştırma oranı: 0,5; orijinal görüş alanının 4 katı (geniş lensten ultra geniş lense geçildi)
Kırpma bölgesi: (250, 0, 1500, 1500) (1:1 en boy oranı)
640x480 yayın kırpması: (250, 187, 1500, 1125) (mektup kutusu)
1280x720 yayın kırpması: (250, 328, 1500, 844) (mektup kutusu)
![resimler/yakınlaştırma-oran-0,5-kırpma-11](https://source.android.google.cn/static/docs/core/camera/images/zoom-ratio-0.5-crop-11.png?authuser=1&hl=tr)
Şekil 7. 0,5 yakınlaştırma, 1:1 en boy oranı
Yukarıdaki grafiklerde görüldüğü gibi, kırpma bölgesinin koordinat sistemi, yakınlaştırmadan sonraki etkili görüş alanına dönüşür ve aşağıdaki boyutlara sahip dikdörtgenle temsil edilir: (0
, 0
, activeArrayWith
, activeArrayHeight
). Aynı durum AE/AWB/AF bölgeleri ve yüzler için de geçerlidir. Bu koordinat sistemi değişikliği, RAW çekimi ve intrinsicCalibration
ile lensShadingMap
gibi ilgili meta veriler için geçerli değildir.
Yukarıdaki varsayımsal örneği kullanarak ve 1.çıkış akışının (640x480) vizör akışı olduğu varsayılarak 2,0x yakınlaştırma iki yoldan biriyle elde edilebilir:
zoomRatio = 2.0
,scaler.cropRegion = (0, 0, 2000, 1500)
zoomRatio = 1.0
(varsayılan),scaler.cropRegion = (500, 375, 1000, 750)
Bir uygulamanın android.control.aeRegions
değerini vizör görüş alanının sol üst çeyreği olarak ayarlaması için android.control.zoomRatio
değerini 2.0
olarak ayarlayarak android.control.aeRegions
değerini (0, 0, 1000, 750)
olarak ayarlayın. Alternatif olarak uygulama, 1.0
'daki android.control.zoomRatio
için android.control.aeRegions
'ü (500, 375, 1000, 750)
'un eşdeğer bölgesine ayarlayabilir.