Çıkış akışları
Kamera alt sistemi yalnızca ANativeWindow tabanlı ardışık düzende çalışır tüm çözünürlüklerde ve çıkış biçimlerinde kullanılabilir. Birden fazla akış şurada yapılandırılabilir: GPU, görüntü kalitesi ve video gibi birçok hedefe tek bir kare kodlayıcı RenderScript veya uygulama tarafından görülebilir tamponlar (RAW Bayer, işlenmiş YUV arabellekler veya JPEG kodlu arabellekler).
Optimizasyon olarak bu çıkış akışlarının önceden yapılandırılması gerekir. aynı anda yalnızca sınırlı sayıda olabilir. Bu sayede, görevlerle aranızda kamera donanımının konfigürasyonunu ve arabelleklerini listelenen birden fazla veya değişen çıkış ardışık düzeniyle gönderildiğinden gecikmeleri veya gecikmeleri hesaba katar.
Garantili akış çıkışı kombinasyonları hakkında daha fazla bilgi
veya desteklenen donanım düzeyine bağlı olarak, bkz.
createCaptureSession()
Kesme
Tam piksel dizisinin kırpılması (dijital yakınlaştırma ve farklı kullanım alanlarının daha küçük bir FOV olması tercih edilir) ANDROID_SCALER_CROP_REGION aracılığıyla iletilir. ayarını değiştirebilirsiniz. Bu ayar istek bazındadır ve istek bazında değişebilir. Bu da yumuşak dijital yakınlaştırma için kritik öneme sahip.
Bölge, (x, y) işaretli bir dikdörtgen (x, y, genişlik, yükseklik) olarak tanımlanır sol üst köşesini gösteren resimler yer alır. Dikdörtgen, (0,0) değeri olacak şekilde sensör aktif piksel dizisinin koordinat sistemi etkin piksel dizisinin sol üst pikseli. Bu nedenle, genişlik ve yükseklik ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY parametresinde bildirilen boyutlardan daha büyük olmalıdır. statik bilgi alanını kullanır. İzin verilen minimum genişlik ve yükseklik HAL tarafından raporlanır aşağıdakileri açıklayan ANDROID_SCALER_MAX_DIGITAL_ZOOM statik bilgi alanı aracılığıyla desteklenen maksimum yakınlaştırma faktörüne Bu nedenle, minimum kırpma bölgesi genişliği ve yükseklik:
{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şlayacak ve genişliğinin/yüksekliğinin eşit olması gerekir), HAL gerekli yuvarlamayı yapmalıdır. Kırpma bölgesine doğru çıkış sonucu meta verileri. Benzer şekilde, HAL tarafından sonuç kırpma bölgesini, gerçekte dahil edilen bölgeyi görüntü sabitleme uygulandıktan sonra çıktı görünür. Genel olarak kamera kullanan bir uygulamanın aldığı görüntü alanını temel alarak kırpma bölgesi, görüntü sensörünün boyutları ve lensin odak uzaklığı.
Kırpma bölgesi, farklı yönleri farklı olabilecek tüm akışlar için geçerli olduğundan daha büyük bir orandaysa her akış için kullanılan tam sensör bölgesi daha küçük olduğunu görebilirsiniz. Özellikle, her akış kare piksel sayısını ve en boy oranını minimum düzeyde daha fazla kırparak kırpar. bölgesi. Akışın en boy oranı kırpma bölgesinden genişse akış dikey olarak daha da kırpılmalıdır. Ayrıca, akışın en boy oranı kesim bölgesinden daha darsa akışın daha da kırpılması gerekir yerleştireceğiz.
Her durumda, akış kırpması tüm kırpma bölgesi içinde ortalanmalıdır ve her bir akış, tam görüntüye göre yalnızca yatay veya dikey olarak kırpılır. hiçbir zaman kırpmamanız gerekir.
Örneğin, iki akış tanımlanırsa, 640x480 boyutunda bir akış (4:3 en boy) ve bir 1280x720 akış (16:9 en boy), aşağıda beklenen çıkış bölgelerini gösterir birkaç örnek ürün bölgesi için her akış için, varsayımsal 3 MP (2000 x) 1500 piksel dizisi) sensör.
Kırpma bölgesi: (500, 375, 1.000, 750) (4:3 en boy oranı)
640x480 akış kırpma: (500, 375, 1.000, 750) (kırpma bölgesine eşit)
1280x720 akış kırpma: (500, 469, 1000, 562)
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)
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)
Son olarak, 480p yerine 1024x1024 kare en boy oranında akış
akış:
Kırpma bölgesi: (500, 375, 1.000, 750) (4:3 en boy oranı)
1024x1024 akış kırpma: (625, 375, 750, 750)
1280x720 akış kırpma: (500, 469, 1000, 562)
Yeniden işleniyor
RAW Bayer için yeniden işleme desteğiyle ham resim dosyaları için ek destek sağlanır verileri. Bu destek, kamera ardışık düzeninin önceden çekilen bir çekimi RAW arabelleği ve meta veriler (daha önce kaydedilen tüm kare) oluşturulan yeni bir YUV veya JPEG çıkışı üretir.
Yakınlaştırma
Android 11 veya sonraki sürümleri çalıştıran cihazlarda uygulamalar kameranın yakınlaştırma özelliğini kullanabilir
(dijital ve optik) ANDROID_CONTROL_ZOOM_RATIO
ayarı üzerinden değiştirebilirsiniz.
Yakınlaştırma oranı, kayan nokta faktörü olarak tanımlanır. Şunun yerine:
kırpma ve yakınlaştırma için ANDROID_SCALER_CROP_REGION
kullanan bir uygulama
Yakınlaştırma düzeyini kontrol etmek için ANDROID_CONTROL_ZOOM_RATIO
ve
Şu boyutta yatay ve dikey kırpma için ANDROID_SCALER_CROP_REGION
:
orijinal kamera sensöründen farklı en boy oranları elde eder.
Çoklu kamera sisteminde, farklı boyutlarda birden fazla mercek
ayarlayabilir 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 avantajları vardır:
- Geniş bir lensten telefoto lense yakınlaştırma: Kayan nokta oranı
tam sayı değerlerine kıyasla daha iyi kesinlik sağlar.
ANDROID_SCALER_CROP_REGION
- Geniş lensten ultra geniş lense uzaklaştırma:
ANDROID_CONTROL_ZOOM_RATIO
, uzaklaştırmayı destekliyor (<1.0f);ANDROID_SCALER_CROP_REGION
ise bunu yapmaz.
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)
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) (dikey kutulu)
1280x720 akış kırpma: (0, 187, 2000, 1125) (kırpma bölgesine eşit)
Yakınlaştırma oranı: 0,5; 4 kat orijinal görüş alanı (geniş lensten ultra geniş lense geçildi)
Kırpma bölgesi: (250, 0, 1500, 1500) (1:1 en boy oranı)
640x480 akış kırpma: (250, 187, 1500, 1125) (sinemaskop)
1280x720 akış kırpma: (250, 328, 1500, 844) (sinemaskop)
Yukarıdaki grafiklerden görüleceği gibi, kırpma bölgesinin koordinat sistemi
yakınlaştırma sonrası görünüm alanında gösterilir ve şu boyutlarla dikdörtgenle temsil edilir:
(0
, 0
, activeArrayWith
, activeArrayHeight
).
Aynı durum 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 benzeri meta veriler
lensShadingMap
.
Yukarıdaki varsayıma dayalı aynı örneği kullanarak ve 1. çıkış akışının (640x480) 2,0x yakınlaştırma, iki yöntemden 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
adresini sol üstte olacak şekilde ayarlamak için
vizör görüş alanının dörtte biri ile
android.control.aeRegions
- (0, 0, 1000, 750)
şununla:
android.control.zoomRatio
, 2.0
olarak ayarlandı. Alternatif olarak:
Uygulama, android.control.aeRegions
değerini eşdeğer olarak ayarlayabilir
şunun için (500, 375, 1000, 750)
bölgesi:
android.control.zoomRatio
/1.0
.