Çıkış akışları
Kamera alt sistemi, tüm çözünürlükler ve çıktı biçimleri için yalnızca ANativeWindow tabanlı işlem hattında çalışır. GPU, video kodlayıcı, RenderScript veya uygulama tarafından görülebilen arabellekler (RAW Bayer, işlenmiş YUV arabellekleri veya JPEG kodlu arabellekler) gibi birçok hedefe tek bir kare göndermek için aynı anda birden çok akış yapılandırılabilir.
Bir optimizasyon olarak, bu çıktı akışları önceden yapılandırılmalıdır ve aynı anda yalnızca sınırlı sayıda mevcut olabilir. Bu, bellek arabelleklerinin önceden tahsis edilmesine ve kamera donanımının yapılandırılmasına olanak tanır, böylece istekler listelenen birden fazla veya değişken çıkış boru hattı ile gönderildiğinde, isteğin yerine getirilmesinde gecikme veya gecikme olmaz.
Desteklenen donanım düzeyine bağlı olan garantili akış çıkışı kombinasyonları hakkında daha fazla bilgi için bkz. createCaptureSession()
.
Kırpma
Tam piksel dizisinin kırpılması (dijital yakınlaştırma ve daha küçük bir FOV'nin istendiği diğer kullanım durumları için) ANDROID_SCALER_CROP_REGION ayarı aracılığıyla iletilir. Bu, istek başına bir ayardır ve sorunsuz dijital yakınlaştırmanın uygulanması için kritik olan istek bazında değişebilir.
Bölge, (x, y) dikdörtgenin sol üst köşesini tanımlayan bir dikdörtgen (x, y, genişlik, yükseklik) olarak tanımlanır. Dikdörtgen, sensör aktif piksel dizisinin koordinat sisteminde tanımlanır ve (0,0) aktif piksel dizisinin sol üst pikselidir. Bu nedenle genişlik ve yükseklik, ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY statik bilgi alanında bildirilen boyutlardan daha büyük olamaz. İzin verilen minimum genişlik ve yükseklik, desteklenen maksimum yakınlaştırma faktörünü açıklayan ANDROID_SCALER_MAX_DIGITAL_ZOOM statik bilgi alanı aracılığıyla HAL tarafından rapor edilir. Bu nedenle, minimum kırpma bölgesi genişliği ve yüksekliği:
{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 gereksinimleri karşılaması gerekiyorsa (örneğin, eşit koordinatlarda başlaması ve genişliğinin/yüksekliğinin eşit olması gerekiyorsa), HAL gerekli yuvarlamayı yapmalı ve çıktıda kullanılan son kırpma bölgesini yazmalıdır. sonuç meta verileri. Benzer şekilde, HAL video sabitleme uygularsa, video sabitleme uygulandıktan sonra çıktıya fiilen dahil edilen bölgeyi tanımlamak için sonuç kırpma bölgesini ayarlaması gerekir. Genel olarak, kamera kullanan bir uygulama, kırpma bölgesine, görüntü sensörünün boyutlarına ve lens odak uzaklığına dayalı olarak aldığı görüş alanını belirleyebilmelidir.
Ekin bölgesi, ekin bölgesinden farklı en boy oranlarına sahip olabilen tüm akışlar için geçerli olduğundan, her akış için kullanılan tam algılayıcı bölge, ekin bölgesinden daha küçük olabilir. Spesifik olarak, her akış, tanımlanan kırpma bölgesini minimum düzeyde kırparak kare pikselleri ve en boy oranını korumalıdır. Derenin en boy oranı ekin bölgesinden daha genişse, akarsu dikey olarak daha fazla kırpılmalı ve derenin en boy oranı ekin bölgesinden daha darsa, akarsu yatay olarak daha fazla kırpılmalıdır.
Her durumda, akarsu mahsulü tam mahsul bölgesi içinde ortalanmalıdır ve her akıntı tam mahsul bölgesine göre sadece yatay veya dikey olarak kırpılır, asla ikisi birden olmaz.
Örneğin, 640x480 akış (4:3 en boy oranı) ve 1280x720 akış (16:9 en boy oranı) olmak üzere iki akış tanımlanırsa, aşağıda varsayımsal bir 3 MP (2000 x 1500 piksel dizisi) sensörü.
Kırpma bölgesi: (500, 375, 1000, 750) (4:3 en boy oranı)
640x480 akış kırpma: (500, 375, 1000, 750) (kırpma bölgesine eşit)
1280x720 akış kırpma: (500, 469, 1000, 562)

Şekil 1. 4:3 en boy oranı
Kırpma bölgesi: (500, 375, 1333, 750) (16:9 en boy oranı)
640x480 akış kırpma: (666, 375, 1000, 750)
1280x720 akış kırpma: (500, 375, 1333, 750) (kırpma bölgesine eşit)

Şekil 2. 16:9 en boy oranı
Kırpma bölgesi: (500, 375, 750, 750) (1:1 en boy oranı)
640x480 akış kırpma: (500, 469, 750, 562)
1280x720 akış kırpma: (500, 543, 750, 414)

Şekil 3. 1:1 en boy oranı
Ve son bir örnek, 480p akış yerine 1024x1024 kare en boy oranlı akış:
Kırpma bölgesi: (500, 375, 1000, 750) (4:3 en boy oranı)
1024x1024 akış kırpma: (625, 375, 750, 750)
1280x720 akış kırpma: (500, 469, 1000, 562)

Şekil 4. 4:3 en boy oranı, kare
Yeniden işleme
Ham görüntü dosyaları için ek destek, RAW Bayer verileri için yeniden işleme desteğiyle sağlanır. Bu destek, kamera ardışık düzeninin, yeni bir işlenmiş YUV veya JPEG çıktısı üretmek için önceden yakalanmış bir RAW arabelleği ve meta verileri (daha önce kaydedilmiş olan bir çerçevenin tamamı) işlemesine olanak tanır.
yakınlaştır
Android 11 veya sonraki sürümleri çalıştıran cihazlar için bir uygulama, ANDROID_CONTROL_ZOOM_RATIO
ayarı aracılığıyla bir kameranın yakınlaştırmasını (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
kullanmak yerine, yakınlaştırma düzeyini kontrol etmek için ANDROID_CONTROL_ZOOM_RATIO
kullanabilir ve yerel kamera sensöründen farklı en boy oranları elde etmek için yatay ve dikey kırpma için ANDROID_SCALER_CROP_REGION
kullanabilir.
Bir çoklu kamera sistemi, farklı odak uzunluklarına sahip birden fazla lens içerebilir ve kullanıcı, lensler arasında geçiş yaparak optik yakınlaştırmayı kullanabilir. ANDROID_CONTROL_ZOOM_RATIO
kullanmanın aşağıdaki senaryolarda faydaları vardır:
- Geniş bir mercekten telefoto merceğe yakınlaştırma: Kayan nokta oranı,
ANDROID_SCALER_CROP_REGION
tamsayı değerlerine kıyasla daha iyi hassasiyet sağlar. - Geniş lensten ultra geniş lense zoom yapma:
ANDROID_CONTROL_ZOOM_RATIO
uzaklaştırmayı (<1.0f) desteklerkenANDROID_SCALER_CROP_REGION
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 akış kırpma: (0, 0, 2000, 1500) (kırpma bölgesine eşit)
1280x720 akış kırpma: (0, 187, 2000, 1125)

Ş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 akış kırpma: (250, 187, 1500, 1125) (sütun kutulu)
1280x720 akış kırpma: (0, 187, 2000, 1125) (kırpma bölgesine eşit)

Şekil 6. 2.0 yakınlaştırma, 16:9 en boy oranı
Yakınlaştırma oranı: 0,5; 4x orijinal görüş alanı (geniş lensten ultra geniş lense geçilmiştir)
Kırpma bölgesi: (250, 0, 1500, 1500) (1:1 en boy oranı)
640x480 akış kırpma: (250, 187, 1500, 1125) (letterboxed)
1280x720 akış kırpma: (250, 328, 1500, 844) (letterboxed)

Şekil 7. 0,5 yakınlaştırma, 1:1 en boy oranı
Yukarıdaki grafiklerden görüldüğü gibi, kırpma bölgesinin koordinat sistemi, etkili yakınlaştırma sonrası görüş alanına dönüşür ve aşağıdaki boyutlara sahip dikdörtgen ile temsil edilir: ( 0
, 0
, activeArrayWith
, activeArrayHeight
). Aynısı AE/AWB/AF bölgeleri ve yüzleri için de geçerlidir. Bu koordinat sistemi değişikliği, RAW yakalama ve intrinsicCalibration
ve lensShadingMap
gibi ilgili meta verileri için geçerli değildir.
Yukarıdaki aynı varsayımsal örneği kullanarak ve 1 numaralı çıkış akışının (640x480) vizör akışı olduğunu varsayarak, 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
android.control.aeRegions
(0, 0, 1000, 750)
olarak ayarlayın ve android.control.zoomRatio
2.0
olarak ayarlayın. Alternatif olarak, uygulama android.control.aeRegions
için 1.0
android.control.zoomRatio
için (500, 375, 1000, 750)
eşdeğer bölgesine ayarlayabilir.