Bu sayfada, kamera HAL'leri, API'ler ve ilişkili Uyumluluk Test Paketi (CTS) testlerindeki sürüm farklılıkları ayrıntılı olarak açıklanmaktadır. Ayrıca, Android 7.0'daki kamera çerçevesini güçlendirmek ve güvence altına almak için yapılan çeşitli mimari değişiklikleri, Android 8.0'da Treble'a geçişi ve satıcıların kamera uygulamalarında bu değişiklikleri desteklemek için yapması gereken güncellemeleri de kapsar.
Terminoloji
Bu sayfada aşağıdaki terimler kullanılmaktadır:
- Kamera API'si1
- Android 4.4 ve önceki sürümleri çalıştıran cihazlarda
android.hardware.Camera
sınıfı aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi. - Camera API2
- Android 5.0 ve sonraki sürümleri çalıştıran cihazlarda
android.hardware.camera2
paketi aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi. - Kamera HAL'i
- SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'i üzerine kuruludur.
- Kamera HAL3.1
- Android 4.4 ile birlikte yayınlanan kamera cihaz HAL'inin sürümü.
- Kamera HAL3.2
- Android 5.0 ile birlikte yayınlanan kamera cihazı HAL'inin sürümü.
- Camera API1 CTS
- Camera API1'in üzerinde çalışan kamera CTS testleri grubu.
- Camera API2 CTS
- Camera API2'nin üzerinde çalışan ek kamera CTS testleri.
- Tiz
- Tedarikçi firma uygulamasını (silisyum üreticileri tarafından yazılan cihaza özel, alt düzey yazılım), yeni bir tedarikçi firma arayüzü aracılığıyla Android OS çerçevesinden ayırır.
- HIDL Treble ile kullanıma sunulan ve HAL ile kullanıcıları arasındaki arayüzü belirtmek için kullanılan
- HAL arayüzü tanımlama dili.
- VTS
- Treble ile birlikte satıcı test paketi kullanıma sunuldu.
Kamera API'leri
Android aşağıdaki kamera API'lerini içerir.
Kamera API'si1
Android 5.0'de Camera API1'in desteği sonlandırıldı. Yeni platform geliştirmeleri Camera API2'ye odaklandığından bu API'nin desteği aşamalı olarak kaldırılmaya devam ediyor. Ancak kullanımdan kaldırma süreci uzun olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecektir. Özellikle aşağıdakiler için destek devam eder:
- Uygulamalar için Camera API1 arayüzleri. Camera API1'in üzerine inşa edilen kamera uygulamaları, daha eski Android sürümlerini çalıştıran cihazlarda olduğu gibi çalışmalıdır.
- Kamera HAL sürümleri. Kamera HAL1.0 desteği içerir.
Camera API2
Kamera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontroller arasında verimli sıfır kopyalama ardışık/akış akışları ve pozlama, kazanç, beyaz denge kazançları, renk dönüşümü, gürültü giderme, keskinleştirme ve daha fazlası için kare başına kontroller bulunur. Ayrıntılı bilgi için Google I/O videosuna genel bakış başlıklı videoyu izleyin.
Android 5.0 ve sonraki sürümler Camera API2'yi içerir ancak Android 5.0 ve sonraki sürümleri çalıştıran cihazlar Camera API2'nin tüm özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri aracılığıyla sorgulayabileceği android.info.supportedHardwareLevel
mülkü, aşağıdaki destek düzeylerinden birini raporlar:
LEGACY
: Bu cihazlar, Camera API2 arayüzleri aracılığıyla uygulamalara Camera API1 arayüzleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı özellikler sunar. Eski çerçeve kodları, Camera API2 çağrılarını kavramsal olarak Camera API1 çağrılarına çevirir. Eski cihazlar, kare başına kontroller gibi Camera API2 özelliklerini desteklemez.LIMITED
: Bu cihazlar Camera API2'nin bazı özelliklerini (tümünü değil) destekler ve Camera HAL 3.2 veya sonraki bir sürümü kullanmalıdır.FULL
: Bu cihazlar, Camera API2'nin tüm önemli özelliklerini destekler ve Camera HAL 3.2 veya sonraki bir sürüm ile Android 5.0 veya sonraki bir sürüm kullanmalıdır.LEVEL_3
: Bu cihazlar, ek çıkış akışı yapılandırmalarının yanı sıra YUV yeniden işlemeyi ve RAW resim yakalamayı destekler.EXTERNAL
: Bu cihazlar, bazı istisnalar dışındaLIMITED
cihazlarına benzer. Örneğin, bazı sensör veya lens bilgileri raporlanmayabilir ya da daha kararsız kare hızlarına sahip olabilir. Bu düzey, USB web kameraları gibi harici kameralar için kullanılır.
Ayrı ayrı özellikler, Camera API2 arayüzlerindeki android.request.availableCapabilities
mülkü aracılığıyla gösterilir. FULL
cihazları için MANUAL_SENSOR
ve MANUAL_POST_PROCESSING
gibi özellikler gerekir. RAW
özelliği, FULL
cihazlar için bile isteğe bağlıdır.
LIMITED
cihazlar, bu özelliklerin hiçbiri dahil olmak üzere bu özelliklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak BACKWARD_COMPATIBLE
özelliği her zaman tanımlanmalıdır.
Cihazın desteklediği donanım düzeyi ve desteklediği belirli Camera2 API2 özellikleri, Google Play'in Camera2 API2 kamera uygulamalarını filtrelemesine izin vermek için aşağıdaki özellik işaretleri olarak kullanılabilir.
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
CTS koşulları
Android 5.0 ve sonraki sürümleri çalıştıran cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Doğrulayıcı kamera testlerini geçmelidir.
Kamera HAL3.2 uygulaması içermeyen ve Camera API2 arayüzlerinin tamamını destekleyemeyen cihazlar, Camera API2 CTS testlerini yine de geçmelidir. Ancak cihaz, Camera API2 LEGACY
modunda çalışır (Camera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği mod). Bu nedenle, Camera API1'in ötesindeki özellikler veya özelliklerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.
Eski cihazlarda çalıştırılan Camera API2 CTS testleri, yeni şart olmadan mevcut herkese açık Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkarılan (ve Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'inde zaten mevcut olan hatalar olduğundan mevcut Camera API1 uygulamaları tarafından bulunur. Bu tür çok fazla hata beklemiyoruz (ancak bu tür hatalar, Camera API2 CTS testlerini geçebilmek için düzeltilmelidir).
VTS koşulları
Android 8.0 ve sonraki sürümleri çalıştıran, bağlayıcı HAL uygulamalarını kullanan cihazlar Kamera VTS testlerinden geçmelidir.
Kamera çerçevesinin güçlendirilmesi
Android 7.0, medya ve kamera çerçevesinin güvenliğini artırmak için kamera hizmetini mediaserver'dan çıkarır. Android 8.0'dan itibaren, her bağlayıcılı kamera HAL'i kamera hizmetinden ayrı bir işlemde çalışır. Tedarikçi firmaların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'inde değişiklik yapması gerekebilir. Aşağıdaki bölümlerde, HAL1 ve HAL3 için AP1 ve AP2'deki mimari değişikliklerin yanı sıra genel şartlar ayrıntılı olarak açıklanmıştır.
API1 için mimari değişiklikleri
API1 video kaydı, kamera ve video kodlayıcının aynı işlemde olduğunu varsayabilir. API1'i şu platformlarda kullanırken:
- Kamera hizmetinin, tamponları işlemler arasında iletmek için BufferQueue'ı kullandığı HAL3'te tedarikçi güncellemesi gerekmez.
Şekil 1. HAL3'te API1'de Android 7.0 kamera ve medya yığını
- Video arabelleklerinde meta veri aktarımını destekleyen HAL1. Tedarikçi firmaların HAL'i
kMetadataBufferTypeNativeHandleSource
kullanacak şekilde güncellemesi gerekir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmiyor.)Şekil 2. HAL1'de API1'de Android 7.0 kamera ve medya yığını
API2 için mimari değişiklikleri
HAL1 veya HAL3'teki API2 için BufferQueue, bu yolların çalışmaya devam etmesi amacıyla arabellekleri iletir. Aşağıdaki sürümlerde API2 için Android 7.0 mimarisi:
- HAL1, cameraservice taşıma işleminden etkilenmez ve tedarikçi güncellemesi gerekmez.
- HAL3 etkilenir ancak satıcı güncellemesi gerekmez:
Şekil 3. HAL3'te API2'de Android 7.0 kamera ve medya yığını
Diğer şartlar
Medya ve kamera çerçevesinin güvenliğini artırmak için yapılan mimari değişiklikler, aşağıdaki ek cihaz koşullarını içerir.
- Genel: Cihazlar, IPC nedeniyle ek bant genişliği gerektirir. Bu durum, yüksek hızlı video kaydı gibi zamana duyarlı kamera kullanım alanlarını etkileyebilir. Tedarikçi firmalar,
android.hardware.camera2.cts.PerformanceTest
'ü ve Google Kamera uygulamasını 120/240 FPS yüksek hızlı video kaydı için çalıştırarak gerçek etkiyi ölçebilir. Cihazların yeni işlemi oluşturmak için az miktarda ek RAM'e de ihtiyacı vardır. - Meta verileri video arabelleklerine aktarma (yalnızca HAL1). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depoluyorsa meta veri arabellek türü olarak
kMetadataBufferTypeNativeHandleSource
'ü kullanmalı veVideoNativeHandleMetadata
'ü video arabelleklerine iletmelidir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmiyor.)VideoNativeHandleMetadata
ile kamera ve medya çerçeveleri, yerel imleçleri düzgün şekilde serileştirip seri dışı hale getirerek video arabelleklerini işlemler arasında aktarabilir. - Arabellek tutamaç adresi her zaman aynı arabelleği depolamaz (yalnızca HAL3). HAL3, her yakalama isteği için arabellek tutamaçlarının adreslerini alır. HAL, tamponu döndürdükten sonra adresler başka bir tampon tutamacını depolayabileceğinden, tamponları tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanacak şekilde HAL'i güncellemeniz gerekir. Örneğin, HAL, A arabellek tutamacını depolayan A arabellek tutamaç adresini alır. HAL, A arabellek tutamacını döndürdükten sonra A arabellek tutamaç adresi, HAL'ın bir sonraki seferde alacağı B arabellek tutamacını saklayabilir.
- cameraserver için SELinux politikalarını güncelleyin. Cihaza özgü SELinux politikaları, mediaserver'a kamerayı çalıştırma izni veriyorsa SELinux politikalarını, cameraserver'a uygun izinler verecek şekilde güncellemeniz gerekir. Mediaserver'ın SELinux politikalarının cameraserver için kopyalanmasını önermeyiz (mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirdiğinden). Cameraserver'da yalnızca kamera işlevlerini gerçekleştirmek için gereken izinler bulunmalıdır. Mediaserver'daki kamerayla ilgili gereksiz izinler kaldırılmalıdır.
- Kamera HAL'i ile kamera sunucusu arasında ayrım Android 8.0 ve sonraki sürümlerde, kamera sunucusundan farklı bir işlemde bağlayıcılı kamera HAL'i de ayrılır. IPC, HIDL tarafından tanımlanan arayüzlerden geçer.
Doğrulama
Kamera içeren ve Android 7.0 çalıştıran tüm cihazlarda Android 7.0 CTS'yi çalıştırarak uygulamayı doğrulayın. Android 7.0, kamera hizmetindeki değişiklikleri doğrulayan yeni CTS testleri içermese de yukarıda belirtilen güncellemeleri yapmadıysanız mevcut CTS testleri geçersiz olur.
Kamera içeren ve Android 8.0 veya sonraki sürümleri çalıştıran tüm cihazlarda VTS'yi çalıştırarak tedarikçi firma uygulamasını doğrulayın.
Kamera HAL sürümü geçmişi
Android kamera HAL'ini değerlendirmek için kullanılabilen testlerin listesi için Kamera HAL Testi Yapılacaklar Listesi'ne bakın.
Android 10
Android 10'da aşağıdaki güncellemeler sunulur.
Kamera API'si
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların tek tek veya ilgili mantıksal kameralar aracılığıyla kullanılmasına olanak tanıyan çok kameralı iyileştirmeler. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Yeni oturum oluşturmanın performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme olanağı.
CameraDevice
adresine göz atın. - İstemciyi daha güç verimli ve performanslı hale getirmek için belirli bir kullanım alanı için önerilen akış yapılandırmalarını alma olanağı.
getRecommendedStreamConfigurationMap
adresine göz atın. - Derinlik JPEG resim biçimi desteği. Ayrıntılı bilgi için Dinamik Derinlik spesifikasyonuna bakın.
- HEIC resim biçimi desteği. HEIF Görüntüleme başlıklı makaleyi inceleyin.
- Gizlilik iyileştirmeleri. Belirli anahtarların
CameraCharacteristics
'den alınabilmesi için istemcininCAMERA
izinlerine sahip olması gerekir. Bkz.getKeysNeedingPermission
.
Kamera HAL'i
Aşağıdaki Kamera HAL sürümleri Android 10'da güncellendi.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Mantıksal kamera cihazını destekleyen fiziksel bir kamera kimliği için statik kamera bilgileri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin. isStreamCombinationSupported
: Bu yöntem, istemcilerin oturum yapılandırmasının desteklenip desteklenmediğini sorgulamasına yardımcı olan herkese açık bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API başlıklı makaleyi inceleyin.
ICameraDeviceSession
-
isReconfigurationNeeded
: Olası yeni oturum parametresi değerleri için kamera çerçevesine tam akış yeniden yapılandırmasının gerekip gerekmediğini bildiren yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerinin önlenmesine yardımcı olur. Oturum yeniden yapılandırma sorgusu başlıklı makaleyi inceleyin. - HAL arabellek yönetimi API'leri: Bu API'ler, kamera HAL'inin her yakalama isteğini kamera ardışık düzeni boyunca ilişkili arabellekleriyle birleştirmek yerine yalnızca gerektiğinde kamera çerçevesinden arabellek istemesine olanak tanır. Bu da önemli ölçüde bellek tasarrufu sağlar.
-
signalStreamFlush
: HAL'e, kamera hizmetininconfigureStreams_3_5
işlemini gerçekleştirmek üzere olduğunu ve HAL'in belirlenen tüm akışların arabelleklerini döndürmesi gerektiğini bildirir. -
configureStreams_3_5
:ICameraDevice3.4.configureStreams
'e benzer ancakconfigureStreams_3_5
vesignalStreamFlush
çağrıları arasında yarış koşulu olup olmadığını kontrol etmek içinstreamConfigCounter
sayacı da sağlanır.
-
ICameraDeviceCallback
ile ilgili güncellemeler:
-
requestStreamBuffers
: Kamera HAL'inin, kamera sunucusundan arabellekler istemek için çağırdığı eşzamanlı geri çağırma işlevi. Bkz.requestStreamBuffers
. -
returnStreamBuffers
: Kamera HAL'inin çıkış arabelleklerini kamera sunucusuna döndürmesi için senkron geri çağırma işlevi. Bkz.returnStreamBuffers
.
3.4
Android 10'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Resim biçimleri
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- Kamera meta veri etiketleri
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- Özellikler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
anahtarının değerleriANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- Kullanılabilir dinamik derinlik akış yapılandırmaları
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- Kullanılabilir HEIC yayın yapılandırmaları
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Kamera modülü
Aşağıdaki kamera modülü sürümleri Android 10'da güncellendi.
2,5
- Katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde cihazların kamera HAL'ini bilgilendirmesi için
notifyDeviceStateChange
yöntemini ekler.
2.4
- API düzeyi 29 veya sonraki sürümleri çalıştıran cihazlar,
isTorchModeSupported
içintrue
değerini bildirmelidir.
Android 9
Android 9 sürümünde, kamera API2 ve HAL arayüzünde aşağıdaki güncellemeler kullanıma sunulmuştur.
Kamera API'si
- Aynı yöne bakan birden fazla kamerası olan cihazları daha iyi desteklemek için çoklu kamera API'sini kullanıma sunar. Bu API, bulanıklık ve sorunsuz yakınlaştırma gibi özellikleri etkinleştirir. Bu sayede uygulamalar, bir cihazdaki birden fazla kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntüleyebilir. Kayıt istekleri, tek bir mantıksal kameranın kapsadığı ayrı kamera cihazlarına da gönderilebilir. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Oturum parametrelerini tanıtır. Oturum parametreleri, mevcut yakalama parametrelerinin bir alt kümesidir ve değiştirildiğinde ciddi işleme gecikmelerine neden olabilir. İstemciler, yakalama oturumu başlatılırken ilk değerlerini iletirse bu maliyetler azaltılabilir. Oturum Parametreleri bölümüne bakın.
- Uygulama düzeyinde sabitleme ve efektler için optik sabitleme (OIS) veri anahtarları ekler. Bkz.
STATISTICS_OIS_SAMPLES
. - Harici flaş desteği ekler. Bkz.
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. CAPTURE_INTENT
'te hareket izleme amacı ekler. Bkz.CONTROL_CAPTURE_INTENT_MOTION_TRACKING
.LENS_RADIAL_DISTORTION
desteği sonlandırılır ve yerineLENS_DISTORTION
eklenir.CaptureRequest
'te distorsiyon düzeltme modları ekler. Bkz.DISTORTION_CORRECTION_MODE
.- Desteklenen cihazlarda harici USB/UVC kamera desteği eklendi. Bkz.
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Kamera HAL'i
3.4
ICameraDeviceSession
ile ilgili güncellemeler
-
configureStreams_3_4
:sessionParameters
ve mantıksal kameralar için destek ekler. -
processCaptureRequest_3_4
: Akış yapısına fiziksel kamera kimlikleri ekleme desteği eklendi.
ICameraDeviceCallback
ile ilgili güncellemeler
-
processCaptureResult_3_4
: Kamera yakalama sonuçlarına fiziksel kamera meta verilerini ekler.
3.3
Android 9'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Özellikler
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- Kamera meta veri etiketleri
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
Android 8.0 sürümünde Treble kullanıma sunulmuştur. Treble ile birlikte, tedarikçi firma kamera HAL uygulamalarının bağlantılandırılmış olması gerekir. Android 8.0, Kamera hizmetinde aşağıdaki önemli iyileştirmeleri de içerir:
- Paylaşılan yüzeyler: Aynı
OutputConfiguration
- Özel kamera modları için System API
onCaptureQueueEmpty
Bu özellikler hakkında daha fazla bilgi için aşağıdaki bölümlere göz atın.
Paylaşılan yüzeyler
Bu özellik, önizleme ve video kodlama gibi iki çıkışı yalnızca bir arabellek grubuyla destekler. Böylece güç ve bellek tüketimi azalır. Bu özelliği desteklemek için cihaz üreticilerinin, kamera HAL ve gralloc HAL uygulamalarının tek bir tüketici yerine birden fazla farklı tüketici (ör. donanım derleyici/GPU ve video kodlayıcı) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'ine ve gralloc HAL'ine iletir. Bu HAL'lerin doğru türde arabellekler ayırması veya kamera HAL'inin bu tüketici kombinasyonunun desteklenmediğine dair bir hata döndürmesi gerekir.
Ayrıntılı bilgi için
enableSurfaceSharing
geliştirici belgelerine bakın.
Özel kamera modları için System API
Herkese açık kamera API'si iki çalışma modu tanımlar: normal ve sınırlı yüksek hızlı kayıt. Bunlar oldukça farklı anlamlara sahiptir. Örneğin, yüksek hızlı mod aynı anda en fazla iki belirli çıkışla sınırlıdır. Çeşitli OEM'ler, donanıma özgü özellikler için başka özel modlar tanımlamak istediklerini belirtti. Mod, configure_streams
işlevine iletilen bir tam sayıdır. Bkz.:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Bu özellik, OEM kamera uygulamalarının özel modu etkinleştirmek için kullanabileceği bir sistem API çağrısı içerir. Bu modlar, herkese açık API'ye eklenecek gelecekteki modlarla çakışma olmaması için 0x8000 tam sayı değerinden başlamalıdır.
OEM'lerin bu özelliği desteklemesi için tek yapması gereken, configure_streams üzerinde HAL'e iletilen bu tam sayı tarafından tetiklenen yeni modu HAL'lerine eklemek ve ardından özel kamera uygulamalarının sistem API'sini kullanmasını sağlamaktır.
Yöntem adı
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Bkz.:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
Bu API'nin amacı, istek kuyruğunu mümkün olduğunca boş tutarak yakınlaştırma gibi kontrol değişikliklerinin gecikmesini azaltmaktır. onCaptureQueueEmpty
HAL çalışması gerektirmez; tamamen çerçeve tarafında bir eklemedir. Bu özellikten yararlanmak isteyen uygulamaların bu geri çağırma işlevine bir dinleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Genellikle kamera cihazına başka bir yakalama isteği göndererek yapılır.
Kamera HIDL arayüzü
Kamera HIDL arayüzü, kararlı HIDL tanımlı API'ler kullanan Kamera HAL arayüzünün tamamen yeni bir sürümüdür. En son eski sürümlerde (3.4 ve 2.4) sunulan tüm özellikler ve kamera özellikleri (kamera modülü için) de HIDL tanımlarının bir parçasıdır.
3.4
Desteklenen meta verilere küçük eklemeler ve data_space desteğinde yapılan değişiklikler:
RAW_OPAQUE
biçimi destekleniyorsa zorunlu olarakANDROID_SENSOR_OPAQUE_RAW_SIZE
statik meta verileri ekleyin.- RAW biçimi destekleniyorsa
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
statik meta verilerini zorunlu olarak ekleyin. - Veri alanı kodlamasının 0 numaralı sürümünü kullanarak
camera3_stream_t data_space
alanını daha esnek bir tanıma geçirin. - HALv3.2 veya daha yeni sürümlerde kullanılabilen genel meta veri eklemeleri:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Genişletilmiş özellikli HAL'de küçük düzeltme:
- OPAQUE ve YUV yeniden işleme API güncellemeleri.
- Derinlik çıkış arabellekleri için temel destek.
camera3_stream_t
alanınadata_space
alanı eklendi.camera3_stream_t
alanına rotasyon alanı eklendi.camera3_stream_configuration_t
sürümüne camera3 akış yapılandırması çalışma modu eklendi.
3.2
Genişletilmiş özellikli HAL'de küçük düzeltme:
get_metadata_vendor_tag_ops
öğesini kullanımdan kaldırır. Bunun yerinecamera_common.h
içindeget_vendor_tag_ops
kullanın.register_stream_buffers
öğesini kullanımdan kaldırır.process_capture_request
'te çerçeve tarafından HAL'e sağlanan tüm gralloc arabellekleri herhangi bir zamanda yeni olabilir.- Kısmi sonuç desteği ekleyin.
process_capture_result
, tam sonuç elde edilmeden önce mevcut sonuçların bir alt kümesiyle birden çok kez çağrılabilir. camera3_request_template
alanına manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanamaz.- İki yönlü ve giriş akışı özelliklerini yeniden işleyin.
- Giriş arabelleğinin dönüş yolunu değiştirin. Arabellek,
process_capture_request
yerineprocess_capture_result
içinde döndürülür.
3.1
Genişletilmiş özellikli HAL'de küçük düzeltme:
configure_streams
, tüketici kullanım işaretlerini HAL'e iletir.- Tüm yayındaki isteklerin/arabelleklerin mümkün olduğunca hızlı bir şekilde bırakılması için flush çağrısı.
3,0
Genişletilmiş özellikli HAL'in ilk düzeltmesi:
- ABI tamamen farklı olduğundan ana sürüm değişikliği. 2.0 sürümüne kıyasla gerekli donanım özelliklerinde veya işletim modelinde herhangi bir değişiklik yoktur.
- Yeniden tasarlanmış giriş isteği ve akış kuyruğu arayüzleri: Framework, sonraki istek ve akış arabelleklerinin kuyruktan kaldırıldığı HAL'i çağırır. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
- Tetikleyiciler isteklere, çoğu bildirim ise sonuçlara taşındı.
- Tüm geri çağırma işlevlerini tek bir yapıda, tüm kurulum yöntemlerini ise tek bir
initialize()
çağrısında birleştirdik. - Akış yönetimini basitleştirmek için yayın yapılandırmasını tek bir çağrıya dönüştürdük.
İki yönlü akışlar,
STREAM_FROM_STREAM
yapısının yerini alır. - Eski/sınırlı donanım cihazları için sınırlı mod semantikleri.
2,0
Genişletilmiş özellikli HAL'ın ilk sürümü (Android 4.2) [camera2.h]:
- Mevcut
android.hardware.Camera
API'yi uygulamak için yeterlidir. - Kamera hizmet katmanında ZSL kuyruğuna izin verir.
- Manuel çekim kontrolü, Bayer RAW çekimi, RAW verilerinin yeniden işlenmesi gibi yeni özellikler için test edilmemiştir.
1,0
İlk Android kamera HAL'i (Android 4.0) [camera.h]:
- C++ CameraHardwareInterface soyutlama katmanından dönüştürülmüştür.
android.hardware.Camera
API'yi destekler.
Kamera modülü sürüm geçmişi
Bu bölümde, camera_module_t.common.module_api_version
'e dayalı olarak kamera donanım modülü için modül sürüm bilgileri yer almaktadır. En önemli iki onaltılık basamak ana sürümü, en az önemli iki basamak ise alt sürümü temsil eder.
2.4
Bu kamera modülü sürümü aşağıdaki API değişikliklerini ekler:
- El feneri modu desteği. Çerçeve, kamera cihazını açmadan, yanıp sönen bir birimi olan tüm kamera cihazlarında el feneri modunu açabilir. Kamera cihazının, flaş birimine erişme önceliği kamera modülünden daha yüksektir. Bir kamera cihazı açıldığında, modül arayüzü üzerinden etkinleştirilmişse el feneri kapatılır. Bir kamera cihazını açmak için
open()
çağrılması gibi kaynak çakışmaları olduğunda kamera HAL modülü, el feneri modu durum geri çağırması aracılığıyla el feneri modunun kapatıldığını çerçeveye bildirmelidir. - Harici kamera (ör.USB sıcak takma kamerası) desteği API güncellemeleri, kameranın statik bilgilerinin yalnızca kamera bağlıyken ve harici sıcak takma kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Kamera durumu
CAMERA_DEVICE_STATUS_PRESENT
olmadığında statik bilgi alma çağrıları geçersizdir. Çerçeve, kullanılabilir harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırma işlevlerini kullanır. - Kamera arabuluculuğuyla ilgili ipuçları. Aynı anda açılabilecek ve kullanılabilecek kamera cihazlarının sayısını açıkça belirtme desteği eklendi. Geçerli cihaz kombinasyonlarını belirtmek için
resource_cost
veconflicting_devices
alanları,get_camera_info
çağrısı tarafından döndürülencamera_info
yapısında her zaman ayarlanmalıdır. - Modül ilk kullanıma hazırlama yöntemi. HAL modülü yüklendikten sonra kamera hizmeti tarafından çağrılır ve HAL'in tek seferlik başlatılmasına olanak tanır. Diğer modül yöntemleri çağrılmadan önce çağrılır.
2.3
Bu kamera modülü sürümü, açık eski kamera HAL cihaz desteği ekler.
Aynı cihaz birden fazla cihaz API sürümünü destekliyorsa çerçeve, kamera cihazını daha düşük cihaz HAL sürümü olarak açmak için bu özelliği kullanabilir.
Standart donanım modülü açma çağrısı (common.methods->open
), kamera cihazını desteklenen en son sürümle (camera_info_t.device_version
'te listelenen sürüm) açmaya devam eder.
2,2
Bu kamera modülü sürümü, modülden tedarikçi etiketi desteği ekler ve daha önce yalnızca cihaz açıkken erişilebilen eski vendor_tag_query_ops
için desteği sonlandırır.
2.1
Bu kamera modülü sürümü, kamera HAL modülünden çerçeveye asenkron geri çağırma desteği ekler. Bu destek, çerçeveyi kamera modülü durumundaki değişiklikler hakkında bilgilendirmek için kullanılır. Geçerli bir set_callbacks()
yöntemi sağlayan modüller en az bu sürüm numarasını bildirmelidir.
2,0
Bu sürüm numarasını bildiren kamera modülleri, kamera modülü HAL arayüzünün ikinci sürümünü uygular. Bu modül aracılığıyla açılabilen kamera cihazları, kamera cihazı HAL arayüzünün 1.0 veya 2.0 sürümünü destekleyebilir. camera_info alanının device_version
değeri her zaman geçerlidir. device_version
alanı 2.0 veya daha yüksek bir sürümse camera_info
alanının static_camera_characteristics
değeri geçerlidir.
1,0
Bu sürüm numaralarını bildiren kamera modülleri, ilk kamera modülü HAL arayüzünü uygular. Bu modül aracılığıyla açılabilen tüm kamera cihazları, kamera cihazı HAL'inin yalnızca 1. sürümünü destekler. camera_info
öğesinin device_version
ve static_camera_characteristics
alanları geçerli değil. Bu modül ve cihazları yalnızca android.hardware.Camera
API'si destekleyebilir.