Bu sayfa, Kamera HAL'leri, API'ler ve ilişkili Uyumluluk Test Paketi (CTS) testlerindeki sürüm farklılıklarını detaylandırır. Ayrıca, Android 7.0'da kamera çerçevesini sağlamlaştırmak ve güvence altına almak için yapılan çeşitli mimari değişiklikleri, Android 8.0'da Tiz'e geçişi ve satıcıların kamera uygulamalarında bu değişiklikleri desteklemek için yapması gereken güncellemeleri kapsar.
terminoloji
Bu sayfada aşağıdaki terimler kullanılmaktadır:
- Kamera API1
- Android 4.4 ve altı cihazlarda
android.hardware.Camera
sınıfı aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi. - Kamera API2
- Android 5.0 ve üzeri cihazlarda
android.hardware.camera2
paketi aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi. - Kamera HAL'ı
- SoC satıcıları tarafından uygulanan kamera modülü katmanı. Uygulama düzeyinde genel çerçeveler, kamera HAL'ının üzerine inşa edilmiştir.
- Kamera HAL3.1
- Android 4.4 ile yayınlanan HAL kamera cihazının sürümü.
- Kamera HAL3.2
- Android 5.0 ile piyasaya sürülen HAL kamera cihazının sürümü.
- Kamera API1 CTS'si
- Camera API1 üzerinde çalışan kamera CTS testleri seti.
- Kamera API2 CTS'si
- Camera API2 üzerinde çalışan ek kamera CTS testleri seti.
- tiz
- Satıcı uygulamasını (silikon üreticileri tarafından yazılan cihaza özel, alt düzey yazılım) yeni bir satıcı arabirimi aracılığıyla Android işletim sistemi çerçevesinden ayırır.
- HIDL
- Tiz ile tanıtılan ve bir HAL ile kullanıcıları arasındaki arabirimi belirtmek için kullanılan HAL arabirim tanımlama dili .
- VTS
- Treble ile birlikte sunulan satıcı test paketi .
Kamera API'leri
Android, aşağıdaki kamera API'lerini içerir.
Kamera API1
Android 5.0, Camera API2'ye odaklanan yeni platform geliştirmesi nedeniyle kullanımdan kaldırılmaya devam eden Camera API1'i kullanımdan kaldırmıştır. Ancak kullanımdan kaldırma süresi uzun olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecek. Özellikle, destek aşağıdakiler için devam eder:
- Uygulamalar için Camera API1 arayüzleri. Camera API1 üzerine inşa edilen kamera uygulamaları, Android'in daha düşük 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.
Kamera API2
Camera API2 çerçevesi, verimli sıfır kopyalı seri çekim/akış akışları ve pozlama, kazanç, beyaz dengesi kazanımları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlasının kare başına kontrolleri dahil olmak üzere uygulamaya daha düşük düzeyde kamera kontrolü sunar. Ayrıntılar için Google I/O video genel bakışını izleyin.
Android 5.0 ve üzeri, Camera API2'yi içerir; ancak, Android 5.0 ve üzerini çalıştıran cihazlar tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arabirimleri aracılığıyla sorgulayabildiği android.info.supportedHardwareLevel
özelliği, aşağıdaki destek düzeylerinden birini bildirir:
-
LEGACY
: Bu cihazlar, Camera API1 arabirimleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı yeteneklere sahip olan Camera API2 arabirimleri aracılığıyla uygulamalara yetenekler sunar. Eski çerçeveler kodu, Camera API2 çağrılarını kavramsal olarak Camera API1 çağrılarına çevirir; eski cihazlar, kare başına denetimler gibi Camera API2 özelliklerini desteklemez. -
LIMITED
: Bu cihazlar bazı Camera API2 özelliklerini destekler (hepsini değil) ve Camera HAL 3.2 veya üstünü kullanmalıdır. -
FULL
: Bu cihazlar, Camera API2'nin tüm önemli özelliklerini destekler ve Camera HAL 3.2 veya üzerini ve Android 5.0 veya üzerini kullanmalıdır. -
LEVEL_3
: Bu cihazlar, ek çıkış akışı yapılandırmalarıyla birlikte YUV yeniden işlemeyi ve RAW görüntü yakalamayı destekler. -
EXTERNAL
: Bu cihazlar, bazı istisnalar dışındaLIMITED
cihazlara benzer; örneğin, bazı sensör veya lens bilgileri raporlanmayabilir veya daha az sabit kare hızlarına sahip olabilir. Bu seviye, USB web kameraları gibi harici kameralar için kullanılır.
Bireysel yetenekler, Camera API2 arabirimlerindeki android.request.availableCapabilities
özelliği aracılığıyla gösterilir. FULL
cihazlar, diğerlerinin yanı sıra MANUAL_SENSOR
ve MANUAL_POST_PROCESSING
özelliklerini gerektirir. RAW
özelliği, FULL
cihazlar için bile isteğe bağlıdır. LIMITED
cihaz, hiçbiri dahil olmak üzere bu yeteneklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak, BACKWARD_COMPATIBLE
özelliği her zaman tanımlanmalıdır.
Cihazın desteklenen donanım düzeyi ve desteklediği belirli Camera API2 yetenekleri, Google Play'in Camera API2 kamera uygulamalarını filtrelemesine izin vermek için aşağıdaki özellik işaretleri olarak mevcuttur.
-
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 gereksinimleri
Android 5.0 ve sonraki sürümleri çalıştıran cihazların Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmesi gerekir.
Camera HAL3.2 uygulamasına sahip olmayan ve Camera API2 arabirimlerinin tamamını destekleyemeyen cihazların yine de Camera API2 CTS testlerini geçmesi gerekir. Ancak cihaz, Camera API2 LEGACY
modunda çalışır (burada Camera API2 çağrıları kavramsal olarak Camera API1 çağrılarıyla eşlenir), bu nedenle Camera API1 dışındaki özellikler veya yeteneklerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.
Eski cihazlarda, yürütülen Camera API2 CTS testleri, yeni gereksinimler olmaksızın mevcut genel Camera API1 arayüzlerini ve yeteneklerini kullanır. Ortaya çıkan (ve bir Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'sinde zaten mevcut olan ve dolayısıyla mevcut Camera API1 uygulamaları tarafından bulunabilecek hatalardır. Bu türden çok fazla hata beklemiyoruz (ancak, Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).
VTS gereklilikleri
Birleştirilmiş HAL uygulamalarına sahip Android 8.0 ve sonraki sürümleri çalıştıran cihazların Camera VTS testlerini geçmesi gerekir.
Kamera çerçevesi sertleştirme
Medya ve kamera çerçevesi güvenliğini sağlamlaştırmak için Android 7.0, kamera hizmetini medya sunucusunun dışına taşır. Android 8.0'dan başlayarak, birleştirilmiş her bir Kamera HAL'si, kamera hizmetinden ayrı bir süreçte çalışır. Satıcıların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'ında değişiklik yapması gerekebilir. Aşağıdaki bölümler, genel gereksinimlerin yanı sıra HAL1 ve HAL3 için AP1 ve AP2'deki mimari değişiklikleri detaylandırır.
API1 için mimari değişiklikler
API1 video kaydı, kamera ve video kodlayıcının aynı süreçte yaşadığını varsayabilir. API1'i kullanırken:
- Kamera hizmetinin işlemler arasında arabellekleri geçirmek için BufferQueue kullandığı HAL3'te satıcı güncellemesi gerekmez.
Şekil 1. API1'de HAL3'te Android 7.0 kamera ve ortam yığını
- Video arabelleklerinde meta verilerin iletilmesini destekleyen HAL1, satıcıların HAL'ı
kMetadataBufferTypeNativeHandleSource
kullanacak şekilde güncellemesi gerekir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmemektedir.)Şekil 2. HAL1'de API1'de Android 7.0 kamera ve ortam yığını
API2 için mimari değişiklikler
HAL1 veya HAL3'teki API2 için BufferQueue, bu yolların çalışmaya devam etmesi için arabellekleri iletir. API2 için Android 7.0 mimarisi:
- HAL1, cameraservice taşımasından etkilenmez ve satıcı güncellemesi gerekmez.
- HAL3 etkilenir , ancak satıcı güncellemesi gerekli değildir :
Şekil 3. HAL3'te API2'de Android 7.0 kamera ve ortam yığını
Ek gereksinimler
Ortam ve kamera çerçeve güvenliğinin güçlendirilmesi için yapılan mimari değişiklikler, aşağıdaki ek cihaz gereksinimlerini içerir.
- Genel. Cihazlar, yüksek hızlı video kaydı gibi zamana duyarlı kamera kullanım durumlarını etkileyebilen IPC nedeniyle ek bant genişliği gerektirir. Satıcılar, 120/240 FPS yüksek hızlı video kaydı için
android.hardware.camera2.cts.PerformanceTest
ve Google Kamera uygulamasını çalıştırarak gerçek etkiyi ölçebilir. Cihazlar ayrıca yeni işlemi oluşturmak için az miktarda ek RAM gerektirir. - Meta verileri video arabelleklerinde iletin ( yalnızca HAL1 ). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depolarsa, HAL, meta veri arabellek türü olarak
kMetadataBufferTypeNativeHandleSource
kullanmalı ve video arabelleklerindeVideoNativeHandleMetadata
iletmelidir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmemektedir.)VideoNativeHandleMetadata
ile kamera ve medya çerçeveleri, yerel tutamaçları düzgün bir şekilde seri hale getirerek ve serisini kaldırarak video arabelleklerini işlemler arasında geçirebilir. - Arabellek işleyici 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, arabelleği döndürdükten sonra adresler başka bir arabellek tanıtıcısı saklayabileceğinden, HAL, arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak üzere arabellek tutamaçlarını kullanmak için HAL'ı güncellemeniz gerekir. Örneğin, HAL, tampon tanıtıcısı A'yı saklayan bir tampon tanıtıcısı A adresini alır. HAL, tampon tanıtıcısı A'yı döndürdükten sonra, tampon tanıtıcısı A adresi, HAL'ın bir sonraki alımında tampon tanıtıcısı B'yi depolayabilir.
- cameraserver için SELinux politikalarını güncelleyin. Cihaza özgü SELinux ilkeleri, medya sunucusuna kamerayı çalıştırmak için izinler veriyorsa, cameraserver'a uygun izinleri vermek için SELinux ilkelerini güncellemeniz gerekir. Mediaserver'ın cameraserver için SELinux politikalarının çoğaltılmasını önermiyoruz (çünkü mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirir). Cameraserver, yalnızca kamera işlevlerini gerçekleştirmek için gereken izinlere sahip olmalı ve mediaserver'daki kamerayla ilgili gereksiz tüm izinler kaldırılmalıdır.
- Camera HAL ve cameraserver arasındaki ayrım. Android 8.0 ve sonraki sürümler ayrıca, birleştirilmiş Kamera HAL'ını cameraserver'dan farklı bir süreçte ayırır. IPC, HIDL tanımlı arayüzlerden geçer.
Doğrulama
Kamera içeren ve Android 7.0 çalıştıran tüm cihazlar için Android 7.0 CTS çalıştırarak uygulamayı doğrulayın. Android 7.0, kamera hizmeti değişikliklerini doğrulayan yeni CTS testleri içermese de, yukarıda belirtilen güncellemeleri yapmadıysanız mevcut CTS testleri başarısız olur.
Kamera içeren ve Android 8.0 ve üstünü çalıştıran tüm cihazlar için, VTS'yi çalıştırarak satıcı uygulamasını doğrulayın.
Kamera HAL sürüm geçmişi
Android Kamera HAL'ını değerlendirmek için kullanılabilen testlerin bir listesi için Kamera HAL Testi Kontrol Listesi'ne bakın.
Android 10
Android 10 aşağıdaki güncellemeleri sunar.
Kamera API'sı
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların tek tek veya karşılık gelen mantıksal kameralar aracılığıyla kullanılmasına izin veren çok kameralı iyileştirmeler. Bkz. Çoklu Kamera Desteği .
- Yeni bir oturum oluşturmanın getirdiği performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme yeteneği. Bkz.
CameraDevice
. - İstemciyi daha fazla güç verimli ve performanslı hale getirmek için belirli bir kullanım durumu için önerilen akış yapılandırmalarını alma yeteneği.
getRecommendedStreamConfigurationMap
bakın. - Derinlik JPEG resim formatı desteği. Daha fazla ayrıntı için Dinamik Derinlik belirtimine bakın.
- HEIC Görüntü formatı için destek. Bkz. HEIF Görüntüleme .
- Gizlilik iyileştirmeleri. Belirli anahtarlar,
CameraCharacteristics
alınmadan önce istemcininCAMERA
izinlerine sahip olması için gereklidir.getKeysNeedingPermission
bakın.
Kamera HAL'ı
Aşağıdaki Kamera HAL sürümleri Android 10'da güncellenir.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Mantıksal bir kamera cihazını destekleyen fiziksel bir kamera kimliği için statik kamera bilgisi. Bkz. Çoklu Kamera Desteği . -
isStreamCombinationSupported
: Bu yöntem, istemcilerin bir oturum yapılandırmasının desteklenip desteklenmediğini sorgulamasına yardımcı olan genel bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API'ye bakın.
ICameraDeviceSession
-
isReconfigurationNeeded
: Kamera çerçevesine, olası yeni oturum parametre değerleri için tam akış yeniden yapılandırmasının gerekip gerekmediğini söyleyen yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerini önlemeye yardımcı olur. Bkz. Oturum yeniden yapılandırma sorgusu . - HAL arabellek yönetimi API'leri : Bu API'ler, kamera ardışık düzeni boyunca her bir yakalama isteğini ilgili arabelleklerle birleştirmek yerine, kamera HAL'sinin yalnızca gerektiğinde kamera çerçevesinden arabellek talep etmesine izin vererek potansiyel olarak önemli bellek tasarrufları sağlar.
-
signalStreamFlush
: HAL'a, kamera hizmetininconfigureStreams_3_5
gerçekleştirmek üzere olduğunu ve HAL'ın belirlenen akışların tüm arabelleklerini döndürmesi gerektiğini bildirir. -
configureStreams_3_5
:ICameraDevice3.4.configureStreams
benzer, ancak buna ek olarak,configureStreams_3_5
vesignalStreamFlush
çağrıları arasındaki bir yarış koşulunu kontrol etmek içinstreamConfigCounter
sayacı sağlanır.
-
ICameraDeviceCallback
Güncellemeleri:
-
requestStreamBuffers
: Kamera HAL'ının kamera sunucusundan arabellek istemek için çağırdığı senkronize geri arama.requestStreamBuffers
bakın. -
returnStreamBuffers
: Çıkış arabelleklerini kamera sunucusuna döndürmek üzere kamera HAL'ı için senkronize geri arama. Bkz.returnStreamBuffers
.
3.4
Android 10'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Resim formatları
-
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
-
- Yetenekler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
anahtarı için değerler-
ANDROID_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 akış 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üncellenmiştir.
2.5
- Katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde cihazların kamera HAL'ını bilgilendirmesi için
notifyDeviceStateChange
yöntemini ekler.
2.4
- API düzeyi 29 veya daha yüksek olan aygıtların
isTorchModeSupported
içintrue
bildirmesi GEREKİR.
Android 9
Android 9 sürümü, kamera API2 ve HAL arabiriminde aşağıdaki güncellemeleri sunar.
Kamera API'sı
- Birden fazla kameranın aynı yöne baktığı cihazları daha iyi desteklemek için çoklu kamera API'sini tanıtarak bokeh ve kusursuz yakınlaştırma gibi özellikleri etkinleştirir. Bu, uygulamaların bir cihazdaki birden çok kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntülemesine olanak tanır. Yakalama istekleri, tek bir mantıksal kamera tarafından kapsanan ayrı kamera cihazlarına da gönderilebilir. Bkz. Çoklu Kamera Desteği .
- Oturum parametrelerini tanıtır. Oturum parametreleri, değiştirildiğinde ciddi işleme gecikmelerine neden olabilecek mevcut yakalama parametrelerinin bir alt kümesidir. İstemciler, yakalama oturumu başlatma sırasında başlangıç değerlerini iletirlerse bu maliyetler azaltılabilir. Bkz. Oturum Parametreleri .
- Uygulama düzeyinde sabitleme ve efektler için optik sabitleme (OIS) veri anahtarları ekler.
STATISTICS_OIS_SAMPLES
bakın. - Harici flaş desteği ekler.
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
bakın. -
CAPTURE_INTENT
bir hareket izleme amacı ekler.CONTROL_CAPTURE_INTENT_MOTION_TRACKING
bakın. -
LENS_RADIAL_DISTORTION
kullanımdan kaldırılmıştır ve yerineLENS_DISTORTION
eklenmiştir. -
CaptureRequest
distorsiyon düzeltme modları ekler.DISTORTION_CORRECTION_MODE
bakın. - Desteklenen cihazlarda harici USB/UVC kameralar için destek ekler.
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
bakın.
Kamera HAL'ı
3.4
ICameraDeviceSession
Güncellemeleri
-
configureStreams_3_4
:sessionParameters
ve mantıksal kameralar için destek ekler. -
processCaptureRequest_3_4
: Akış yapısına fiziksel kamera kimliklerini dahil etmek için destek ekler.
ICameraDeviceCallback
Güncellemeleri
-
processCaptureResult_3_4
: Yakalama sonuçlarına fiziksel kamera meta verileri ekler.
3.3
Android 9'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Yetenekler
-
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ü Tiz'i sunar. Tiz ile, satıcı Kamera HAL uygulamalarının ciltlenmesi gerekir. Android 8.0 ayrıca Kamera hizmetine yönelik şu önemli geliştirmeleri içerir:
- Paylaşılan yüzeyler: Aynı
OutputConfiguration
paylaşan birden çok yüzeyi etkinleştirin - Özel kamera modları için Sistem API'si
-
onCaptureQueueEmpty
Bu özellikler hakkında daha fazla bilgi için aşağıdaki bölümlere bakın.
Paylaşılan yüzeyler
Bu özellik, güç ve bellek tüketimini azaltan önizleme ve video kodlama gibi iki çıkışı sürmek için yalnızca bir arabellek setine olanak tanır. Bu özelliği desteklemek için cihaz üreticilerinin kamera HAL ve gralloc HAL uygulamalarının tek bir tüketici yerine birden çok farklı tüketici (donanım oluşturucu/GPU ve video kodlayıcı gibi) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'ına ve graloc HAL'a iletir; ya doğru türde arabellek ayırmaları gerekir ya da kamera HAL'ının bu tüketici kombinasyonunun desteklenmediğine dair bir hata döndürmesi gerekir.
Ek ayrıntılar için enableSurfaceSharing
geliştirici belgelerine bakın.
Özel kamera modları için Sistem API'si
Genel kamera API'si iki çalışma modu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Oldukça farklı semantikleri var; örneğin, yüksek hız modu aynı anda en fazla iki belirli çıkışla sınırlıdır. Çeşitli OEM'ler, donanıma özgü yetenekler için diğer özel modları tanımlamaya ilgi duyduklarını ifade ettiler. Görünüşte, kip sadece configure_streams
iletilen bir tam sayıdır. Bakınız: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Bu özellik, OEM kamera uygulamalarının özel bir modu etkinleştirmek için kullanabileceği bir sistem API çağrısını içerir. Bu modlar, genel API'ye eklenecek gelecekteki modlarla çakışmayı önlemek için 0x8000 tamsayı değerinden başlamalıdır.
Bu özelliği desteklemek için, OEM'lerin yalnızca, configure_streams üzerinde HAL'ye iletilen bu tamsayı tarafından tetiklenen yeni modu HAL'lerine eklemeleri ve ardından özel kamera uygulamalarının sistem API'sini kullanmaları gerekir.
Yöntem adı android.hardware.camera2.CameraDevice#createCustomCaptureSession
şeklindedir. Bakınız: frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
Bu API'nin amacı, istek kuyruğunu olabildiğince boş tutarak yakınlaştırma gibi kontrol değişikliklerinin gecikmesini azaltmaktır. onCaptureQueueEmpty
HAL çalışması gerektirmez; tamamen çerçeve tarafı bir eklemeydi. Bundan yararlanmak isteyen uygulamaların, bu geri aramaya bir dinleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Genellikle bu, kamera cihazına başka bir yakalama isteği göndererek yapılır.
Kamera HIDL arayüzü
Camera HIDL arabirimi, kararlı HIDL tanımlı API'ler kullanan Camera HAL arabiriminin eksiksiz bir revizyonudur. En son eski sürüm 3.4 ve 2.4'te (kamera modülü için) sunulan tüm özellikler ve kamera yetenekleri de HIDL tanımlarının bir parçasıdır.
3.4
Desteklenen meta verilere küçük eklemeler ve data_space desteğindeki değişiklikler:
-
RAW_OPAQUE
biçimi destekleniyorsa,ANDROID_SENSOR_OPAQUE_RAW_SIZE
statik meta verilerini zorunlu olarak ekleyin. - Herhangi bir RAW biçimi destekleniyorsa,
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
statik meta verilerini zorunlu olarak ekleyin. -
camera3_stream_t data_space
alanını daha esnek bir tanımla değiştirin. - HALv3.2 veya daha yenisi için 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ş kapasiteli HAL'ın küçük revizyonu:
- OPAQUE ve YUV yeniden işleme API güncellemeleri.
- Derinlik çıkış arabellekleri için temel destek.
-
data_space
alanınıncamera3_stream_t
eklenmesi. -
camera3_stream_t
döndürme alanı eklendi. - camera3 akış yapılandırma çalışma modunun
camera3_stream_configuration_t
öğesine eklenmesi.
3.2
Genişletilmiş kapasiteli HAL'ın küçük revizyonu:
-
get_metadata_vendor_tag_ops
kullanımdan kaldırılmıştır. Bunun yerinecamera_common.h
içindeget_vendor_tag_ops
kullanın. -
register_stream_buffers
kullanımdan kaldırılmıştır.process_capture_request
içinde çerçeve tarafından HAL'a sağlanan tüm gralloc arabellekleri herhangi bir zamanda yeni olabilir. - Kısmi sonuç desteği ekleyin.
process_capture_result
tam sonuç mevcut olmadan önce mevcut sonuçların bir alt kümesiyle birden çok kez çağrılabilir. -
camera3_request_template
öğesine manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir. - Çift yönlü ve giriş akışı özelliklerini yeniden çalışın.
- Giriş arabelleği dönüş yolunu değiştirin. Tampon,
process_capture_request
yerineprocess_capture_result
içinde döndürülür.
3.1
Genişletilmiş kapasiteli HAL'ın küçük revizyonu:
-
configure_streams
tüketici kullanım bayraklarını HAL'a iletir. - tüm uçuş sırasında istekleri/arabellekleri olabildiğince hızlı bir şekilde bırakmak için çağrıyı boşaltın.
3.0
Genişletilmiş kapasiteli HAL'ın ilk revizyonu:
- ABI tamamen farklı olduğu için büyük sürüm değişikliği. 2.0'dan gerekli donanım yeteneklerinde veya işletim modelinde değişiklik yok.
- Yeniden çalışılan giriş isteği ve akış kuyruğu arabirimleri: Çerçeve, sonraki istek ve akış arabellekleri zaten kuyruktan çıkarılmış olarak HAL'a çağrılır. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
- Tetikleyiciler isteklere, çoğu bildirim sonuçlara taşındı.
- Tüm geri aramaları tek bir yapıda çerçeve içinde ve tüm kurulum yöntemlerini tek bir
initialize()
çağrısında birleştirdi. - Akış yönetimini basitleştirmek için akış yapılandırması tek bir çağrıda yapıldı. Çift yönlü akışlar,
STREAM_FROM_STREAM
yapısının yerini alır. - Daha eski/sınırlı donanım aygıtları için sınırlı mod semantiği.
2.0
Genişletilmiş kapasiteli HAL'ın (Android 4.2) [camera2.h] ilk sürümü:
- Mevcut
android.hardware.Camera
API'sini uygulamak için yeterlidir. - Kamera hizmet katmanında ZSL kuyruğuna izin verir.
- Manuel yakalama kontrolü, Bayer RAW yakalama, RAW verilerinin yeniden işlenmesi vb. yeni özellikler için test edilmemiştir.
1.0
İlk Android kamera HAL (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üm, camera_module_t.common.module_api_version
temel alınarak Kamera donanım modülü için modül versiyonlama bilgilerini içerir. En önemli iki onaltılık basamak ana sürümü temsil eder ve en önemsiz iki rakam küçük sürümü temsil eder.
2.4
Bu kamera modülü sürümü, aşağıdaki API değişikliklerini ekler:
- Meşale modu desteği. Çerçeve, flaş ünitesi olan herhangi bir kamera cihazı için kamera cihazını açmadan meşale modunu açabilir. Kamera cihazının flaş ünitesine erişimde kamera modülünden daha yüksek önceliği vardır; bir kamera cihazının açılması, modül arabirimi aracılığıyla etkinleştirildiyse meşaleyi kapatır. Bir kamera cihazını açmak için
open()
çağrılması gibi herhangi bir kaynak çakışması olduğunda, kamera HAL modülü meşale modunun kapatıldığını meşale modu durum geri araması aracılığıyla çerçeveye bildirmelidir. - Harici kamera (örneğin, USB çalışır durumda takılabilir kamera) desteği. API güncellemeleri, kamera statik bilgisinin yalnızca kamera bağlandığında ve harici çalışır durumda takılabilir kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Statik bilgi almak için yapılan çağrılar, kamera durumu
CAMERA_DEVICE_STATUS_PRESENT
olmadığında geçersiz çağrılardır. Çerçeve, mevcut harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri aramalarına güvenir. - Kamera tahkim ipuçları. Aynı anda açılıp kullanılabilecek kamera cihazlarının sayısını açıkça belirtmek için destek ekler. Geçerli cihaz kombinasyonlarını belirtmek için,
get_camera_info
çağrısı tarafından döndürülencamera_info
yapısında her zamanresource_cost
veconflicting_devices
alanları ayarlanmalıdır. - Modül başlatma yöntemi. HAL modülü yüklendikten sonra, HAL'ın bir defalık başlatılmasına izin vermek için kamera hizmeti tarafından çağrılır. Diğer herhangi bir modül yöntemi ç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. Çerçeve, aynı cihaz birden çok cihaz API sürümünü destekleyebiliyorsa kamera cihazını daha düşük cihaz HAL versiyonu HAL cihazı olarak açmak için kullanabilir. Standart donanım modülü açık çağrısı ( common.methods->open
), kamera cihazını, aynı zamanda camera_info_t.device_version
içinde listelenen desteklenen en son sürümle açmaya devam eder.
2.2
Bu kamera modülü sürümü, modülden satıcı etiketi desteği ekler ve daha önce yalnızca açık bir cihazla erişilebilen eski vendor_tag_query_ops
kullanımdan kaldırır.
2.1
Bu kamera modülü sürümü, çerçeveyi kamera modülü durumundaki değişiklikler hakkında bilgilendirmek için kullanılan kamera HAL modülünden çerçeveye eşzamansız geri aramalar için destek ekler. Geçerli bir set_callbacks()
yöntemi sağlayan modüller, en azından bu sürüm numarasını bildirmelidir.
2.0
Bu sürüm numarasını bildiren kamera modülleri, kamera modülü HAL arabiriminin ikinci sürümünü uygular. Bu modül aracılığıyla açılabilen kamera cihazları, kamera cihazı HAL arabiriminin 1.0 sürümünü veya 2.0 sürümünü destekleyebilir. camera_info'nun device_version
alanı her zaman geçerlidir; camera_info
static_camera_characteristics
alanı, device_version
alanı 2.0 veya daha yüksekse 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ı, HAL kamera cihazının yalnızca 1. sürümünü destekler. camera_info
device_version
ve static_camera_characteristics
alanları geçerli değil. Bu modül ve cihazları tarafından yalnızca android.hardware.Camera
API desteklenebilir.